Skip to content

ОтелРезультатыЗакрытия ​

Модуль-фабрика результатов закрытия и принудительной выгрузки — объектов ОтелРезультатЗакрытия.

Описание ​

ОтелРезультатЗакрытия возвращают Закрыть процессоров, экспортеров, читателей метрик, провайдеров и ОтелSdk. Свой процессор или экспортер возвращает из Закрыть результат функций Успех(), Ошибка(Описание) или Таймаут() этого модуля. Аналог Java SDK: CompletableResultCode.ofSuccess, ofFailure.

Провайдеры закрывают и сбрасывают процессоры (провайдер метрик — читатели) функциями этого модуля. Метод Закрыть или СброситьБуфер вызывается у каждого компонента, даже если предыдущий бросил исключение или общий срок истёк; компонент получает время, оставшееся до срока (после срока — 1 мс). Если метод компонента не принимает таймаут, он вызывается без параметра. Результаты сводятся в один:

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

Остальные экспортные функции модуля служебные (см. «Внутренние функции»).

Функции ​

Успех ​

Создаёт успешный результат: Успешно() = Истина, ИстекТаймаут() = Ложь, Описание() — пустая строка.

Возвращает: ОтелРезультатЗакрытия — успех


Ошибка ​

Создаёт результат с ошибкой: Успешно() = Ложь, ИстекТаймаут() = Ложь. Описание попадает в сведённый результат провайдера и в результат ОтелSdk.Закрыть().

ПараметрТипПо умолчаниюОписание
ОписаниеСтрока—Описание ошибки

Возвращает: ОтелРезультатЗакрытия — ошибка


Таймаут ​

Создаёт результат истечения таймаута: Успешно() = Ложь, ИстекТаймаут() = Истина, Описание() — "Таймаут операции закрытия".

Возвращает: ОтелРезультатЗакрытия — таймаут

Внутренние функции ​

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

  • ЗакрытьВсе — закрывает компоненты (процессоры, читатели) в пределах общего срока и сводит результаты;
  • ВызватьУВсех — вызывает метод (Закрыть, СброситьБуфер) у каждого компонента в пределах общего срока и сводит результаты;
  • СброситьИЗакрыть — сбрасывает буфер компонента и закрывает его в пределах общего срока;
  • ЗакрытьЭкспортерПослеЭкспорта — Shutdown экспортера простого процессора: дожидается текущего экспорта, сбрасывает буфер экспортера и закрывает его;
  • ВызватьМетод — вызывает метод компонента, передавая столько параметров, сколько он принимает;
  • ОставшеесяВремя — время до общего срока, не меньше 1 мс (0, если срок не ограничен);
  • СрокИстек — истёк ли общий срок операции;
  • ТаймаутДоСрока — таймаут вызова, ограниченный временем до срока;
  • МеньшийТаймаут — меньший из двух таймаутов (0 и Неопределено — без ограничения);
  • ВызватьВПределахСрока — вызывает метод компонента с оставшимся временем, исключение возвращает ошибкой;
  • Свести — сводит результаты нескольких операций в один по правилам из «Описания»;
  • ЗакрытьТранспортЭкспортера — закрывает транспорт экспортера, если транспорт создала библиотека (автоконфигурация, файл конфигурации).

Пример ​

bsl
// Фрагмент своего процессора спанов (Экспортер - экспортер, переданный в конструктор):
// закрытие выгружает буфер экспортера и закрывает его
Функция Закрыть(ТаймаутМс = 0) Экспорт
    Попытка
        РезультатСброса = Экспортер.СброситьБуфер(ТаймаутМс);
        Экспортер.Закрыть();
    Исключение
        Возврат ОтелРезультатыЗакрытия.Ошибка(ОписаниеОшибки());
    КонецПопытки;
    Если РезультатСброса.ИстекТаймаут() Тогда
        Возврат ОтелРезультатыЗакрытия.Таймаут();
    ИначеЕсли НЕ РезультатСброса.Успешно() Тогда
        Возврат ОтелРезультатыЗакрытия.Ошибка("Сбой выгрузки буфера экспортера");
    КонецЕсли;
    Возврат ОтелРезультатыЗакрытия.Успех();
КонецФункции

См. также ​