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