ОтелКомпозитныйПроцессорСпанов
Композитный процессор спанов: передаёт вызовы цепочке процессоров.
Описание
Объединяет несколько процессоров спанов в один процессор (ИнтерфейсПроцессорСпанов): вызовы передаются процессорам цепочки в порядке их добавления. Нужен, когда группу процессоров надо добавить в провайдер как один процессор, — например, чтобы отправлять спаны в несколько систем.
Провайдер трассировки сам хранит свои процессоры в композитном процессоре, поэтому несколько процессоров можно добавить и без него — вызвав ДобавитьПроцессор построителя или провайдера несколько раз. Файловая конфигурация (ОтелКонфигурационнаяФабрика) объединяет в композитный процессор процессоры спанов, если их несколько.
Безопасен для вызова из нескольких потоков: ДобавитьПроцессор создаёт новый список процессоров, а вызовы обходят список, который был текущим в момент вызова.
Конструктор
Новый ОтелКомпозитныйПроцессорСпанов(Процессоры)| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Процессоры | Массив | — | Процессоры спанов в порядке вызова, может быть пустым. Массив копируется: его изменение после создания цепочку не меняет |
Методы
ДобавитьПроцессор
Добавляет процессор в конец цепочки. Обход цепочки, уже начатый в другом потоке или в самом процессоре, продолжается по прежнему списку, новый процессор получает следующие вызовы. Тип процессора не проверяется.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Процессор | Произвольный | — | Процессор спанов: встроенный или свой, реализующий ИнтерфейсПроцессорСпанов |
Методы процессора
Методы ИнтерфейсПроцессорСпанов, когда композитный процессор добавлен в провайдер трассировки. ПриНачале и ПриЗавершении вызывает спан при создании и в Завершить() через цепочку процессоров провайдера. СброситьБуфер вызывает провайдер из своих СброситьБуфер и ПринудительноВыгрузитьСРезультатом, Закрыть — из своего Закрыть. Приложению вызывать их не нужно.
ПриНачале
Вызывает ПриНачале у каждого процессора цепочки по порядку, с тем же спаном и контекстом. Исключение процессора пишется в лог предупреждением и не прерывает вызов остальных.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Спан | ОтелСпан | — | Начатый спан |
РодительскийКонтекст | ФиксированноеСоответствие | Неопределено | Контекст (Context), в котором начат спан |
ПриЗавершении
Вызывает ПриЗавершении у каждого процессора цепочки по порядку. Исключение процессора пишется в лог предупреждением и не прерывает вызов остальных.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Спан | ОтелСпан | — | Завершённый спан |
СброситьБуфер
Вызывает СброситьБуфер(ТаймаутМс) у процессоров цепочки по порядку в пределах общего срока: каждый процессор получает время, оставшееся до срока (без срока — 0). Когда срок истёк, оставшиеся процессоры не вызываются. Исключение процессора пишется в лог предупреждением и считается ошибкой, следующие процессоры вызываются.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 0 | Общий срок в миллисекундах (0 — без ограничения) |
Возвращает: ОтелРезультатЭкспорта — таймаут, если срок истёк до вызова очередного процессора; иначе неуспешный результат процессора (если таких несколько — последнего; исключение — ошибка); иначе успех
Закрыть
Вызывает Закрыть у каждого процессора цепочки — даже после исключения в предыдущем и после истечения общего срока: процессор получает время, оставшееся до срока, после истечения срока — 1 мс. Без срока (0) Закрыть процессоров вызывается без параметра. Неуспешный итог пишется в лог предупреждением.
Признака закрытия у композитного процессора нет: повторный вызов снова вызывает Закрыть у каждого процессора. Провайдер вызывает Закрыть процессоров один раз.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 0 | Общий срок в миллисекундах (0 — без ограничения) |
Возвращает: ОтелРезультатЗакрытия — ошибка, если хотя бы один процессор вернул ошибку или бросил исключение (описания ошибок перечислены через ; ); иначе таймаут, если истёк срок или процессор сообщил о таймауте; иначе успех
Внутренние методы
Экспортированы только для вызова из других модулей SDK (в OneScript нет внутренней видимости), приложению вызывать их не нужно:
ЕстьПроцессоры— есть ли в цепочке процессоры; по немуВключен()трассировщика проверяет цепочку провайдера;Процессоры— копия списка процессоров; по ней провайдер вызываетСброситьБуфериЗакрытьу каждого своего процессора.
Пример
// ПроцессорGrafana и ПроцессорJaeger — пакетные процессоры со своими экспортерами
// (см. ОтелПакетныйПроцессорСпанов)
Процессоры = Новый Массив();
Процессоры.Добавить(ПроцессорGrafana);
Процессоры.Добавить(ПроцессорJaeger);
Процессор = Новый ОтелКомпозитныйПроцессорСпанов(Процессоры);
Провайдер = Новый ОтелПостроительПровайдераТрассировки()
.ДобавитьПроцессор(Процессор)
.Построить();
// ...
// Закрытие провайдера закрывает оба процессора
Провайдер.Закрыть();