Skip to content

ОтелРезультатыЭкспорта ​

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

Описание ​

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

Результат СброситьБуфер процессоров провайдер сводит по правилам ОтелРезультатыЗакрытия: Таймаут() даёт таймаут, Ошибка() — ошибку, Неопределено считается успехом. Так же пакетный процессор читает результат СброситьБуфер экспортера.

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

Функции ​

Успех ​

Создаёт успешный результат: статус 0, Успешно() = Истина.

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


Ошибка ​

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

Возвращает: ОтелРезультатЭкспорта — ошибка


Таймаут ​

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

Возвращает: ОтелРезультатЭкспорта — таймаут


ОжидатьВсе ​

Ожидает завершения каждого результата (ОтелРезультатЭкспорта.Ожидать) и сводит результаты в один. Результаты проверяются по порядку, итог определяет первый неуспешный: таймаут, если у него истёк таймаут, иначе ошибка. Если все результаты успешны или массив пуст — успех. Элементы другого типа (например, Неопределено) пропускаются с предупреждением в логе. Так ОтелSdk.СброситьБуфер() сводит результаты провайдеров.

ПараметрТипПо умолчаниюОписание
МассивРезультатовМассив из ОтелРезультатЭкспорта—Результаты для сведения
ТаймаутМсЧисло0Время ожидания каждого результата в миллисекундах (0 — без ограничения); ждать нужно только результату с обещанием, результаты Успех(), Ошибка() и Таймаут() готовы сразу

Возвращает: ОтелРезультатЭкспорта — успех, ошибка или таймаут

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

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

  • РезультатСбора — результат сбора метрик по списку сбоев: ошибка, таймаут (если все сбои — таймауты) или успех;
  • ИзРезультатаЗакрытия — переводит ОтелРезультатЗакрытия (сведённый результат ForceFlush) в ОтелРезультатЭкспорта;
  • СброситьБуферПослеЭкспорта — ForceFlush экспортера простого процессора: дожидается экспорта, начатого в другом потоке, и сбрасывает буфер экспортера;
  • СОбещанием — результат «в процессе» (статус -1) с обещанием библиотеки async; модули SDK её сейчас не вызывают. Статус такого результата не меняется и после выполнения обещания, поэтому SDK считает его неуспешным.

Пример ​

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

См. также ​