Skip to content

Класс OneFlagProvider

Провайдер OpenFeature поверх сервера OneFlag. Хранит снимок конфигурации окружения и вычисляет значения флагов локально, а свежесть снимка поддерживает потоком изменений.

Исходник: src/Классы/OneFlagProvider.os

Конструктор

bsl
Новый OneFlagProvider(Знач Адрес, Знач Ключ, Знач Окружение = "dev", Знач Настройки = Неопределено)
ПараметрТипНазначение
АдресСтрокаБазовый адрес сервера, например http://localhost:3333. Завершающие слеши отбрасываются
КлючСтрокаКлюч SDK, уходит в заголовке Authorization
ОкружениеСтрокаКлюч окружения. По умолчанию dev
НастройкиСтруктура, СоответствиеНеобязательные параметры устойчивости

Поля Настройки:

ПараметрПо умолчаниюОписание
ПовторовЗагрузки3Сколько раз повторить неудачный запрос снимка
ЗадержкаПовтора500Пауза между попытками, мс
ТаймаутЗапроса10Таймаут HTTP-запроса, с

Повторы нужны, потому что первая неудача редко означает недоступный сервер: чаще это гонка при старте, когда приложение поднялось раньше сервиса флагов. Реализованы через resilience.

Исключения

УсловиеСообщение
Пустой адресOneFlag: не задан адрес сервера

Свойства

СвойствоТипНазначение
ОбновленийПолученоЧислоСколько раз конфигурация обновлялась по потоку

Жизненный цикл

МетодВозвращаетНазначение
Инициализировать-Загружает снимок и подписывается на изменения
Завершить-Останавливает чтение потока и закрывает соединение
СостояниеСтрокаNOT_READY, READY или ERROR
МетаданныеСтруктураСтруктура с полем Имя = OneFlagProvider

Инициализировать

bsl
Процедура Инициализировать(Знач Контекст = Неопределено) Экспорт

Загружает снимок и, если он получен, подписывается на поток изменений. Вызывается клиентом OpenFeature при УстановитьПровайдер.

Результат загрузкиСостояниеПоток
Снимок полученREADYПодписка выполняется
Снимок не полученERRORПодписки нет

Неудача подписки на поток состояние не меняет: снимок уже загружен, и без потока провайдер продолжит отдавать значения из него.

Завершить

bsl
Процедура Завершить() Экспорт

Останавливает цикл чтения потока, закрывает соединение и переводит провайдера в NOT_READY. Разорванное соединение ошибкой не считается.

Состояние

bsl
Функция Состояние() Экспорт

Возвращаемое значение

Строка - NOT_READY до инициализации и после Завершить, READY при успешной загрузке снимка, ERROR при неудаче.

В состоянии NOT_READY любая оценка возвращает значение по умолчанию с кодом ошибки PROVIDER_NOT_READY.

Работа со снимком

МетодВозвращаетНазначение
ОбновитьСнимокБулевоПринудительно перечитывает конфигурацию
ЖивоеОбновлениеРаботаетБулевоЧитается ли поток изменений
КлючиФлаговМассивКлючи известных флагов
ПоследняяОшибкаСтрокаОписание последнего сбоя связи

ОбновитьСнимок

bsl
Функция ОбновитьСнимок() Экспорт

Забирает свежий снимок конфигурации с повторами по настройкам устойчивости.

Возвращаемое значение

Булево - Истина, если снимок обновлён.

При неудаче прежний снимок остаётся в силе, а описание сбоя попадает в ПоследняяОшибка(). Замена снимка выполняется под семафором, поэтому одновременная оценка флага видит либо старый снимок целиком, либо новый.

ЖивоеОбновлениеРаботает

bsl
Функция ЖивоеОбновлениеРаботает() Экспорт

Возвращаемое значение

Булево - Истина, если фоновое задание читает поток изменений.

Значение Ложь при Состояние() = "READY" означает рабочий, но деградировавший режим: значения берутся из снимка, изменения на сервере до приложения не доходят. Обновить конфигурацию в этом режиме можно только ОбновитьСнимок().

КлючиФлагов

bsl
Функция КлючиФлагов() Экспорт

Возвращаемое значение

Массив из Строка - ключи всех флагов текущего снимка.

ПоследняяОшибка

bsl
Функция ПоследняяОшибка() Экспорт

Возвращаемое значение

Строка - краткое представление последней ошибки связи, пустая строка после успешного обновления.

Контракт провайдера OpenFeature

bsl
Функция ВычислитьЛогическое(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт
Функция ВычислитьСтроку(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт
Функция ВычислитьЧисло(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт
Функция ВычислитьОбъект(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт

Вызываются клиентом OpenFeature. Возвращают ResolutionDetails.

Коды ошибок:

КодКогда
PROVIDER_NOT_READYПровайдер не инициализирован
FLAG_NOT_FOUNDКлюча нет в снимке окружения
TYPE_MISMATCHТип значения флага не совпал с типом метода
TARGETING_KEY_MISSINGЗадана процентная выкатка, но в контексте нет targetingKey
PARSE_ERRORВ настройке нет вариантов или назван несуществующий вариант

ВычислитьОбъект тип не проверяет: у объекта ожидаемого типа платформы нет.

bsl
Провайдер = Новый OneFlagProvider("http://localhost:3333", "local-sdk-key", "prod");
OpenFeature.УстановитьПровайдер(Провайдер);

Клиент = OpenFeature.ПолучитьКлиента();
Детали = Клиент.ПолучитьЛогическоеСДеталями("new-checkout", Ложь,
	Новый EvaluationContext("user-42", Новый Структура("plan", "pro")));

Сообщить(Детали.Значение);   // Истина
Сообщить(Детали.Причина);    // TARGETING_MATCH
Сообщить(Детали.Вариант);    // вкл