Skip to content

ОтелКонтекст

Модуль для управления текущим контекстом выполнения.

Описание

Реализует generic key-value хранилище контекста (аналог Java SDK: io.opentelemetry.context.Context). Каждый поток (ФоновоеЗадание) имеет свой стек контекстов. Контекст — это ФиксированноеСоответствие ключ → значение. Ключи — ОтелКлючКонтекста, сравниваются по ссылке.

Потокобезопасен: использует СинхронизированнаяКарта для хранения стеков контекстов.

Важно: Ключи для спана и Baggage являются приватными переменными модуля. Для работы со спанами и Baggage используйте специализированные методы ТекущийСпан(), ТекущийBaggage() и т.д.

Функции

СоздатьКлюч

Создает новый ключ контекста. Ключи сравниваются по ссылке — два ключа с одинаковым именем являются разными ключами.

ПараметрТипПо умолчаниюОписание
ИмяСтрокаИмя ключа (для отладки)

Возвращает: ОтелКлючКонтекста — новый ключ контекста


Текущий

Возвращает текущий контекст (верхний элемент стека). Если стек пуст, возвращает пустой иммутабельный контекст.

Возвращает: ФиксированноеСоответствие — текущий контекст (иммутабельный)


Получить

Возвращает значение из текущего контекста по ключу.

ПараметрТипПо умолчаниюОписание
КлючОтелКлючКонтекстаКлюч контекста

Возвращает: Произвольный, Неопределено — значение по ключу или Неопределено


ТекущийСпан

Возвращает текущий спан из контекста текущего потока.

Возвращает: ОтелСпан, Неопределено — текущий спан или Неопределено


ТекущийBaggage

Возвращает текущий Baggage из контекста текущего потока.

Возвращает: ОтелBaggage, Неопределено — текущий Baggage или Неопределено


ПолучитьИзКонтекста

Возвращает значение из переданного контекста по ключу.

ПараметрТипПо умолчаниюОписание
КонтекстФиксированноеСоответствие, СоответствиеКонтекст
КлючОтелКлючКонтекстаКлюч контекста

Возвращает: Произвольный, Неопределено — значение по ключу или Неопределено


КонтекстСоЗначением

Создает новый иммутабельный контекст с установленным значением.

ПараметрТипПо умолчаниюОписание
КонтекстФиксированноеСоответствие, СоответствиеИсходный контекст
КлючОтелКлючКонтекстаКлюч контекста
ЗначениеПроизвольныйЗначение для установки

Возвращает: ФиксированноеСоответствие — новый иммутабельный контекст


СпанИзКонтекста

Возвращает спан из переданного контекста или из текущего контекста потока.

ПараметрТипПо умолчаниюОписание
КонтекстОбъектФиксированноеСоответствие, Соответствие, НеопределеноНеопределеноЯвный контекст

Возвращает: ОтелСпан, Неопределено — спан или Неопределено


BaggageИзКонтекста

Возвращает Baggage из переданного контекста или из текущего контекста потока.

ПараметрТипПо умолчаниюОписание
КонтекстОбъектФиксированноеСоответствие, Соответствие, НеопределеноНеопределеноЯвный контекст

Возвращает: ОтелBaggage, Неопределено — Baggage или Неопределено


КонтекстСоСпаном

Создает новый иммутабельный контекст (копию переданного) с установленным спаном.

ПараметрТипПо умолчаниюОписание
КонтекстФиксированноеСоответствие, СоответствиеИсходный контекст
СпанОтелСпан, ОтелНезаписывающийСпанСпан для установки

Возвращает: ФиксированноеСоответствие — новый иммутабельный контекст со спаном


ПрисоединитьКонтекст

Присоединяет новый контекст к текущему потоку (Attach Context). Помещает контекст на вершину стека.

ПараметрТипПо умолчаниюОписание
КонтекстФиксированноеСоответствие, СоответствиеКонтекст для установки

Возвращает: ОтелТокенКонтекста — токен для последующего ОтсоединитьКонтекст()


ОтсоединитьКонтекст

Отсоединяет контекст по токену, восстанавливая предыдущий (Detach Context).

ПараметрТипПо умолчаниюОписание
ТокенОтелТокенКонтекстаТокен, возвращенный из ПрисоединитьКонтекст()

Возвращает: БулевоИстина при корректном порядке, Ложь при нарушении


Очистить

Очищает контекст текущего потока.


ОчиститьМертвыеПотоки

Удаляет стеки контекстов для завершившихся потоков. Предотвращает утечку памяти. Вызывается автоматически при ОтелSdk.Закрыть().


КоличествоОтслеживаемыхПотоков

Возвращает количество отслеживаемых потоков. Используется для мониторинга и тестирования утечек.

Возвращает: Число — количество отслеживаемых потоков

Пример

bsl
// RAII-паттерн
Токен = Спан.СделатьТекущим();
Попытка
    // ... работа в контексте спана ...
Исключение
    Спан.ЗаписатьИсключение(ИнформацияОбОшибке());
КонецПопытки;
Токен.Закрыть();
Спан.Завершить();

// Явный Attach/Detach
Токен = ОтелКонтекст.ПрисоединитьКонтекст(НовыйКонтекст);
// ... работа ...
ОтелКонтекст.ОтсоединитьКонтекст(Токен);

См. также