Skip to content

ОтелКомпозитныйПроцессорСпанов ​

Композитный процессор спанов: передаёт вызовы цепочке процессоров.

Описание ​

Объединяет несколько процессоров спанов в один процессор (ИнтерфейсПроцессорСпанов): вызовы передаются процессорам цепочки в порядке их добавления. Нужен, когда группу процессоров надо добавить в провайдер как один процессор, — например, чтобы отправлять спаны в несколько систем.

Провайдер трассировки сам хранит свои процессоры в композитном процессоре, поэтому несколько процессоров можно добавить и без него — вызвав ДобавитьПроцессор построителя или провайдера несколько раз. Файловая конфигурация (ОтелКонфигурационнаяФабрика) объединяет в композитный процессор процессоры спанов, если их несколько.

Безопасен для вызова из нескольких потоков: ДобавитьПроцессор создаёт новый список процессоров, а вызовы обходят список, который был текущим в момент вызова.

Конструктор ​

bsl
Новый ОтелКомпозитныйПроцессорСпанов(Процессоры)
ПараметрТипПо умолчаниюОписание
ПроцессорыМассив—Процессоры спанов в порядке вызова, может быть пустым. Массив копируется: его изменение после создания цепочку не меняет

Методы ​

ДобавитьПроцессор ​

Добавляет процессор в конец цепочки. Обход цепочки, уже начатый в другом потоке или в самом процессоре, продолжается по прежнему списку, новый процессор получает следующие вызовы. Тип процессора не проверяется.

ПараметрТипПо умолчаниюОписание
ПроцессорПроизвольный—Процессор спанов: встроенный или свой, реализующий ИнтерфейсПроцессорСпанов

Методы процессора ​

Методы ИнтерфейсПроцессорСпанов, когда композитный процессор добавлен в провайдер трассировки. ПриНачале и ПриЗавершении вызывает спан при создании и в Завершить() через цепочку процессоров провайдера. СброситьБуфер вызывает провайдер из своих СброситьБуфер и ПринудительноВыгрузитьСРезультатом, Закрыть — из своего Закрыть. Приложению вызывать их не нужно.

ПриНачале ​

Вызывает ПриНачале у каждого процессора цепочки по порядку, с тем же спаном и контекстом. Исключение процессора пишется в лог предупреждением и не прерывает вызов остальных.

ПараметрТипПо умолчаниюОписание
СпанОтелСпан—Начатый спан
РодительскийКонтекстФиксированноеСоответствиеНеопределеноКонтекст (Context), в котором начат спан

ПриЗавершении ​

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

ПараметрТипПо умолчаниюОписание
СпанОтелСпан—Завершённый спан

СброситьБуфер ​

Вызывает СброситьБуфер(ТаймаутМс) у процессоров цепочки по порядку в пределах общего срока: каждый процессор получает время, оставшееся до срока (без срока — 0). Когда срок истёк, оставшиеся процессоры не вызываются. Исключение процессора пишется в лог предупреждением и считается ошибкой, следующие процессоры вызываются.

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло0Общий срок в миллисекундах (0 — без ограничения)

Возвращает: ОтелРезультатЭкспорта — таймаут, если срок истёк до вызова очередного процессора; иначе неуспешный результат процессора (если таких несколько — последнего; исключение — ошибка); иначе успех


Закрыть ​

Вызывает Закрыть у каждого процессора цепочки — даже после исключения в предыдущем и после истечения общего срока: процессор получает время, оставшееся до срока, после истечения срока — 1 мс. Без срока (0) Закрыть процессоров вызывается без параметра. Неуспешный итог пишется в лог предупреждением.

Признака закрытия у композитного процессора нет: повторный вызов снова вызывает Закрыть у каждого процессора. Провайдер вызывает Закрыть процессоров один раз.

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло0Общий срок в миллисекундах (0 — без ограничения)

Возвращает: ОтелРезультатЗакрытия — ошибка, если хотя бы один процессор вернул ошибку или бросил исключение (описания ошибок перечислены через ; ); иначе таймаут, если истёк срок или процессор сообщил о таймауте; иначе успех

Внутренние методы ​

Экспортированы только для вызова из других модулей SDK (в OneScript нет внутренней видимости), приложению вызывать их не нужно:

  • ЕстьПроцессоры — есть ли в цепочке процессоры; по нему Включен() трассировщика проверяет цепочку провайдера;
  • Процессоры — копия списка процессоров; по ней провайдер вызывает СброситьБуфер и Закрыть у каждого своего процессора.

Пример ​

bsl
// ПроцессорGrafana и ПроцессорJaeger — пакетные процессоры со своими экспортерами
// (см. ОтелПакетныйПроцессорСпанов)
Процессоры = Новый Массив();
Процессоры.Добавить(ПроцессорGrafana);
Процессоры.Добавить(ПроцессорJaeger);
Процессор = Новый ОтелКомпозитныйПроцессорСпанов(Процессоры);

Провайдер = Новый ОтелПостроительПровайдераТрассировки()
    .ДобавитьПроцессор(Процессор)
    .Построить();

// ...

// Закрытие провайдера закрывает оба процессора
Провайдер.Закрыть();

См. также ​