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. Общий сценарий выполнения

  1. Администратор системы открывает на редактирование нужный файл (credentials.yaml и/или application.yaml) настроек СМЭВ QL сервер и меняет требуемые параметры.

  2. Перезапускает приложение для применения новых настроек. Для этого открывает консоль утилиты работы со СМЭВ QL и выполняет команду:

./smevql restart