Skip to content

ОтелСпаны ​

Модуль функций, которые возвращают незаписывающий спан: обёртку контекста спана и невалидный спан.

Описание ​

Реализует операцию Trace API «обернуть контекст спана в спан» (спецификация, раздел Wrapping a SpanContext in a Span). Аналоги Java: Span.wrap(SpanContext) и Span.getInvalid().

Функции возвращают ОтелНезаписывающийСпан — служебный класс, который не создают через Новый. Такой спан ничего не записывает: ЗаписьАктивна() возвращает Ложь, КонтекстСпана() — обёрнутый контекст, СделатьТекущим() делает спан текущим, методы записи (атрибуты, события, статус и т.д.) ничего не делают. Завершать его не нужно.

Обёртка нужна, когда известен только контекст спана — идентификаторы трассировки и спана, — а API принимает спан. Например, чтобы контекст из другого процесса стал родителем нового спана, его оборачивают в спан, кладут в контекст (Context) через ОтелКонтекст.КонтекстСоСпаном и передают в НачатьДочернийСпан трассировщика. Так же поступает W3C-пропагатор с контекстом спана из заголовка traceparent.

Функции ​

Обернуть ​

Оборачивает контекст спана в незаписывающий спан. Для валидного контекста каждый вызов создаёт новый спан с этим контекстом. Без контекста или для невалидного контекста (нулевые идентификаторы) возвращает Невалидный().

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

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


Невалидный ​

Возвращает незаписывающий спан с невалидным контекстом: идентификаторы трассировки и спана из нулей, флаги 0, пустое состояние трассировки. Объект создаётся при первом вызове и затем переиспользуется.

Невалидный спан в контексте родителем не считается: спан, начатый в таком контексте, будет корневым. Невалидный спан можно подставить вместо спана, когда трассировка не нужна: его методы записи ничего не делают.

Возвращает: ОтелНезаписывающийСпан

Пример ​

bsl
// Идентификаторы родительского спана пришли из другого процесса, например в сообщении очереди:
// флаги 1 - спан сэмплирован, Истина - удалённый контекст
КонтекстСпана = Новый ОтелКонтекстСпана(ИдТрассировки, ИдСпана, 1, , Истина);

// Незаписывающий спан с этим контекстом становится родителем нового спана
Родитель = ОтелСпаны.Обернуть(КонтекстСпана);
КонтекстРодителя = ОтелКонтекст.КонтекстСоСпаном(ОтелКонтекст.Текущий(), Родитель);
Спан = Трассировщик.НачатьДочернийСпан("обработка-сообщения", КонтекстРодителя, ОтелВидСпана.Потребитель());
// ...
Спан.Завершить();

// Заглушка вместо спана: методы записи невалидного спана ничего не делают
ФоновыйСпан = ОтелСпаны.Невалидный();
Если ТрассироватьФоновыеЗадачи Тогда
    ФоновыйСпан = Трассировщик.НачатьСпан("фоновая-задача");
КонецЕсли;
// ...
ФоновыйСпан.Завершить();

См. также ​