6. Конфигурирование сервера
Конфигурирование СМЭВ QL сервера выполняется путем изменения параметров настроек, определенных в файлах credentials.yaml и application.yaml.
application.yaml - конфигурирует поведение сервера;
credentials.yaml - конфигурирует представление сервера.
6.1. Конфигурация файла application.yml
ktor:
deployment:
port: "$PORT:8080"
application:
modules:
- ru.gov.digital.smevql.ApplicationKt.mainModule
sources:
directory: "$SOURCES_DIR:sources"
models:
directory: "$MODELS_DIR:models"
states:
directory: "$STATES_DIR:states"
swagger:
file: smevql-openapi.yaml # путь к файлу openapi спецификации
servers:
- "http://127.0.0.1:8080/smevql/api/v1"
storage: # Блок параметров хранения информации
adapter: redis # На текущий момент поддерживается только redis
pool: # Настройка подключений к redis
- host: 127.0.0.1
port: 6379
max-pool-size: 20 # Максимальный размер пула соединений
user: "" # Пользователь для подключения к redis
password: "" # Пароль
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black-list: [ ] # Указывает список потребителей, для которых доступ запрещен
white-list: [ ] # Указывает список потребителей, для которых доступ разрешен
request:
strategy: delegate # Стратегия исполнения запросов delegate|atomic
timeout: 20s # Таймаут исполнения запросов
base-path: smevql/api/v1 # Префикс для всех роутов
max-nested-level: 5 # Предельная вложенность запрашиваемых ресурсов
pagination:
default: 100 # Количество элементов на странице по умолчанию
max: 1000 # Максимальное количество элементов на странице
logging:
long:
duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
limits: # Блок параметров конфигурации лимитов
enabled: true # флаг влюкчения проверок лимитов
total: # Параметры по всем запросам
value: 500000 # Общее число запросов в период времени
period: 1D # Период лимитирования
mnemonic: # Блок настроек лимитирования по потребителям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
purpose: # Блок настроек лимитирования по целям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
user: # Блок настроек лимитирования по пользователям
value: 1000 # Число запросов в период времени
period: 1D # Период лимитирования
records-ttl:
day: 1M # Период хранения дневной статистики
week: 1M # Период хранения статистики за неделю
month: 1Y # Период хранения статистики за месяц
year: 2Y # Период хранения статистики за год
async: # Блок настроек асинхронного выполнения запросов
request-in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
read-timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
delta:
commit-interval: 60s # Интервал фиксации дельты источника при изменении данных
force-commit-interval: 30m # Интервал принудительной фиксации дельт всех источников
state:
max-nested-event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max-updated-rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
index-recommendations: # Рекомендации по аналитике
enabled: true # Флаг включения формирования рекомендаций
period: 7D # Период формирования. 7 дней
concurrency: 10 # Количество параллельных корутин сохранения статистики
# Массив описания standalone таблиц
standalone-tables: [ ]
# Пример описания
# standalone-tables:
# - readable-table: "misdm05.readable_book"
# writable-table: "misdm05.writable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
push: # Настройки отправки push уведомлений
notification-path: "/{target}/push/notify" # Шаблон пути агента, на который необходимо отправлять нотификации
state-machine-enabled: false # Признак публикации нотификаций на основе событий стейт машины
status-prostore-enabled: true # Признак публикации нотификаций на основе событий статусов Простора
prostore:
status-event-topic:
topic: "$PS_STATUS_EVENT_TOPIC:status.event"
property:
bootstrap.servers: "$PS_KAFKA:localhost:9092"
group.id: smevql-server-status-event
auto.offset.reset: earliest
retry:
max-attempts: 3 # Количество попыток отправки нотификации
min-period: 5s # Минимальный период ожидания перед повторной попыткой
max-period: 10s # Максимальный период ожидания перед повторной попыткой
storage-queue:
host: "$QUEUE_HOST:localhost"
port: "$QUEUE_PORT:5432"
database: "$QUEUE_DATABASE:smevql"
schema: "$QUEUE_SCHEMA:smevqlqueue"
user: "$QUEUE_USER:"
password: "$QUEUE_PASSWORD:"
environment: "$ENVIRONMENT:dev"
agent: # Параметры конфигурирования агента СМЭВ4
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
signature: # Блок настроек механизма подписания
enabled: true # Признак включения подписания и проверки подписи
validate-enabled: false # Признак предоставления дополнительного URL проверки подписи
algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
serial-number: "" # Серийный номер ключа подписи
alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
notarius: # Блок настроек сервиса Notaris, используемый для подписания
host: localhost # Хост, на котором доступен Notaris
port: 8080 # Порт, на котором доступен Notaris
Настройка конфигурации СМЭВ QL сервера осуществляется путем редактирования параметров настроек в файле application.yml,
в котором могут быть настроены следующие секции:
sources- определение директории хранения источников;models- определение директории хранения моделей;states- определение директории хранения состояний;swagger- настройка файла openapi спецификации;storage- управление подключением к внутреннему хранилищу данных СМЭВ-QL;access- блок настроек доступа к выполнению операций чтения данных и операций стейт-машины;request- блок настроек исполнения запросов;delta- управление принудительными коммитами дельт витрин данных;state- установка ограничений в машинах-состояний;index_recommendations- рекомендации по аналитике;push- настройки отправки push уведомлений; -environment- определяет значение среды разработки;agent- параметры конфигурирования Агента СМЭВ4;signature- блок настроек механизма подписания.
6.1.1. Секция storage
В секции storage настраиваются параметры хранения информации, например:
storage: # Блок параметров хранения информации
adapter: redis # На текущий момент поддерживается только redis
pool: # Настройка подключений к redis
- host: 127.0.0.1
port: 6379
max_pool_size: 20 # Максимальный размер пула соединений
user: "" # Пользователь для подключения к redis
password: "" # Пароль
Параметры конфигурации
adapter- система хранения данных, на текущий момент поддерживается только redis;pool- указание host и port для подключения к хранилищу данных;host- адрес хоста;port- порт хоста;max_pool_size- максимальный размер пула соединений;user- имя пользователя для авторизации в системе хранения данных;password- пароль для авторизации в системе хранения данных.
6.1.2. Секция access
В секции access настраивается доступ к выполнению операций чтения данных и операций стейт-машины.
Допускается задание черного или белого списка.
Например:
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
white_list: [ ] # Указывает список потребителей, для которых доступ разрешен
Параметры конфигурации
black_list- перечень мнемоник ИС Потребителей, которым запрещен доступ к СМЭВ QL. Не заполняется, если заполнен white_list!white_list- перечень мнемоник ИС Потребителей, которым разрешен доступ к СМЭВ QL. Не заполняется, если заполнен black_list!
6.1.3. Секция request
В секции request хранятся настройки исполнения запросов, например:
request:
timeout: 20s # Таймаут исполнения запросов
base_path: smevql/api/v1 # Префикс для всех роутов
max_nested_level: 5 # Предельная вложенность запрашиваемых ресурсов
pagination:
default: 100 # Количество элементов на странице по умолчанию
max: 1000 # Максимальное количество элементов на странице
logging:
long:
duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
limits: # Блок параметров конфигурации лимитов
total: # Параметры по всем запросам
value: 500000 # Общее число запросов в период времени
period: 1D # Период лимитирования
mnemonic: # Блок настроек лимитирования по потребителям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
purpose: # Блок настроек лимитирования по целям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
user: # Блок настроек лимитирования по пользователям
value: 1000 # Число запросов в период времени
period: 1D # Период лимитирования
records_ttl:
day: 1M # Период хранения дневной статистики
week: 1M # Период хранения статистики за неделю
month: 1Y # Период хранения статистики за месяц
year: 2Y # Период хранения статистики за год
async: # Блок настроек асинхронного выполнения запросов
request_in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
read_timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
Параметры конфигурации
timeout- таймаут исполнения запросов;base_path- префикс для роута запросов. Например,smevql/api/v1;max_nested_level- предельная вложенность запрашиваемых ресурсов;pagination- управление количеством элементов при ответе. Содержит следующие атрибуты:default- количество элементов на странице по умолчанию;max- максимальное количество элементов на странице;
logging- управление логированием «долгих» запросов. Содержит следующие атрибуты:duration- продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование. Например:20s;percentage- процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например,0.1- только каждый тысячный долгий запрос;
limits- установка ограничений на количество запросов. Содержит следующие атрибуты:total- общее допустимое количество запросов к серверу:value- целочисленное значение количества запросов, например:1000;period- на какой период устанавливается ограничение, например: 1D (на сутки)
mnemonic- допустимое для одного потребителя данных количество запросов к серверу:value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
purpose- допустимое количество запросов к одному ресурсу (таблице, объекту)value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
user- допустимое количество запросов для пользователя:value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
records_ttl- настройка хранения статистики по лимитам:day: 1M- период хранения дневной статистики;week: 1M- период хранения статистики за неделю;month: 1Y- период хранения статистики за месяц;year: 2Y- период хранения статистики за год;
async- блок настроек асинхронного выполнения запросов. Содержит следующие атрибуты:request_in- значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных;read_timeout- таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
6.1.4. Секция delta
В секции delta настраивается управление принудительными коммитами дельт витрин данных.
Например:
delta:
commit_interval: 60s # Интервал фиксации дельты источника при изменении данных
force_commit_interval: 30m # Интервал принудительной фиксации дельт всех источников
Параметры конфигурации
commit_interval- интервал фиксации дельты источника при изменении данных, например 60s;force_commit_interval- интервал принудительной фиксации дельт всех источников, например 30s.
Если commit_interval: 0 и force_commit_interval: 0, то для добавления/изменения/удаления данных в Prostore не используется
механизм открытия и закрытия дельт, а данные меняются прямым запросом.
При этом возникают следующие ограничения:
в бекап текущей реализации данные, софрмированние вне дельт, не попадают;
в результаты запросов к материализованным представлениям данные, софрмированние вне дельт, не попадают;
в рамках подписок данные, софрмированние вне дельт, не передаются.
6.1.5. Секция state
В секции state устанавливаются ограничения в стейт машинах.
Например:
state:
max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
Параметры конфигурации
max_nested_event- максимально допустимая вложенность связанных переходов стейт машины, например 5;max_updated_rows- максимальное количество обновляемых строк при событии стейт машины, например 1.
6.1.6. Секция index_recommendations
В секции index_recommendations настраиваются рекомендации по аналитике, например:
index_recommendations: # Рекомендации по аналитике
period: 7D # Период формирования. 7 дней
Параметры конфигурации
period- устанавливается период формирования аналитики, например 7 дней.
6.1.7. Секция standalone-tables
В секции standalone-tables настраиваются данные standalone таблиц.
Например:
standalone-tables: [ ]
# Пример описания
# standalone-tables:
# - readable-table: "misdm05.readable_book"
# writable-table: "misdm05.writable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
readable-table- название readable таблицы;writable-table- название writable таблицы;anchor- название атрибута характеризующего дату и время последнего изменения данных в нетемпоральной таблице;soft-delete- название атрибута характеризующего дату и время удаления данных в нетемпоральной таблице.
6.1.8. Секция proxy-tables
В секции proxy-tables настраиваются данные прокси-таблиц.
Например:
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
table- название прокси таблицы;anchor- название атрибута характеризующего дату и время последнего изменения данных в нетемпоральной прокси таблице;soft-delete- название атрибута характеризующего дату и время удаления данных в нетемпоральной прокси таблице.
6.1.9. Секция push
В секции push содержатся настройки сервиса формирования push-уведомлений.
Например:
push: # Настройки отправки push уведомлений
notification-path: "/{target}/push/notify" # Шаблон пути агента, на который необходимо отправлять нотификации
state-machine-enabled: false # Признак публикации нотификаций на основе событий стейт машины
status-prostore-enabled: true # Признак публикации нотификаций на основе событий статусов Простора
prostore:
status-event-topic:
topic: "$PS_STATUS_EVENT_TOPIC:status.event"
property:
bootstrap.servers: "$PS_KAFKA:localhost:9092"
group.id: smevql-server-status-event
auto.offset.reset: earliest
retry:
max-attempts: 3 # Количество попыток отправки нотификации
min-period: 5s # Минимальный период ожидания перед повторной попыткой
max-period: 10s # Максимальный период ожидания перед повторной попыткой
Параметры конфигурации
notification_path- шаблон пути агента, на который необходимо отправлять нотификации;state_machine_enabled- признак публикации нотификаций на основе событий стейт машины;retry- настройки попыток отправок нотификаций.
6.1.10. Секция agent
В секции agent указываются параметры подключения к Агенту СМЭВ4 поставщика, например:
agent: # Параметры конфигурирования агента СМЭВ4
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
Параметры конфигурации
host- хост агента;port- порт приема api-gateway запросов;mnemonic- мнемоника агента СМЭВ4.
6.1.11. Секция signature
В секции signature настраивается управление механизмом цифровой подписи.
Например:
signature: # Блок настроек механизма подписания
enabled: true # Признак включения подписания и проверки подписи
validate_enabled: false # Признак предоставления дополнительного URL проверки подписи
algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
serial_number: "" # Серийный номер ключа подписи
alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
notarius: # Блок настроек сервиса Notaris, используемый для подписания
host: localhost # Хост, на котором доступен Notaris
port: 8080 # Порт, на котором доступен Notaris
Параметры конфигурации
enable- включение (true), отключение (false) подписи ответов и проверки подписей других источников;validate_enabled- признак предоставления дополнительного URL проверки подписи (доступность вызова REST-метода проверки подписи);algorithm- алгоритм формирования подписи. На текущий момент доступен только GOST3410_2012_256;serial_number- серийный номер ключа подписи;alias- алиас ключа, заполняется либо серийный номер, либо алиас;notarius- настройки подключения (host и port) к модулю криптографии notarius.
6.2. Конфигурация файла credentials.yml
version: 1.0.0
system:
mnemonic: smev_ql_mnemonic
instance: smev_ql_instance
Параметры конфигурации
version- номер версии СМЭВ QL;mnemonic- мнемоника СМЭВ QL, по этому параметру осуществляется идентификация СМЭВ QL сервер во внешних системах и СМЭВ4;instance- наименование инстанса СМЭВ QL.
6.3. Общий сценарий выполнения
Администратор системы открывает на редактирование нужный файл (
credentials.yamlи/илиapplication.yaml) настроек СМЭВ QL сервер и меняет требуемые параметры.Перезапускает приложение для применения новых настроек. Для этого открывает консоль утилиты работы со СМЭВ QL и выполняет команду:
./smevql restart