Класс OneFlagProvider
Провайдер OpenFeature поверх сервера OneFlag. Хранит снимок конфигурации окружения и вычисляет значения флагов локально, а свежесть снимка поддерживает потоком изменений.
Исходник: src/Классы/OneFlagProvider.os
Конструктор
Новый OneFlagProvider(Знач Адрес, Знач Ключ, Знач Окружение = "dev", Знач Настройки = Неопределено)| Параметр | Тип | Назначение |
|---|---|---|
Адрес | Строка | Базовый адрес сервера, например http://localhost:3333. Завершающие слеши отбрасываются |
Ключ | Строка | Ключ SDK, уходит в заголовке Authorization |
Окружение | Строка | Ключ окружения. По умолчанию dev |
Настройки | Структура, Соответствие | Необязательные параметры устойчивости |
Поля Настройки:
| Параметр | По умолчанию | Описание |
|---|---|---|
ПовторовЗагрузки | 3 | Сколько раз повторить неудачный запрос снимка |
ЗадержкаПовтора | 500 | Пауза между попытками, мс |
ТаймаутЗапроса | 10 | Таймаут HTTP-запроса, с |
Повторы нужны, потому что первая неудача редко означает недоступный сервер: чаще это гонка при старте, когда приложение поднялось раньше сервиса флагов. Реализованы через resilience.
Исключения
| Условие | Сообщение |
|---|---|
| Пустой адрес | OneFlag: не задан адрес сервера |
Свойства
| Свойство | Тип | Назначение |
|---|---|---|
ОбновленийПолучено | Число | Сколько раз конфигурация обновлялась по потоку |
Жизненный цикл
| Метод | Возвращает | Назначение |
|---|---|---|
Инициализировать | - | Загружает снимок и подписывается на изменения |
Завершить | - | Останавливает чтение потока и закрывает соединение |
Состояние | Строка | NOT_READY, READY или ERROR |
Метаданные | Структура | Структура с полем Имя = OneFlagProvider |
Инициализировать
Процедура Инициализировать(Знач Контекст = Неопределено) ЭкспортЗагружает снимок и, если он получен, подписывается на поток изменений. Вызывается клиентом OpenFeature при УстановитьПровайдер.
| Результат загрузки | Состояние | Поток |
|---|---|---|
| Снимок получен | READY | Подписка выполняется |
| Снимок не получен | ERROR | Подписки нет |
Неудача подписки на поток состояние не меняет: снимок уже загружен, и без потока провайдер продолжит отдавать значения из него.
Завершить
Процедура Завершить() ЭкспортОстанавливает цикл чтения потока, закрывает соединение и переводит провайдера в NOT_READY. Разорванное соединение ошибкой не считается.
Состояние
Функция Состояние() ЭкспортВозвращаемое значение
Строка - NOT_READY до инициализации и после Завершить, READY при успешной загрузке снимка, ERROR при неудаче.
В состоянии NOT_READY любая оценка возвращает значение по умолчанию с кодом ошибки PROVIDER_NOT_READY.
Работа со снимком
| Метод | Возвращает | Назначение |
|---|---|---|
ОбновитьСнимок | Булево | Принудительно перечитывает конфигурацию |
ЖивоеОбновлениеРаботает | Булево | Читается ли поток изменений |
КлючиФлагов | Массив | Ключи известных флагов |
ПоследняяОшибка | Строка | Описание последнего сбоя связи |
ОбновитьСнимок
Функция ОбновитьСнимок() ЭкспортЗабирает свежий снимок конфигурации с повторами по настройкам устойчивости.
Возвращаемое значение
Булево - Истина, если снимок обновлён.
При неудаче прежний снимок остаётся в силе, а описание сбоя попадает в ПоследняяОшибка(). Замена снимка выполняется под семафором, поэтому одновременная оценка флага видит либо старый снимок целиком, либо новый.
ЖивоеОбновлениеРаботает
Функция ЖивоеОбновлениеРаботает() ЭкспортВозвращаемое значение
Булево - Истина, если фоновое задание читает поток изменений.
Значение Ложь при Состояние() = "READY" означает рабочий, но деградировавший режим: значения берутся из снимка, изменения на сервере до приложения не доходят. Обновить конфигурацию в этом режиме можно только ОбновитьСнимок().
КлючиФлагов
Функция КлючиФлагов() ЭкспортВозвращаемое значение
Массив из Строка - ключи всех флагов текущего снимка.
ПоследняяОшибка
Функция ПоследняяОшибка() ЭкспортВозвращаемое значение
Строка - краткое представление последней ошибки связи, пустая строка после успешного обновления.
Контракт провайдера OpenFeature
Функция ВычислитьЛогическое(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт
Функция ВычислитьСтроку(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт
Функция ВычислитьЧисло(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) Экспорт
Функция ВычислитьОбъект(Знач Ключ, Знач ЗначениеПоУмолчанию, Знач Контекст) ЭкспортВызываются клиентом OpenFeature. Возвращают ResolutionDetails.
Коды ошибок:
| Код | Когда |
|---|---|
PROVIDER_NOT_READY | Провайдер не инициализирован |
FLAG_NOT_FOUND | Ключа нет в снимке окружения |
TYPE_MISMATCH | Тип значения флага не совпал с типом метода |
TARGETING_KEY_MISSING | Задана процентная выкатка, но в контексте нет targetingKey |
PARSE_ERROR | В настройке нет вариантов или назван несуществующий вариант |
ВычислитьОбъект тип не проверяет: у объекта ожидаемого типа платформы нет.
Провайдер = Новый OneFlagProvider("http://localhost:3333", "local-sdk-key", "prod");
OpenFeature.УстановитьПровайдер(Провайдер);
Клиент = OpenFeature.ПолучитьКлиента();
Детали = Клиент.ПолучитьЛогическоеСДеталями("new-checkout", Ложь,
Новый EvaluationContext("user-42", Новый Структура("plan", "pro")));
Сообщить(Детали.Значение); // Истина
Сообщить(Детали.Причина); // TARGETING_MATCH
Сообщить(Детали.Вариант); // вкл