ОтелСпаны
Модуль функций, которые возвращают незаписывающий спан: обёртку контекста спана и невалидный спан.
Описание
Реализует операцию Trace API «обернуть контекст спана в спан» (спецификация, раздел Wrapping a SpanContext in a Span). Аналоги Java: Span.wrap(SpanContext) и Span.getInvalid().
Функции возвращают ОтелНезаписывающийСпан — служебный класс, который не создают через Новый. Такой спан ничего не записывает: ЗаписьАктивна() возвращает Ложь, КонтекстСпана() — обёрнутый контекст, СделатьТекущим() делает спан текущим, методы записи (атрибуты, события, статус и т.д.) ничего не делают. Завершать его не нужно.
Обёртка нужна, когда известен только контекст спана — идентификаторы трассировки и спана, — а API принимает спан. Например, чтобы контекст из другого процесса стал родителем нового спана, его оборачивают в спан, кладут в контекст (Context) через ОтелКонтекст.КонтекстСоСпаном и передают в НачатьДочернийСпан трассировщика. Так же поступает W3C-пропагатор с контекстом спана из заголовка traceparent.
Функции
Обернуть
Оборачивает контекст спана в незаписывающий спан. Для валидного контекста каждый вызов создаёт новый спан с этим контекстом. Без контекста или для невалидного контекста (нулевые идентификаторы) возвращает Невалидный().
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
КонтекстСпана | ОтелКонтекстСпана | Неопределено | Контекст спана |
Возвращает: ОтелНезаписывающийСпан — спан с переданным контекстом или невалидный спан
Невалидный
Возвращает незаписывающий спан с невалидным контекстом: идентификаторы трассировки и спана из нулей, флаги 0, пустое состояние трассировки. Объект создаётся при первом вызове и затем переиспользуется.
Невалидный спан в контексте родителем не считается: спан, начатый в таком контексте, будет корневым. Невалидный спан можно подставить вместо спана, когда трассировка не нужна: его методы записи ничего не делают.
Возвращает: ОтелНезаписывающийСпан
Пример
// Идентификаторы родительского спана пришли из другого процесса, например в сообщении очереди:
// флаги 1 - спан сэмплирован, Истина - удалённый контекст
КонтекстСпана = Новый ОтелКонтекстСпана(ИдТрассировки, ИдСпана, 1, , Истина);
// Незаписывающий спан с этим контекстом становится родителем нового спана
Родитель = ОтелСпаны.Обернуть(КонтекстСпана);
КонтекстРодителя = ОтелКонтекст.КонтекстСоСпаном(ОтелКонтекст.Текущий(), Родитель);
Спан = Трассировщик.НачатьДочернийСпан("обработка-сообщения", КонтекстРодителя, ОтелВидСпана.Потребитель());
// ...
Спан.Завершить();
// Заглушка вместо спана: методы записи невалидного спана ничего не делают
ФоновыйСпан = ОтелСпаны.Невалидный();
Если ТрассироватьФоновыеЗадачи Тогда
ФоновыйСпан = Трассировщик.НачатьСпан("фоновая-задача");
КонецЕсли;
// ...
ФоновыйСпан.Завершить();