2. Настройка программы

2.1. Настройка технических средств

Серверы, на которых устанавливается Типовое ПО «Витрина данных», должны соответствовать техническим характеристикам указанным в документе «Техническое описание системы» раздел Рекомендуемые технические и программные средства, в котором приводятся требования к серверному оборудованию (CPU, RAM, HDD и т.д.), программному обеспечению и каналам связи.

Необходимые настройки для серверов описаны в документе «Руководство по установке», в котором приводятся требования к серверам, доступности портов для каждого сервера, настройка протоколов, наличие библиотек и т.д.

2.2. Настройка программных средств

Все предварительные действия необходимые перед установкой программы, процесс установки и проверка корректной установки программы описан в документе «Руководство по установке» в разделе «Подготовка к установке».

Внимание

Программные средства настраиваются в зависимости от используемой конфигурации. Состав компонентов приведен в разделе Состав компонентов в дистрибутиве документа «Техническое описание системы».

2.2.1. Настройка ProStore

2.2.1.1. Настройка Сервиса исполнения запросов (query-execution)

Конфигурация инстанса узла Сервиса исполнения запросов (query-execution) Prostore представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру.

Файл конфигурации содержит логику и порядок работы Сервиса исполнения запросов.

Для наглядности конфигурация сервиса исполнения запросов разделена на отдельные секции.

Пример файла конфигурации Prostore приведен в разделе Конфигурация ноды документации Prostore.

2.2.1.2. Настройка коннекторов

Следующие коннекторы требуют настройки конфигурации:

  • Kafka-Clickhouse reader connector;

  • Kafka-Clickhouse writer connector;

  • Kafka-Postgres reader connector;

  • Kafka-Postgres writer connector;

  • Kafka Jet writer connector.

Конфигурация коннектора представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру.

Пример файла конфигурации Prostore приведен в разделе Конфигурация коннекторов документации Prostore.

2.2.2. Настройка СМЭВ QL Сервера

2.2.2.1. Конфигурирование сервера

Конфигурирование СМЭВ QL сервера выполняется путем изменения параметров настроек, определенных в файлах credentials.yaml и application.yaml.

  • application.yaml - конфигурирует поведение сервера;

  • credentials.yaml - конфигурирует представление сервера.

2.2.2.1.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 - блок настроек механизма подписания.

2.2.2.1.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 - пароль для авторизации в системе хранения данных.

2.2.2.1.1.2. Секция access

В секции access настраивается доступ к выполнению операций чтения данных и операций стейт-машины.

Допускается задание черного или белого списка.

Например:

access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
  black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
  white_list: [ ] # Указывает список потребителей, для которых доступ разрешен

Параметры конфигурации

  • black_list - перечень мнемоник ИС Потребителей, которым запрещен доступ к СМЭВ QL. Не заполняется, если заполнен white_list!

  • white_list - перечень мнемоник ИС Потребителей, которым разрешен доступ к СМЭВ QL. Не заполняется, если заполнен black_list!

2.2.2.1.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, если была возвращена информация по асинхронным результатам

2.2.2.1.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 не используется механизм открытия и закрытия дельт, а данные меняются прямым запросом.

При этом возникают следующие ограничения:

  • в бекап текущей реализации данные, софрмированние вне дельт, не попадают;

  • в результаты запросов к материализованным представлениям данные, софрмированние вне дельт, не попадают;

  • в рамках подписок данные, софрмированние вне дельт, не передаются.

2.2.2.1.1.5. Секция state

В секции state устанавливаются ограничения в стейт машинах.

Например:

state:
  max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
  max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины

Параметры конфигурации

  • max_nested_event - максимально допустимая вложенность связанных переходов стейт машины, например 5;

  • max_updated_rows - максимальное количество обновляемых строк при событии стейт машины, например 1.

2.2.2.1.1.6. Секция index_recommendations

В секции index_recommendations настраиваются рекомендации по аналитике, например:

index_recommendations: # Рекомендации по аналитике
  period: 7D  # Период формирования. 7 дней

Параметры конфигурации

  • period - устанавливается период формирования аналитики, например 7 дней.

2.2.2.1.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 - название атрибута характеризующего дату и время удаления данных в нетемпоральной таблице.

2.2.2.1.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 - название атрибута характеризующего дату и время удаления данных в нетемпоральной прокси таблице.

2.2.2.1.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 - настройки попыток отправок нотификаций.

2.2.2.1.1.10. Секция agent

В секции agent указываются параметры подключения к Агенту СМЭВ4 поставщика, например:

agent: # Параметры конфигурирования агента СМЭВ4
  host: 127.0.0.1 # Хост агента
  port: 8171 # Порт приема api-gateway запросов
  mnemonic: "" # Мнемоника агента

Параметры конфигурации

  • host - хост агента;

  • port - порт приема api-gateway запросов;

  • mnemonic - мнемоника агента СМЭВ4.

2.2.2.1.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.

2.2.2.1.2. Конфигурация файла credentials.yml
version: 1.0.0
system:
    mnemonic: smev_ql_mnemonic
    instance: smev_ql_instance

Параметры конфигурации

  • version - номер версии СМЭВ QL;

  • mnemonic - мнемоника СМЭВ QL, по этому параметру осуществляется идентификация СМЭВ QL сервер во внешних системах и СМЭВ4;

  • instance - наименование инстанса СМЭВ QL.

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

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

./smevql restart

2.2.3. Настройка СМЭВ3-адаптера

2.2.3.1. Конфигурация СМЭВ3-адаптер (application.yml)

Файл application.yml – основной конфигурационный файл CМЭВ3-адаптера, в котором задана логика и порядок работы адаптера:

  • получение входящих запросов, их обработка;

  • настройка подключения к СМЭВ и FTP-серверу СМЭВ3, к Prostore через REST-запросы;

  • настройка алгоритма формирования и проверки электронной подписи(ЭП) и т.д.

2.2.3.1.1. Пример файла application.yml
vertx:
  #Настройки вертикса
  #тут можно указать все настройки из документации для vertx
  props:
    # метрики
    metricsOptions:
      enabled: true
      # тип метрик, например prometheusOptions | jmxMetricsOptions
      prometheusOptions:
        enabled: true
        startEmbeddedServer: true
        embeddedServerOptions:
          #порт для сервера с метриками
          port: 9033
  web-client:
    max-pool-size: 20

spring:
  liquibase:
    enabled: false
  main:
    allow-bean-definition-overriding: true

smev:
  #url смэва
  endpointUrl: http://localhost:7979/api/v1/soap/
  keystoreType: "DUMMY"
  keystoreFile: x
  keystorePass: x
  privateKeyAlias: x
  privateKeyPass: x
  certificateAlias: x
  signatureURI: "http://www.w3.org/2001/04/xmldsig-more#dummy"
  # алгоритм подписи
  signatureAlgorithm: "DUMMY"
  #метод подписи
  digestMethod: "http://www.w3.org/2001/04/xmldsig-more#dummy"
  #версия схемы смев
  #availiabe 1.2 and 1.3
  version: 1.3
  #верификация входящих сообщений
  incomingVerificationEnabled: false
  #подпись исходящих сообщений
  outgoingSigningEnabled: false
  #таймаут отправки сообщения в смев
  timeout: 30000
  #время между попытками перепосылки в смев
  retry-timeout: 30000
  #максимальный размер очереди, ожидающей отправки сообщений
  webMaxWaitQueueSize: -1
  #пул коннектов
  webMaxPoolSize: 20

receiver:
  # количество вертиклов
  instances: 1
  receiver-property:
    -
      #селектор из смэв
      selector:
        namespace: a
        root-element-name: b
      #пебл шаблон, который будет обрабатываться для определенного selector
      template: smev3-adapter/templates/smev.xml.peb
      #задержка между запросами, в случае если очередб пуста
      idle-delay: PT1m
      # файл, который будет отправлен в случае ошибки
      fallback-response: smev3-adapter/templates/fallback.xml
    -
      idle-delay: PT1m
      selector:
        namespace: urn://x-artefacts-testperson/1.0
        root-element-name: TestPersonRequest
      template: smev3-adapter/templates/smev.xml.peb

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}
  default-schema: demo_view

environment:
  name: ${ENVIRONMENT_NAME:test}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  retryPolicy:
    baseSleepTime: 1000
    maxRetries: 3
    maxSleepTime: 3000
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

migration:
  zk-enabled: ${MIGRATION_ZK_ENABLE:false}

paramstorage:
  base-path: '/smev/paramstorage'

deltastorage:
  base-path: '/smev/deltastorage'

sign:
  #алгоритм подписи файла
  digest-algorithm: 1.2.643.7.1.1.2.2

blob:
  # настройки подключения к BLOB адаптеру
  blob-source:
    host: 'localhost'
    port: 8080
    path:
  ftp-destination:
    #хост фтп смева
    host: localhost
    #порт фтп смева
    port: 21
    #корневой каталог
    #path: aaa/bbb/ccc
    #пользователь
    user: user
    #пароль
    password: 123

rest:
  #вкл/выкл
  enabled: false
  #порт на котором будет запущена рестовая ручка
  port: 8080
  # путь get запроса
  get: /le
  #путь post запроса
  post: /le
  #обрабатываемый шаблон
  template: smev3-adapter/templates/smev.xml.peb

#рассылка смев
scheduler:
  #вкл/выкл
  enabled: false
  #интервал между запусками
  interval: PT30s
  #обрабатываемый шаблон
  template: smev3-adapter/templates/pfr-delta.peb

pool:
  #корутин пул для обработки смев шаблонов
  reader-executor: 20
  #корутин пул для обработки  шедулера
  schedule-executor: 1
  logExecutor: 20

logging:
  level:
    root: info
    ru:
      rtlabs:
        smev:
          logging: trace
  request-response:
    smev-request: true
    smev-response: true

backup:
  zk-path: ${SMEV3_BACKUP_ZK_PATH:/${environment.name}/smev3-adapter}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  adapterCommandBroadcast: ${S3A_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  timeout: ${BACKUP_TIMEOUT:PT180s}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${SMEV3_BACKUP_GROUP_ID:smev3-adapter_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

# Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf
spf:
  host: ${SPF_HOST:localhost}
  port: ${SPF_PORT:8080}
  # Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
  params: {}

2.2.3.2. Параметры конфигурации

Настройка конфигурации CМЭВ3-адаптера осуществляется путем редактирования параметров настроек в файле application.yml.

Обязательными параметрами для настройки CМЭВ3-адаптера являются секции: smev, receiver, datasource. Остальные параметры следует оставить без изменения и настраивать только для решения определенных бизнес-задач.

Pebble-шаблоны для настройки задаются в секциях: receiver-property, rest и scheduler.

Для каждого вида сведений, предоставляемых Витриной, следует создавать отдельное сопоставление receiver и устанавливать значения receiver-property. Остальные параметры следует оставить без изменения.

В файле конфигурации могут быть настроены следующие секции:

  • vertx – настройка параметров фреймворка Vert.x (подробнее на сайте разработчиков: https://vertx.io/docs/).

  • spring – подключение к фреймворку spring boot (используется для разработки);

  • smev – настройки подключения к CМЭВ3-адаптеру;

  • receiver- настройка взаимодействия СМЭВ-запросов с Peblle-шаблонами (для каждого receiver можно настроить количество instance);

  • prostore-api-client - блок параметров конфигурирования взаимодействия с ProStore;

  • datasource – параметры подключения к ProStore;

  • environment - настройки окружения;

  • zookeeper – параметры подключения к Zookeeper;

  • migration – настройка параметров миграции сервисной базы данных CМЭВ3-адаптера**` в базу данных **Zookeeper;

  • paramstorage – указывается корневой путь хранилища параметров;

  • deltastorage – указывается корневой путь хранилища дельт;

  • sign - настройка формирования и проверки электронной подписи(ЭП) в SOAP-пакетах СМЭВ3;

  • blob - интеграция с BLOB-адаптер;

  • rest - настройки подключения для возможности выполнения rest-запросов к СМЭВ3-адаптеру и получения ответов на них;

  • scheduler - настройка планировщика заданий (запуск дельт по расписанию);

  • pool - размер прерываемого кода;

  • logging – настраивается логирование работы модуля;

  • backup - настройки бекапирования;

  • spf - Параметры подключения к сервису печатных форм (Указывается при использовании функции toSpf).

2.2.3.2.1. Секция vertx

Секция vertx предназначена для настройки параметров фреймворка Vert.x (подробнее на сайте разработчиков: https://vertx.io/docs/). Для включения сбора метрик используйте следующий код:

vertx:
  #Настройки вертикса
  #тут можно указать все настройки из документации для vertx
  props:
    # метрики
    metricsOptions:
      enabled: true
      # тип метрик, например prometheusOptions | jmxMetricsOptions
      prometheusOptions:
        enabled: true
        startEmbeddedServer: true
        embeddedServerOptions:
          #порт для сервера с метриками
          port: 9033
  web-client:
    max-pool-size: 20
2.2.3.2.2. Секция spring

Секция spring подключение к фреймворку spring boot (используется для разработки).

Например:

spring:
  liquibase:
    enabled: false
  main:
    allow-bean-definition-overriding: true
2.2.3.2.3. Секция smev

Секция smev отвечает за настройки подключения к СМЭВ3.

Например:

smev:
  endpointUrl: http://127.0.0.1:7979/api/v1/soap/
  keystoreType: "DUMMY"
  keystoreFile: x
  keystorePass: x
  privateKeyAlias: x
  privateKeyPass: x
  certificateAlias: x
  signatureURI: "http://www.w3.org/2001/04/xmldsig-more#dummy"
  signatureAlgorithm: "DUMMY"
  digestMethod: "http://www.w3.org/2001/04/xmldsig-more#dummy"
  incomingVerificationEnabled: false
  outgoingSigningEnabled: true
  #таймаут отправки сообщения в смев
  timeout: 30000
  #время между попытками перепосылки в смев
  retry-timeout: 30000
  #максимальный размер очереди, ожидающей отправки сообщений
  webMaxWaitQueueSize: -1
  #пул коннектов
  webMaxPoolSize: 20

В случае, когда СМЭВ3 не отвечает на запрос, в новой версии СМЭВ3-адаптера (секция smev), добавлена возможность, которая позволяет задать время ожидания ответа (timeout) перед повторной отправкой запроса к СМЭВ3:

  • timeout - таймаут отправки сообщения в СМЭВ3;

  • retry-timeout - время между повторной попыткой отправки запроса в СМЭВ3;

  • webMaxWaitQueueSize - максимальный размер очереди, ожидающей отправки сообщений;

  • webMaxPoolSize - пул коннектов.

Примечание

Для удобного отслеживания в лог-файлах всех запросов/ответов к СМЭВ3 в рамках одной бизнес-операции, в файл logback-json.xml добавлен параметр ReqMessageID. При обработке ошибки от СМЭВ3, в лог-файл добавляется описание ошибки и код ошибки СМЭВ3 (в том случае, если СМЭВ3 вернул данный код в блоке description).

2.2.3.2.4. Секция receiver

Секция receiver предназначена для настройки параметров взаимодействия СМЭВ-запросов с peblle-шаблонами.

Например:

receiver:
  receiver-property:
    -
      selector:
        namespace: a
        root-element-name: b
      template: templates/smev.xml.peb
      idle-delay: PT1m
      fallback-response: templates/fallback.xml
    -
      selector:
        namespace: urn://x-artefacts-testperson/1.0
        root-element-name: TestPersonRequest
      template: templates/smev.xml.peb
      idle-delay: PT1s

Параметры настроек

  • namespace - пространство имен в XML.

  • root-element-name - имя корневого элемента запроса обрабатываемого ВС (как указано в заявке на регистрацию ВС);

  • template имя файла, содержащего pebble-шаблон обработки запросов для данного ВС;

  • idle-delay - периодичность опроса очереди СМЭВ3 для получения новых запросов (в формате ISO 8601).

  • mtom-xop-postfix - включение бинарных данных посредством ссылки xop, например:

<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" ref="cid:320038b2-0485-4658-89cc-980b7c8b5193@smev_client"/>

Пример файла smev.xml.peb

<TestPersonResponse xmlns="urn://x-artefacts-testperson/1.0">
{% set my_blob = fromblob ("/Picture_13.jpg", "my_fname", "my_mime") %}
<photo>{{ toftp ("some test 1", "file.txt", "text/plain") }}</photo>
<photo>{{ toftp ("some test 2", "file.txt", "text/plain") }}</photo>
<photo>{{ toftp ("some test 3", "file2.txt", "text/plain") }}</photo>
<photo>{{ tomtom (my_blob, my_mime) }}</photo>
</TestPersonResponse>

Пример файла fallback.xml (Ответ при ошибке обработки запроса)

<TestPersonResponse xmlns="urn://x-artefacts-testperson/1.0">
    <text>Произошла ошибка при обработке запроса: %error_message%</text>
</TestPersonResponse>
2.2.3.2.5. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.

Например:

prostore-rest-client:
  host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:t5-prostore-01.ru-central1.internal;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.3.2.6. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod)

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - Название окружения, например ENVIRONMENT_NAME:test.

2.2.3.2.7. Секция zookeeper

Секция zookeeper предназначена для настройки параметров подключения к Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  retryPolicy:
    baseSleepTime: 1000
    maxRetries: 3
    maxSleepTime: 3000
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connect-string - адреса серверов для подключения к Zookeeper (разделитель - ,);

  • baseSleepTime - начальное значение таймаута ожидания при повторных запросах;

  • maxRetries - максимальное количество повторных запросов;

  • maxSleepTime - максимальное значение таймаута ожидания при повторных запросах.

2.2.3.2.8. Секция migration

Секция migration реализована настройка миграции зукипера для задачи бекапирования.

Например:

migration:
  zk-enabled: ${MIGRATION_ZK_ENABLE:false}

Параметры настроек

  • enabled - подключение миграции, например {MIGRATION_ENABLE:false}.

2.2.3.2.9. Секция paramstorage

В секции paramstorage указывается корневой путь до сервера Zookeeper для механизма параметров (ключ-значение).

Например:

paramstorage:
  base-path: '/smev/paramstorage'
2.2.3.2.10. Секция deltastorage

В секции deltastorage указывается корневой путь до сервера Zookeeper для механизма дельт.

Например:

deltastorage:
  base-path: '/smev/deltastorage'
2.2.3.2.11. Секция sign

Секция sign предназначена для формирования и проверки электронной подписи (ЭП) в SOAP-пакетах СМЭВ3.

Например:

sign:
  digest-algorithm: 1.2.643.7.1.1.2.2

Параметры настроек

  • digest-algorithm - алгоритм ключа проверки электронной подписи.

2.2.3.2.12. Секция blob

Секция blob предназначена для настройки взаимодействия модуля СМЭВ3-адаптер с:

  • BLOB-адаптером для считывания BLOB-полей (см. Взаимодействие через СМЭВ3-адаптер);

  • FTP-сервером СМЭВ3, на который модуль СМЭВ3-адаптер выгружает содержимое BLOB-полей и/или большие табличные данные.

Например:

blob:
  # настройки подключения к BLOB адаптеру
  blob-source:
    host: 'localhost'
    port: 8080
    path:
  ftp-destination:
    #хост фтп смева
    host: localhost
    #порт фтп смева
    port: 21
    #корневой каталог
    #path: aaa/bbb/ccc
    #пользователь
    user: user
    #пароль
    password: 123

Параметры настроек

  • blob-source - настройка подключения к BLOB-адаптеру;

  • ftp-destination - настройка подключения к FTP-серверу СМЭВ3.

2.2.3.2.13. Секция rest

Секция rest предназначена для настройки возможности выполнения REST-запросов к СМЭВ3-адаптеру и получения ответов на них.

Например:

rest:
  #вкл/выкл
  enabled: false
  #порт на котором будет запущена рестовая ручка
  port: 8080
  # путь get запроса
  get: /le
  #путь post запроса
  post: /le
  #обрабатываемый шаблон
  template: smev3-adapter/templates/smev.xml.peb
2.2.3.2.14. Секция scheduler

Секция scheduler предназначена для настройки планировщика заданий в случае, если планируется использовать механизм отправки дельт по расписанию.

Например:

scheduler:
  enabled: true
  interval: PT30s
  template: templates/pfr-delta.peb

Параметры настроек

  • enabled - включение планировщика заданий;

  • interval - интервал между отправкой дельт;

  • template - путь к Pebble-шаблону;

2.2.3.2.15. Секция pool

В секции pool указывается размер прерываемого кода.

Например:

pool:
  reader-executor: 20
  schedule-executor: 1
  restExecutor: 1
  logExecutor: 20
2.2.3.2.16. Секция logging

В секции logging настраивается логирование работы модуля.

Например:

logging:
  request-response:
    smev-request: false
    smev-response: false

Параметры настроек

  • smev-request - логирование запросов;

  • smev-response - логирование ответов.

2.2.3.2.17. Секция backup

Секция backup предназначена для настроек бекапирования модуля.

Например:

backup:
  zk-path: ${SMEV3_BACKUP_ZK_PATH:/${environment.name}/smev3-adapter}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  adapterCommandBroadcast: ${S3A_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  timeout: ${BACKUP_TIMEOUT:PT180s}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${SMEV3_BACKUP_GROUP_ID:smev3-adapter_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

Параметры настроек

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки забэкапированных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.3.2.18. Секция spf

В секции spf указываются параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf.

Например:

spf:
  host: ${SPF_HOST:localhost}
  port: ${SPF_PORT:8080}
  # Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
  params: {}

Параметры настроек

  • host - адрес подключения, например {SPF_HOST:localhost};

  • port - порт подключения, например: {SPF_PORT:8080};

  • params - Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ.

2.2.4. Настройка CSV-Uploader

2.2.4.1. Конфигурация CSV-uploader (application.yml)

Файл application.yml – основной конфигурационный файл модуля CSV-uploader, в котором задана логика и порядок работы загрузчика, а также другие настройки необходимые для корректной работы адаптера.

2.2.4.1.1. Пример файла application.yml
# Kafka Prostore
  .kafkaUrl: &kafkaUrl ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

http-server:
  # Порт для старта веб сервера
  port: ${HTTP_PORT:8080}
  # Включить веб-сервер
  enabled: ${HTTP_ENABLED:true}

send:
  # Размер отправляемой порции данных
  chunk-row-count: ${CHUNK_ROW_COUNT:1000}
  # Размер буфера на чтение файла
  file-buffer-size: ${FILE_BUFFER_SIZE:1048576}
  # Количество Job на чтение
  read-job-count: ${READ_JOB_COUNT:4}
  # Размер Channel для сериализации
  serialize-channel-size: ${SERIALIZE_CHANNEL_SIZE:20}
  # Количество Job на сериализацию
  serialize-job-count: ${SERIALIZE_JOB_COUNT:4}
  # Размер Job на отправку
  send-channel-size: ${SEND_CHANNEL_SIZE:20}
  # Количество Job на отправку
  send-job-count: ${SEND_JOB_COUNT:4}

file-size:
  # Ограничение на размер оправляемого файла (мегабайты)
  restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}

logging.level:
  root: info
  ru.itone: debug

environment:
  # Название окружения
  name: ${ENVIRONMENT_NAME:test}
  # Папка для ошибочных файлов
  error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}

zookeeper:
  # Адрес сервера zookeeper
  connection-string: ${ZK_CONNECTION:localhost}
  # Таймаут сессии
  session-timeout-ms: ${ZK_SESSION_TIMEOUT_MS:30000}
  # Таймаут подключения
  connection-timeout-ms: ${ZK_CONNECTION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

migration:
  enabled: ${MIGRATION_ENABLE:false}

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
      max-pool-size: ${PS_MAX_POOL_SIZE:8}

prostore:
  zookeeper:
      # Адрес сервера zookeeper для загрузки данных в простор
      connection-string: ${ZK_PROSTORE_CONNECTION:locahost:2181}

validation:
  enable: ${VALIDATION_ENABLE:true}
  rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081}
  # обязательность использования ФЛК
  mandator: ${VALIDATION_MANDATOR:false}

upload:
  # требуется токен для аутентификации на rest-uploader
  jwt-auth: ${JWT_AUTH:false}

kafka:
  create-topic:
    # Количество партиций на загрузку через EDML
    num-partitions: ${EDML_UPLOAD_NUM_PARTITIONS:1}
    # Фактор репликации при создании топика
    replication-factor: ${EDML_UPLOAD_REPLICATION_FACTOR:1}
  topic:
    # Топик для журналирования
    journal-log: journal.log
    flk-log: flk.log
  consumer:
    # Количество партиций на выгрузку через EDML
    num-partitions: ${EDML_DOWNLOAD_NUM_PARTITIONS:1}
    property:
    bootstrap.servers: *kafkaUrl
    group.id: csv-uploader
    auto.offset.reset: earliest
    enable.auto.commit: true
  producer:
    property:
      bootstrap.servers: *kafkaUrl

# Настройки парсера csv файлов
csv-parser:
  # Символ разделителя значений
  separator: ${CSV_PARSER_SEPARATOR:;}
  # Символ кавычки
  quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
  # Символ экранирования значений
  escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
  # Настройка интерпретации значений как null. Допустимые значения:
  #  - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
  #  - EMPTY_QUOTES - пустые кавычки, например ;"";
  #  - BOTH - оба варианта
  #  - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
  field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}

metrics:
  port: ${METRICS_PORT:9837}

backup:
  zk-path: ${CSV_UPLOADER_BACKUP_ZK_PATH:/${environment.name}/csv-uploader/config}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
        group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}

jet-connector:
  use: ${JET_CONNECTOR_USE:true}

2.2.4.2. Параметры конфигурации

Настройка конфигурации CSV-uploader осуществляется путем редактирования параметров настроек в файле application.yml.

Некоторые настройки доступны для редактирования через пользовательский интерфейс модуля, например, Настройка отображения количества записей и Запуск по расписанию в Журнале операций .

В файле конфигурации CSV-uploader могут быть настроены следующие секции:

  • kafkaUrl - URL для доступа к Kafka;

  • http-server - настройки порта подключения;

  • send - настройка отправки файлов;

  • file-size - ограничение на размер отправляемого файла (мегабайты);

  • logging.level - настройка сохранения лог-файла;

  • environment - определяет значение среды разработки;

  • zookeeper - настройка подключения Zookeeper;

  • migration - настройка миграции зукипера для задачи бекапирования;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с ProStore;

  • prostore - адрес сервера zookeeper для загрузки данных в ProStore;

  • validation - включение/выключение механизма валидации загрузки с помощью модуля REST-Uploader;

  • upload - требование токена для аутентификации на REST-Uploader;

  • kafka - настройка подключения к шине данных Apache Kafka;

  • csv-parser - настройка парсинга CSV;

  • metrics - настройка получения метрик;

  • backup - настройка бэкапирования модуля;

  • jet-connector - подготовлен для оптимизации задержек записи.

2.2.4.2.1. Секция kafkaUrl

В секция kafkaUrl указывается URL-адрес для доступа к Apache Kafka (ProStore).

Например:

.kafkaUrl: &kafkaUrl ${KAFKA_BOOTSTRAP_SERVERS:dev-dtm-one05.ru-central1.internal:9092}

Параметры конфигурации

KAFKA_BOOTSTRAP_SERVERS - URL-адрес для доступа к Apache Kafka (ProStore).

2.2.4.2.2. Секция http-server

Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).

Например:

http:
        port: ${HTTP_PORT:8080}
        enabled: ${HTTP_ENABLED:true}

Параметры конфигурации

  • port - порт для старта веб-сервера, например HTTP_PORT:8080;

  • enabled - статус включения/отключения веб-сервера, например HTTP_ENABLED:true.

2.2.4.2.3. Секция send

В секции send настраивается отправка файлов.

Например:

send:
        chunk-row-count: ${CHUNK_ROW_COUNT:1000}
        file-buffer-size: ${FILE_BUFFER_SIZE:1048576}
        read-job-count: ${READ_JOB_COUNT:4}
        serialize-channel-size: ${SERIALIZE_CHANNEL_SIZE:20}
        serialize-job-count: ${SERIALIZE_JOB_COUNT:4}
        send-channel-size: ${SEND_CHANNEL_SIZE:20}
        send-job-count: ${SEND_JOB_COUNT:4}

Параметры конфигурации:

  • chunk-row-count - размер отправляемой порции данных, например CHUNK_ROW_COUNT:100;

  • file-buffer-size - размер буфера на чтение файла, например FILE_BUFFER_SIZE:1048576;

  • read-job-count - количество Job на чтение, например READ_JOB_COUNT:4;

  • serialize-channel-size - размер Channel для сериализации, например SERIALIZE_CHANNEL_SIZE:20;

  • serialize-job-count - количество задач на сериализацию, например SERIALIZE_JOB_COUNT:4;

  • send-channel-size - размер задач на отправку, например SEND_CHANNEL_SIZE:20;

  • send-job-count - количество задач на отправку, например SEND_JOB_COUNT:4;

2.2.4.2.4. Секция file-size

Секция file-size отвечает за ограничение на размер отправляемого файла (указывется в мегабайтах).

file-size:
        #
        restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}

Параметры конфигурации

  • restriction - ограничение на размер отправляемого файла, например SEND_FILE_SIZE_RESTRICTION:1024.

2.2.4.2.5. Секция logging.level

В секции logging.level настраиваются записи логирования.

Например:

logging.level:
        root: info
        ru.itone: debug
2.2.4.2.6. Секция environment

В секции environment выбирается среда разработки (например, значение test, prod и т.д).

Например:

environment:
        name: ${ENVIRONMENT_NAME:test}
        error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}

Параметры конфигурации

  • name - название окружения, например ENVIRONMENT_NAME:test;

  • error-folder - папка для ошибочных файлов, например ENVIRONMENT_ERROR_FOLDER:error.

2.2.4.2.7. Секция zookeeper

В секции zookeeper настраиваются параметры подключения к серверу Zookeeper.

Например:

zookeeper:
        # Адрес сервера zookeeper
        connection-string: ${ZK_CONNECTION:localhost}
        # Таймаут сессии
        session-timeout-ms: ${ZK_SESSION_TIMEOUT_MS:30000}
        # Таймаут подключения
        connection-timeout-ms: ${ZK_CONNECTION_TIMEOUT_MS:86400000}
        chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры конфигурации

  • connection-string - адрес сервера Zookeeper, например ZK_CONNECTION:localhost;

  • session-timeout-ms - таймаут сессии, например ZK_SESSION_TIMEOUT_MS:30000;

  • connection-timeout-ms - таймаут подключения, например ZK_CONNECTION_TIMEOUT_MS:86400000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.4.2.8. Секция migration

В секции migration реализована настройка миграции зукипера для задачи бекапирования.

Например:

migration:
        enabled: ${MIGRATION_ENABLE:false}

Параметры настроек

  • enabled - включение миграции (по умолчанию выключена), например {MIGRATION_ENABLE:false}.

2.2.4.2.9. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.

Например:

prostore-rest-client:
        host: ${PS_HOST:localhost}
        port: ${PS_PORT:9195}
        http:
                max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:localhost;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.4.2.10. Секция prostore

В секции prostore указывается адрес сервера zookeeper для загрузки данных в Prostore.

Например:

prostore:
        zookeeper:
                connection-string: ${ZK_PROSTORE_CONNECTION:locahost:2181}

Параметры настроек

  • connection-string - адрес сервера Zookeeper для загрузки данных в Prostore, например ZK_PROSTORE_CONNECTION:locahost:2181.

2.2.4.2.11. Секция validation

В секции validation реализован механизм настройки валидации ФЛК.

Например:

enable: ${VALIDATION_ENABLE:true}
rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081}
mandator: ${VALIDATION_MANDATOR:false}

Параметры конфигурации

  • enable - валидация включена (по умолчанию), например {VALIDATION_ENABLE:true};

  • rest-uploader-url - URL к сервису rest-uploader для выполнения валидации, например {REST_UPLOADER_URL:http://localhost:8081};

  • mandator - флаг использования ФЛК, например {VALIDATION_MANDATOR:false}.

2.2.4.2.12. Секция upload

В секции upload реализована настройка требования токена для аутентификации на REST-Uploader (если true, то при переключении на вкладку Загрузка появляется модальное окно для задания токена в текстовом виде и кнопка Сохранить).

Например:

upload:
        jwt-auth: ${JWT_AUTH:false}

Параметры конфигурации

  • jwt-auth - требование токена для аутентификации на REST-Uploader, например {JWT_AUTH:false}.

2.2.4.2.13. Секция kafka

В секции kafka настраиваются параметры подключения к шине данных Apache Kafka.

Например:

kafka:
        create-topic:
                num-partitions: ${EDML_UPLOAD_NUM_PARTITIONS:1}
                replication-factor: ${EDML_UPLOAD_REPLICATION_FACTOR:1}
        topic:
                journal-log: journal.log
        consumer:
                num-partitions: ${EDML_DOWNLOAD_NUM_PARTITIONS:1}
                property:
                        bootstrap.servers: *kafkaUrl
                        group.id: csv-uploader
                        auto.offset.reset: earliest
                        enable.auto.commit: true
        producer:
                property:
                        bootstrap.servers: *kafkaUrl

Параметры конфигурации

  • num-partitions - количество партиций на загрузку через EDML, например EDML_UPLOAD_NUM_PARTITIONS:1;

  • replication-factor - фактор репликации при создании топика, например EDML_UPLOAD_REPLICATION_FACTOR:1.

2.2.4.2.14. Секция csv-parser

Внимание

При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковыми в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.

Секция csv-parser - настройка парсинга CSV.

Например:

csv-parser:
        separator: ${CSV_PARSER_SEPARATOR:;}
        quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
        escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
        field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}

Параметры конфигурации

  • separator - Символ разделителя значений, например CSV_PARSER_SEPARATOR:;;

  • quote-char - символ кавычки, например CSV_PARSER_QUOTE_CHAR:";

  • escape-char - Символ экранирования значений, например CSV_PARSER_ESCAPE_CHAR:';

    Настройка интерпретации значений как null. Допустимые значения:

    • EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;

    • EMPTY_QUOTES - пустые кавычки, например ;»»;

    • BOTH - оба варианта

    • NEITHER - никогда. Пустая строка всегда определяется как пустая строка

  • field-as-null - способ определения null поля, например CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.

Дополнительное описание параметров

  1. Параметр CSV_PARSER_ESCAPE_CHAR работает следующим образом: если символ экранирования и символ кавычки равны ", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например "поле, ""содержащее двойную кавычку""" будет считано как поле, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».

  2. Параметр CSV_PARSER_FIELD_AS_NULL может принимать следующие значения:

    • EMPTY_SEPARATORS - два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].

    • EMPTY_QUOTES - два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].

    • BOTH - оба варианта (см. EMPTY_SEPARATORS и EMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].

    • NEITHER - ни один из вариантов (см. EMPTY_SEPARATORS и EMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].

2.2.4.2.15. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.4.2.16. Секция backup

Секция backup предназначена для настроек бекапирования модуля.

Например:

backup:
  zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

Параметры настроек

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки забэкапированных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.4.2.17. Секция jet-connector

Секция jet-connector предназначена для оптимизации задержек записи данных.

Например:

jet-connector:
use: ${JET_CONNECTOR_USE:false}

Параметры настроек

  • use - флаг активации jet-connector, например {JET_CONNECTOR_USE:false};

Таблица 2.13 Область применения

Режим/СУБД

ADB

ADP

ADQM

ADG

Чтение

Нет

Нет

Нет

Нет

Запись

В перспективе

Да

Нет

Нет

Чтобы воспользоваться Jet-коннектор требуется вместо upload external table создавать readable  external table, указывающую на топик, как отражено в документации Prostore

В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, синтаксис Простора един для всех поддерживаемых СУБД. Конкретная СУБД указывается в настройках Простора.

Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается.

При формировании запросов с табличными параметрами, в том числе при регистрации РЗ, необходимо явно перечислять поля таблиц, по которым будет выполняться фильтрация записей или объединение таблиц.

Переключение с jet-connector на kafka postgres writer и наоборот допускается при завершенных операциях загрузки данных.

Предупреждение

Jet-коннектор в настоящее время применим для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании Jet-коннектор с другими базами должна появиться ошибка.

2.2.5. Настройка СМЭВ4-адаптера - Модуль исполнения запросов

2.2.5.1. Конфигурация СМЭВ4-адаптера - Модуль исполнения запросов (application.yml)

Файл application.yml – основной конфигурационный файл СМЭВ4-адаптера - Модуль исполнения запросов, в котором задана логика и порядок работы адаптера:

  • получение и обработка входящих запросов;

  • подключение к Сервису формирования документов (секция: printable-forms-service);

  • настройки логирования (секция: logging), а также другие настройки необходимые для корректной работы адаптера.

Хинт пагинации FORCE_LLR определен в переменных среды.

2.2.5.1.1. Пример файла application.yml

В конфигурационном файле задаются настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${HTTP_PORT:8090}

environment:
  name: ${ENVIRONMENT_NAME:test}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
  max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
  log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}

send:
  channel-size: ${SEND_CHANNEL_SIZE:1}
  compress: ${SEND_COMPRESS:none}
  max-message-size: ${SEND_MAX_MESSAGE_SIZE:800000}

query:
  data-source-type:
    for-listagg: ${DATA_SOURCE_TYPE_LISTAGG:ADP}
    statistics-request: ${DATA_SOURCE_TYPE_STATISTIC:ADP}
  force-llr-for-order: ${FORCE_LLR_FOR_ORDER:true}
  force-llr-for-all: ${FORCE_LLR_FOR_ALL:false}
  llr-rows-limit: ${LLR_ROWS_LIMIT:200}
  fetch-size: ${FETCH_SIZE:1000}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

printable-forms-service:
  host: ${PFS_HOST:localhost}
  port: ${PFS_PORT:8080}
  pool-size: ${PFS_POOL_SIZE:10}
  timeout: ${PFS_TIMEOUT:30}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  consumer:
    query-request:
      topic: ${kafka.external.topic.prefix}query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    query-cancel-request:
      topic: ${kafka.external.topic.prefix}cancel.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}cancel.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-request:
      topic: ${kafka.external.topic.prefix}metadata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-new-data-request:
      topic: ${kafka.external.topic.prefix}metadata.newdata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.newdata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    statistics-request:
      topic: ${kafka.external.topic.prefix}statistics.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}statistics.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    report-request:
      topic: ${kafka.external.topic.prefix}procedure.query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}report.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
  producer:
    query-result: ${kafka.external.topic.prefix}query.rs
    query-error: ${kafka.external.topic.prefix}query.err
    query-estimation-result: ${kafka.external.topic.prefix}query.estimation.rs
    query-cancel-result: ${kafka.external.topic.prefix}cancel.rs
    query-cancel-error: ${kafka.external.topic.prefix}cancel.err
    metadata-result: ${kafka.external.topic.prefix}metadata.rs
    metadata-error: ${kafka.external.topic.prefix}metadata.err
    metadata-newdata-result: ${kafka.external.topic.prefix}metadata.newdata.rs
    metadata-newdata-error: ${kafka.external.topic.prefix}metadata.newdata.err
    statistics-result: ${kafka.external.topic.prefix}statistics.rs
    statistics-error: ${kafka.external.topic.prefix}statistics.err
    report-result: ${kafka.external.topic.prefix}query.rs
    report-error: ${kafka.external.topic.prefix}query.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      mppr-query-request: ${kafka.internal.topic.prefix}mppr.delegate.rq
      tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

statistics:
  enabled: ${STATISTICS_ENABLED:false}
  timeout-min: ${STATISTICS_TIMEOUT_MIN:60}
  datamarts:
    - name: demo_dev
      tables:
        - name: all_types
          columns:
            - varchar_c
            - char_c
            - bigint_c

logging:
  request-response:
    query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
    query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
    pf-request: ${PF_REQUEST_LOG_ENABLED:false}
    pf-response: ${PF_RESPONSE_LOG_ENABLED:false}

metrics:
  port: ${METRICS_PORT:9837}

2.2.5.2. Параметры конфигурации

Настройка конфигурации СМЭВ4-адаптера - Модуль исполнения запросов осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт для подключения;

  • environment - указывается название окружения (test, prod и т.д.);

  • executor - настраивается размер пула для запросов;

  • send - настраиваются ограничения на размер загружаемого файла;

  • query - настройка выполнения запросов;

  • zookeeper - подключения в Zookeeper;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с ProStore;

  • prostore- указываются настройки подключения к ProStore;

  • printable-forms-service - настройки подключения к Сервис формирования документов;

  • kafka - настройки параметров подключения к шине данных Apache Kafka;

  • statistics - управление статистикой;

  • logging - настройка сохранения лог-файла;

  • metrics - настройка получения метрик.

2.2.5.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http:
  port: ${HTTP_PORT:8090}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:8090.

2.2.5.2.2. Секция environment

Секция environment предназначена для настройки параметров окружения.

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - название окружения (test, prod и т.д.), например: ENVIRONMENT_NAME:test.

2.2.5.2.3. Секция executor

Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
  max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
  log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}

Параметры настроек

  • reader-pool-size - размер пула для чтения Kafka, например EXECUTOR_READER_POOL_SIZE:20;

  • max-execute-time - максимальное время выполнения задачи (сек), например EXECUTOR_MAX_EXECUTE_TIME:600;

  • log-pool-size - размер используемого пула для журналирования запросов и ответов, например EXECUTOR_LOG_POOL_SIZE:20.

2.2.5.2.4. Секция send

В секции send настраиваются ограничения на размер загружаемого файла.

Например:

send:
  channel-size: ${SEND_CHANNEL_SIZE:1}
  compress: ${SEND_COMPRESS:none}
  max-message-size: ${SEND_MAX_MESSAGE_SIZE:800000}

Параметры настроек

  • channel-size - размер канала на отправку сообщения, например SEND_CHANNEL_SIZE:10;

  • compress - сжатие выгружаемых сообщений (none или zstd), например SEND_COMPRESS:none;

  • max-message-size - максимальный размер отправляемого сообщения, например SEND_MAX_MESSAGE_SIZE:800000.

2.2.5.2.5. Секция query

В секции query выполняется настройка выполнения запросов.

Например:

query:
  data-source-type:
    for-listagg: ${DATA_SOURCE_TYPE_LISTAGG:ADP}
    statistics-request: ${DATA_SOURCE_TYPE_STATISTIC:ADP}
  force-llr-for-order: ${FORCE_LLR_FOR_ORDER:true}
  force-llr-for-all: ${FORCE_LLR_FOR_ALL:false}
  llr-rows-limit: ${LLR_ROWS_LIMIT:200}
  fetch-size: ${FETCH_SIZE:1000}

Параметры настроек

  • data-source-type - выполнение запроса с LISTAGG на (ADB/ADP), например DATA_SOURCE_TYPE:ADB;

  • force-llr-for-order - выполнение ORDER BY запроса c использованием пагинации, например FORCE_LLR_FOR_ORDER:true;

  • force-llr-for-all - выполнение всех запросов через LLR, например FORCE_LLR_FOR_ALL:false;

  • llr-rows-limit - ограничение выгрузки через ЛЛР, при использовании в запросе лимита со значением меньшим, чем указанное значение, например LLR_ROWS_LIMIT:200, будет использован режим LLR;

  • fetch-size - размер выгрузки через JDBC, например FETCH_SIZE:1000.

Внимание

Для опции force-llr-for-order параметр false можно устанавливать только при развертывании витрины на единственной БД ADP.

2.2.5.2.6. Секция zookeeper

Секция zookeeper определяет настройки подключения к Zookeeper DS.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connection-string - подключение в Zookeeper DS, например ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.5.2.7. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:localhost;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.5.2.8. Секция printable-forms-service

Секция printable-forms-service определяет настройки подключения к Сервис формирования документов.

Например:

printable-forms-service:
  host: ${PFS_HOST:localhost}
  port: ${PFS_PORT:8080}
  pool-size: ${PFS_POOL_SIZE:10}
  timeout: ${PFS_TIMEOUT:30}

Параметры настроек

  • host - адрес сервера формирования документов, например PFS_HOST:localhost;

  • port - порт сервера формирования документов, например PFS_PORT:8080;

  • pool-size - размер пула соединений для ПФ, например PFS_POOL_SIZE:10;

  • timeout - таймаут переподключения к сервису формирования документов (секунды), например PFS_TIMEOUT:30.

2.2.5.2.9. Секция kafka

В секции kafka настраиваются параметры подключения к шине данных Apache Kafka.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  consumer:
    query-request:
      topic: ${kafka.external.topic.prefix}query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    query-cancel-request:
      topic: ${kafka.external.topic.prefix}cancel.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}cancel.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-request:
      topic: ${kafka.external.topic.prefix}metadata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    metadata-new-data-request:
      topic: ${kafka.external.topic.prefix}metadata.newdata.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}metadata.newdata.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    statistics-request:
      topic: ${kafka.external.topic.prefix}statistics.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}statistics.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
    report-request:
      topic: ${kafka.external.topic.prefix}procedure.query.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}report.rq.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
  producer:
    query-result: ${kafka.external.topic.prefix}query.rs
    query-error: ${kafka.external.topic.prefix}query.err
    query-estimation-result: ${kafka.external.topic.prefix}}query.estimation.rs
    query-cancel-result: ${kafka.external.topic.prefix}cancel.rs
    query-cancel-error: ${kafka.external.topic.prefix}cancel.err
    metadata-result: ${kafka.external.topic.prefix}metadata.rs
    metadata-error: ${kafka.external.topic.prefix}metadata.err
    metadata-newdata-result: ${kafka.external.topic.prefix}metadata.newdata.rs
    metadata-newdata-error: ${kafka.external.topic.prefix}metadata.newdata.err
    statistics-result: ${kafka.external.topic.prefix}statistics.rs
    statistics-error: ${kafka.external.topic.prefix}statistics.err
    report-result: ${kafka.external.topic.prefix}query.rs
    report-error: ${kafka.external.topic.prefix}query.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      mppr-query-request: ${kafka.internal.topic.prefix}mppr.delegate.rq
      tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры конфигурации

  • topic - префикс для топиков Агента СМЭВ4, например AGENT_TOPIC_PREFIX.

2.2.5.2.10. Секция statistics

Секция statistics предназначена для управления статистикой.

Например:

statistics:
  enabled: ${STATISTICS_ENABLED:false}
  timeout-min: ${STATISTICS_TIMEOUT_MIN:60}
  datamarts:
    - name: demo_dev
      tables:
        - name: all_types
          columns:
            - varchar_c
            - char_c
            - bigint_c

Параметры конфигурации

  • enabled - включение (true)/ выключение (false) расчета статистики, например STATISTICS_ENABLED:false;

  • timeout-min - время обновления статистики (минуты), например STATISTICS_TIMEOUT_MIN:60.

2.2.5.2.11. Секция logging

Секция logging предназначена для настройки параметров логирования.

Например:

logging:
  request-response:
    query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
    query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}
    pf-request: ${PF_REQUEST_LOG_ENABLED:false}
    pf-response: ${PF_RESPONSE_LOG_ENABLED:false}

Параметры конфигурации

  • query-request - журналирование query запросов, например QUERY_REQUEST_LOG_ENABLED:false;

  • query-response - журналирование query ответов, например QUERY_RESPONSE_LOG_ENABLED:false;

  • pf-request - журналирование запросов на сервис формирования документов, например PF_REQUEST_LOG_ENABLED:false;

  • pf-response - журналирование ответов от сервиса формирования документов, например PF_RESPONSE_LOG_ENABLED:false.

2.2.5.2.12. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.6. Настройка СМЭВ4-адаптера – Модуль MPPR

2.2.6.1. Конфигурация СМЭВ4-адаптера - Модуль MPPR (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: получение входящих запросов, их обработка, а также настройка подключения к ядру витрины (секция: prostore), настройка метрик (секция: metrics), а также другие настройки необходимые для корректной работы адаптера.

2.2.6.1.1. Пример файла application.yml
http-server:
  port: ${HTTP_PORT:8085}

environment:
  name: ${ENVIRONMENT_NAME:test}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
  max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
  log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}

send:
  channel-size: ${SEND_CHANNEL_SIZE:1}
  timeout: ${SEND_TIMEOUT:30}
  delete-topic: ${SEND_DELETE_TOPIC:true}
  compress: ${SEND_COMPRESS:none}

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

prostore:
  kafka:
    message-limit: ${PS_MESSAGE_LIMIT:1000}
    zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
    statusEventTopic:
      topic: ${PS_STATUS_EVENT_TOPIC:status.event}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppr-status-event
        auto.offset.reset: earliest
        enable.auto.commit: false

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    query-request:
      topic: ${kafka.internal.topic.prefix}mppr.delegate.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}mppr.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
        max.poll.records: 1
        max.poll.interval.ms: 600000
    delta-request:
      topic: ${kafka.internal.topic.prefix}mppr.delta.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}mppr.delta.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
        max.poll.records: 1
        max.poll.interval.ms: 600000
    download-data:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}mppr.x.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
        max.poll.records: 1
  producer:
    query-result: ${kafka.external.topic.prefix}query.rs
    query-error: ${kafka.external.topic.prefix}query.err
    delta-result: ${kafka.external.topic.prefix}delta.rs
    delta-error: ${kafka.external.topic.prefix}delta.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

metrics:
  port: ${METRICS_PORT:9843}

logging:
  scl.delta:
    enabled: ${SCL_DELTA_ENABLED:false}
  request-response:
    delta-request: ${DELTA_REQUEST_LOG_ENABLED:false}
    delta-response: ${DELTA_RESPONSE_LOG_ENABLED:false}
    query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
    query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}

2.2.6.2. Параметры конфигурации

Настройка конфигурации СМЭВ4-адаптера - Модуль MPPR осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт веб-сервера;

  • environment - указывается название окружения (test, prod и т.д.);

  • executor - предназначена для указания размера пула для запросов;

  • send - настраиваются ограничения на размер загружаемого файла;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с ProStore;

  • prostore - настройка подключения к серверу и базе данных ProStore;

  • kafka - настройки параметров подключения к шине данных Apache Kafka;

  • metrics - настройка получения метрик;

  • logging - настройки журналирования запросов и ответов;

2.2.6.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http-server:
  port: ${HTTP_PORT:8085}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:8085.

2.2.6.2.2. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod)

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - Название окружения, например ENVIRONMENT_NAME:test.

2.2.6.2.3. Секция executor

Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
  max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}
  log-pool-size: ${EXECUTOR_LOG_POOL_SIZE:20}

Параметры настроек

  • reader-pool-size - размер пула для чтения Kafka, например EXECUTOR_READER_POOL_SIZE:20;

  • max-execute-time - максимальное время выполнения задачи (сек), например EXECUTOR_MAX_EXECUTE_TIME:600;

  • log-pool-size - размер пула используемого для журналирования запросов и ответов, например EXECUTOR_LOG_POOL_SIZE:20.

2.2.6.2.4. Секция send

В секции send настраиваются ограничения на размер загружаемого файла.

Например:

send:
  channel-size: ${SEND_CHANNEL_SIZE:1}
  timeout: ${SEND_TIMEOUT:30}
  delete-topic: ${SEND_DELETE_TOPIC:true}
  compress: ${SEND_COMPRESS:none}

Параметры настроек

  • channel-size - размер канала на отправку сообщения, например SEND_CHANNEL_SIZE:10;

  • timeout - таймаут вычитывания данных из топика (сек), например SEND_TIMEOUT:30

  • delete-topic - удаление внешнего топика после выгрузки, например SEND_DELETE_TOPIC:true;

  • compress - сжатие выгружаемых сообщений (none или zstd), например SEND_COMPRESS:none.

2.2.6.2.5. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес ProStore, например PS_HOST:localhost;

  • port - порт ProStore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к ProStore, например PS_MAX_POOL_SIZE:8.

2.2.6.2.6. Секция prostore

В секции prostore осуществляется настройка подключения к серверу и базе данных ProStore.

Например:

prostore:
  kafka:
    message-limit: ${PS_MESSAGE_LIMIT:1000}
    zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
    statusEventTopic:
      topic: ${PS_STATUS_EVENT_TOPIC:status.event}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppr-status-event
        auto.offset.reset: earliest
        enable.auto.commit: false

Параметры настроек

  • message-limit - лимит сообщений, например PS_MESSAGE_LIMIT:1000;

  • zk-url - адрес сервера Zookeeper для загрузки данных в ProStore, например PS_ZK_KAFKA_URL:localhost:2181.

2.2.6.2.7. Секция kafka

Секция kafka определяет настройки взаимодействия через СМЭВ4-адаптер между Поставщиком данных (producer) и Получателем данных (consumer).

В секции kafka собраны настройки параметров подключения к шине данных Apache Kafka.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  consumer:
    query-request:
      topic: ${kafka.internal.topic.prefix}mppr.delegate.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}mppr.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
        max.poll.records: 1
        max.poll.interval.ms: 600000
    delta-request:
      topic: ${kafka.internal.topic.prefix}mppr.delta.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}mppr.delta.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
        max.poll.records: 1
        max.poll.interval.ms: 600000
    download-data:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}mppr.x.query.consumer
        auto.offset.reset: earliest
        enable.auto.commit: false
        max.poll.records: 1
  producer:
    query-result: ${kafka.external.topic.prefix}query.rs
    query-error: ${kafka.external.topic.prefix}query.err
    delta-result: ${kafka.external.topic.prefix}delta.rs
    delta-error: ${kafka.external.topic.prefix}delta.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      tp-delete-tmp: ${kafka.internal.topic.prefix}tp.delete.tmp
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры конфигурации

  • topic - префикс для топиков Агента СМЭВ4, например AGENT_TOPIC_PREFIX.

2.2.6.2.8. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9843}

Параметры конфигурации

  • port - порт для метрик, например METRICS_PORT:9843.

2.2.6.2.9. Секция logging

Секция logging предназначена для настройки журналирования запросов и ответов.

Например:

logging:
  scl.delta:
    enabled: ${SCL_DELTA_ENABLED:false}
  request-response:
    delta-request: ${DELTA_REQUEST_LOG_ENABLED:false}
    delta-response: ${DELTA_RESPONSE_LOG_ENABLED:false}
    query-request: ${QUERY_REQUEST_LOG_ENABLED:false}
    query-response: ${QUERY_RESPONSE_LOG_ENABLED:false}

LOG_FORMAT - Логирование в формате (JSON/TEXT) - указывается в logback.xml.

2.2.7. Настройка СМЭВ4-адаптера - Модуль MPPW

2.2.7.1. Конфигурация модуля СМЭВ4-адаптер - Модуль MPPW (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: подключение к Агенту СМЭВ4, Брокеру сообщений Kafka, Zookeeper, а также настройка подключения к Prostore (секция: prostore), настройка метрик (секция: metrics) и другие настройки необходимые для корректной работы адаптера.

2.2.7.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

tp:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  upload-topic-prefix: ${UPLOAD_TOPIC_PREFIX:tmp.w}

upload:
  data-topic-prefix: ${AGENT_TOPIC_PREFIX:}
  retry:
    attempts: 5
    delay: 1m


http-server:
  port: ${HTTP_PORT:8090}

environment:
  name: ${ENVIRONMENT_NAME:test}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
  max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}

scheduler:
  delta-apply-request-timeout: ${DELTA_APPLY_REQUEST_TIMEOUT:60}

spring:
  liquibase:
    enabled: ${LIQUIBASE_ENABLED:true} # Для replication.storage.type=kafka необходимо выключить
    change-log: classpath:/liquibase-changes/changelog.xml
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://${replication.storage.postgres.connection.host}:${replication.storage.postgres.connection.port}/${replication.storage.postgres.connection.database}?currentSchema=${replication.storage.postgres.connection.schema}
    user: ${replication.storage.postgres.connection.user}
    password: ${replication.storage.postgres.connection.password}

replication:
  should-check-source-topic: false
  should-delete-prostore-topic: false
  prostore-topic-template: "mppw.{datamart}.{table}"
  storage: # блок настроек хранения чанков данных репликации. При изменении параметров необходимо синхронизировать аналогичные параметры в сервисе mppw
    type: ${STORAGE_TYPE:postgres} # тип, postgres|kafka
    postgres: # параметры подключения к базе. Используется только при type=postgres
      connection:
        database: ${STORAGE_DATABASE:replication}
        schema: ${STORAGE_SCHEMA:public}
        host: ${STORAGE_HOST:localhost}
        port: ${STORAGE_PORT:5432}
        user: ${STORAGE_USER:postgres}
        password: ${STORAGE_PASSWORD:postgres}
      pool:
        max-size: ${STORAGE_POOL_SIZE:30}

delta:
  # параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
  open-delay: ${DELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout}}s
  # количество попыток открытия дельты в случае ошибки
  open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
  # период проверки открытых дельт
  open-check: ${DELTA_OPEN_CHECK:60}s
  # количество попыток фиксации дельты в случае ошибки
  commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
  # период ожидания перед повторной попыткой фиксации дельты
  commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
  # количество попыток отката дельты в случае ошибки
  rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
  # период ожидания перед повторной попыткой отката дельты
  rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
  #enable/disable/period
  creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable}
  period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s



send:
  channel-size: ${SEND_CHANNEL_SIZE:10}
  timeout: ${SEND_TIMEOUT:60}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

prostore:
  key:
    primary: ${PRIMARY_KEY_NAME:tmp_id}
    type: ${PRIMARY_KEY_TYPE:BIGINT}
  kafka:
    message-limit: ${PS_MESSAGE_LIMIT:1000}
    zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
    properties:
      bootstrap.servers: ${PS_KAFKA:localhost:9092}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    tp-request:
      topic: ${kafka.internal.topic.prefix}mppw.tp
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-tp
        auto.offset.reset: earliest
        enable.auto.commit: false
    upload-request:
      topic: ${kafka.internal.topic.prefix}mppw.upload.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-upload
        auto.offset.reset: earliest
        enable.auto.commit: false
    delta-apply-request:
      topic: ${kafka.internal.topic.prefix}mppw.delta.in.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-delta
        auto.offset.reset: earliest
        enable.auto.commit: false
    upload-data:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-data
        auto.offset.reset: earliest
        enable.auto.commit: false
  producer:
    tp-result: ${kafka.internal.topic.prefix}mppw.rs
    upload-result: ${kafka.internal.topic.prefix}mppw.upload.rs
    delta-apply-result: ${kafka.internal.topic.prefix}mppw.delta.in.rs
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}

metrics:
  port: ${METRICS_PORT:9843}

jet-connector:
  use: ${JET_CONNECTOR_USE:true}

2.2.7.2. Параметры конфигурации

Настройка конфигурации СМЭВ4-адаптера - Модуль MPPW осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • tp - указываются настройки топиков для табличных параметров;

  • upload - настройки загрузки через DATA-Uploader;

  • http-server - указывается порт для подключения;

  • environment - указывается название окружения (test, prod и т.д.);

  • executor - настраивается размер пула для запросов;

  • scheduler - настройки планировщика отложенных заданий;

  • replication - блок настроек хранения чанков данных репликации;

  • send - настраиваются ограничения на размер загружаемого файла;

  • zookeeper - указываются настройки подключения к Zookeeper;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с ProStore;

  • prostore - указываются настройки генерации на создание и удаление writable table;

  • kafka - настройки параметров подключения к шине данных Apache Kafka;

  • metrics - настройка получения метрик;

  • jet-connector - подготовлен для оптимизации задержек записи.

2.2.7.2.1. Секция tp

Секция tp предназначена для настройки префиксов топиков, откуда будут вычитываться и куда будут загружаться данные.

Например:

tp:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  upload-topic-prefix: ${UPLOAD_TOPIC_PREFIX:tmp.w}

Параметры конфигурации

  • data-topic-prefix - префикс топика, откуда будут вычитываться данные, например DATA_TOPIC_PREFIX:tp.data;

  • upload-topic-prefix - префикс топика, куда будут загружаться данные для их последующей загрузки в витрину, например UPLOAD_TOPIC_PREFIX:tmp.w.

2.2.7.2.2. Секция upload

В секции upload - указываются настройки загрузки через DATA-Uploader.

Например:

upload:
  data-topic-prefix: ${AGENT_TOPIC_PREFIX:}
  retry:
    attempts: 5
    delay: 1m

Параметры конфигурации

  • AGENT_TOPIC_PREFIX: - значение префикса для топиков. Топики взаимодействия с СМЭВ4-адаптером - Модуль исполнения запросов (см. Спецификация Модуля исполнения запросов);

  • retry - повтор попытки загрузки;

  • attempts - количество попыток;

  • delay - период задержки (в минутах).

2.2.7.2.3. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http-server:
  port: ${HTTP_PORT:8090}

Параметры настроек

  • port - указывается порт веб-сервера, например: HTTP_PORT:8090.

2.2.7.2.4. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod).

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - среда разработки, например ENVIRONMENT_NAME:test.

2.2.7.2.5. Секция executor

Секция executor предназначена для указания размера пула для чтения Kafka и времени выполнения задач.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
  max-execute-time: ${EXECUTOR_MAX_EXECUTE_TIME:600}

Параметры настроек

  • reader-pool-size - размер пула для чтения Kafka, например EXECUTOR_READER_POOL_SIZE:20;

  • max-execute-time - максимальное время выполнения задачи (в секундах), например EXECUTOR_MAX_EXECUTE_TIME:600.

2.2.7.2.6. Секция scheduler

Секция scheduler предназначена для настроек планировщика отложенных заданий.

Например:

scheduler:
  delta-apply-request-timeout: ${DELTA_APPLY_REQUEST_TIMEOUT:60}

Параметры настроек

  • delta-apply-request-timeout - таймаут применения отложенной дельты, например DELTA_APPLY_REQUEST_TIMEOUT:60.

2.2.7.2.7. Секция replication

секции replication указываются настройки хранения чанков данных репликации.

Например:

replication:
  should-check-source-topic: false
  should-delete-prostore-topic: false
  prostore-topic-template: "mppw.{datamart}.{table}"
  storage: # блок настроек хранения чанков данных репликации. При изменении параметров необходимо синхронизировать аналогичные параметры в сервисе mppw
    type: ${STORAGE_TYPE:postgres} # тип, postgres|kafka
    postgres: # параметры подключения к базе. Используется только при type=postgres
      connection:
        database: ${STORAGE_DATABASE:replication}
        schema: ${STORAGE_SCHEMA:public}
        host: ${STORAGE_HOST:localhost}
        port: ${STORAGE_PORT:5432}
        user: ${STORAGE_USER:postgres}
        password: ${STORAGE_PASSWORD:postgres}
      pool:
        max-size: ${STORAGE_POOL_SIZE:30}

Параметры настроек

  • type - тип, postgres|kafka, например: STORAGE_TYPE:postgres;

  • connection - параметры подключения к базе.

2.2.7.2.8. Секция delta

В секции delta настраивается параметр ожидания перед повторной попыткой открытия дельты при ошибке.

Например:

delta:
  # параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
  open-delay: ${DELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout}}s
  # количество попыток открытия дельты в случае ошибки
  open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
  # период проверки открытых дельт
  open-check: ${DELTA_OPEN_CHECK:60}s
  # количество попыток фиксации дельты в случае ошибки
  commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
  # период ожидания перед повторной попыткой фиксации дельты
  commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
  # количество попыток отката дельты в случае ошибки
  rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
  # период ожидания перед повторной попыткой отката дельты
  rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
  #enable/disable/period
  creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable}
  period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s

Параметры настроек

  • open-delay - параметр ожидания (в секундах) перед повторной попыткой открытия дельты в случае ошибки, например DELTA_OPEN_DELAY:${scheduler.delta-apply-request-timeout};

  • open-attempts - количество попыток открытия дельты в случае ошибки, например DELTA_OPEN_ATTEMPTS:5;

  • open-check - период проверки открытых дельт (в секундах), например DELTA_OPEN_CHECK:60;

  • commit-attempts - количество попыток фиксации дельты в случае ошибки, например DELTA_COMMIT_ATTEMPTS:5;

  • commit-error-delay - период ожидания перед повторной попыткой фиксации дельты (в секундах), например DELTA_COMMIT_DELAY:1;

  • rollback-attempts - количество попыток отката дельты в случае ошибки, например DELTA_COMMIT_ATTEMPTS:3;

  • rollback-error-delay - период ожидания перед повторной попыткой отката дельты (в секундах), например DELTA_COMMIT_DELAY:5;

  • creating-delta-on-upload-request - создание дельты при запросе загрузки, например DELTA_CREATING_MODE:enable;

  • period - период создания дельты при запросе загрузки (в секундах), например CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300, используется только при mode=llw и creating-delta-on-upload-request=period;

Для параметра creating-delta-on-upload-request доступны значения:

  • enable - формируются дельты для загружаемых порций данных, данное значение используется для работы подписок;

  • disable - формирование дельт отключено;

  • period - исключается формирование дельт в процессе исполнения команд загрузки данных, вместо этого дельты периодически открываются и закрываются с периодом, указанным в данном параметре. При этом приложение запоминает датамарты по которым завершены инсерты за истекший период. Дельты открываются и закрываются только для датамартов, в которые происходила вставка данных.

Внимание

При потере связи коннектора с Prostore отмены операции не происходит автоматически и модуль MPPW получает ошибку. После восстановления связи коннектора с Prostore и попытке загрузки данных в эту же таблицу возвращается ошибка о блокировке таблицы предыдущей операции вставки. Для исправления ошибки Администратор должен вручную выполнить команду resume или erase в Prostore.

2.2.7.2.9. Секция send

В секции send настраиваются ограничения на размер загружаемого файла.

Например:

send:
  channel-size: ${SEND_CHANNEL_SIZE:10}
  timeout: ${SEND_TIMEOUT:60}

Параметры настроек

  • channel-size - размер канала на отправку сообщения, например SEND_CHANNEL_SIZE:10;

  • timeout - таймаут вычитывания данных из топика (сек), например SEND_TIMEOUT:60.

2.2.7.2.10. Секция zookeeper

Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры конфигурации

  • connection-string - подключение к Zookeeper DS, например ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.7.2.11. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:localhost;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.7.2.12. Секция prostore

Секция prostore

Например:

prostore:
  key:
    primary: ${PRIMARY_KEY_NAME:tmp_id}
    type: ${PRIMARY_KEY_TYPE:BIGINT}
  kafka:
    message-limit: ${PS_MESSAGE_LIMIT:1000}
    zk-url: ${PS_ZK_KAFKA_URL:localhost:2181}
    properties:
      bootstrap.servers: ${PS_KAFKA:localhost:9092}

Параметры настроек

  • primary - название первичного ключа, например tmp_id;

  • type - тип первичного ключа, например BIGINT;

  • message-limit - лимит сообщений, например PS_MESSAGE_LIMIT:1000;

  • zk-url - адрес сервера Zookeeper для загрузки данных в Prostore, например PS_ZK_KAFKA_URL:localhost:2181.

2.2.7.2.13. Секция kafka

В секции kafka собраны настройки параметров подключения к шине данных Apache Kafka.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  consumer:
    tp-request:
      topic: ${kafka.internal.topic.prefix}mppw.tp
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-tp
        auto.offset.reset: earliest
        enable.auto.commit: false
    upload-request:
      topic: ${kafka.internal.topic.prefix}mppw.upload.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-upload
        auto.offset.reset: earliest
        enable.auto.commit: false
    delta-apply-request:
      topic: ${kafka.internal.topic.prefix}mppw.delta.in.rq
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-delta
        auto.offset.reset: earliest
        enable.auto.commit: false
    upload-data:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}podd-adapter-mppw-data
        auto.offset.reset: earliest
        enable.auto.commit: false
  producer:
    tp-result: ${kafka.internal.topic.prefix}mppw.rs
    upload-result: ${kafka.internal.topic.prefix}mppw.upload.rs
    delta-apply-result: ${kafka.internal.topic.prefix}mppw.delta.in.rs
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры конфигурации

  • AGENT_TOPIC_PREFIX - префикс для топиков Агента СМЭВ4, например.

2.2.7.2.14. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9843}

Параметры конфигурации

  • port - порт для метрик, например METRICS_PORT:9843.

2.2.7.2.15. Секция jet-connector

Секция jet-connector предназначена для оптимизации задержек записи данных.

Например:

jet-connector:
use: ${JET_CONNECTOR_USE:false}

Параметры настроек

  • use - флаг активации jet-connector, например {JET_CONNECTOR_USE:false};

Таблица 2.14 Область применения

Режим/СУБД

ADB

ADP

ADQM

ADG

Чтение

Нет

Нет

Нет

Нет

Запись

В перспективе

Да

Нет

Нет

Чтобы воспользоваться jet-connector требуется вместо upload external table создавать readable external table, указывающую на топик, как отражено в документации Prostore

В модуль MPPW не передается информация о том, в какую БД физически будут загружаться данные, синтаксис Prostore един для всех поддерживаемых СУБД. Конкретная СУБД указывается в настройках Prostore.

Даже если загрузка данных выполняется в более чем одну базу, на работе адаптеров это не сказывается.

При формировании запросов в табличными параметрами, в том числе при регистрации РЗ, необходимо явно перечислять поля таблиц, по которым будет выполняться фильтрация записей или объединение таблиц.

Переключение с jet-connector на kafka postgres writer и наоборот допускается при завершенных операциях загрузки данных.

Предупреждение

jet-connector в настоящее время применим для ADP, что делает его применимым, только для иснталляций одной единственной СУБД ADP. Это ограничение остается на уровне документации при использовании jet-connector с другими базами должна появиться ошибка.

2.2.8. Настройка СМЭВ4-адаптера – Модуль импорта данных табличных параметров

2.2.8.1. Конфигурация модуля СМЭВ4-адаптер - Модуль импорта данных табличных параметров (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.

2.2.8.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${HTTP_PORT:8091}

environment:
  name: ${ENVIRONMENT_NAME:test}

zookeeper:
  # Подключение к зукипер
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost:2181}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

prostore:
  key:
    primary: tmp_id
    type: BIGINT
  standalone:
    source: ${PS_STANDALONE_SOURCE:ADP}


# общие настройки подключения к Kafka
kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  # параметры консьюмера сообщений
  consumer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
    # Смещение при первом запуске приложения
    auto.offset.reset: earliest
  # параметры продюсера сообщений
  producer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
  # параметры клиента администратора для удаления временных топиков
  admin:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}

# блок настроек импорта данных табличных параметров
query:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # топик запросов
  request-topic: ${kafka.internal.topic.prefix}tp.upload.query
  # топик запросов на исполнение после загрузки данных
  response-topic: ${kafka.external.topic.prefix}query.rq
  # топик с ошибками
  error-topic: ${kafka.external.topic.prefix}query.err
  # блок настроек отмены запросов
  cancel:
    # топик запросов на отмену исполнения
    request-topic: ${kafka.external.topic.prefix}cancel.rq
    # настройки кеша отмененных запросов
    cache:
      # начальный размер кеша
      initial-capacity: 10000
      # время вытеснения из кеша
      expire-after-access: 60m
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${kafka.max-concurrent-handle}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${kafka.commit-interval}
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    group.id: ${kafka.internal.topic.prefix}import.tp.query.consumer
  # дополнительные параметры продюсера ответов
  producer-properties:
    bootstrap.servers: ${kafka.external.bootstrap.servers}
  # дополнительные параметры администрирования кафки
  admin-properties: [ ]

# блок настроек сервиса загрузки данных mppw
mppw:
  # топик запросов к сервису mppw
  request-topic: ${kafka.internal.topic.prefix}mppw.tp
  # топик ответов от сервиса mppw
  response-topic: ${kafka.internal.topic.prefix}mppw.rs
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${kafka.max-concurrent-handle}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${kafka.commit-interval}
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    group.id: ${kafka.internal.topic.prefix}import.tp.response.consumer
    # Смещение при первом запуске приложения
    auto.offset.reset: earliest
  # дополнительные параметры продюсера ответов
  producer-properties: [ ]

# блок настроек механизма очистки
delete:
  # входящий топик запросов удаления ресурсов
  request-topic: ${kafka.internal.topic.prefix}tp.delete.tmp
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${kafka.max-concurrent-handle}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${kafka.commit-interval}
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    group.id: ${kafka.internal.topic.prefix}import.tp.delete.consumer

# блок настроек дельт
delta:
  # префикс топиков с данными
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # признак необходимости удаления топиков
  delete-topics: ${IMPORT_DELTA_DELETE_TOPICS:true}
  # дополнительные параметры администрирования кафки
  admin-properties: [ ]
  # блок параметров поставщика данных
  provider:
    # топик запросов
    request-topic: ${kafka.internal.topic.prefix}tp.upload.delta
    # топик ответов
    response-topic: ${kafka.internal.topic.prefix}delta.rq
    # топик ошибок
    error-topic: ${kafka.internal.topic.prefix}tp.upload.err
    # максимальное количество обработчиков входящих запросов
    max-concurrent-handle: ${kafka.max-concurrent-handle}
    # периодичность фиксации оффсета обработанных сообщений
    commit-interval: ${kafka.commit-interval}
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      group.id: ${kafka.internal.topic.prefix}import.tp.delta.consumer
    # дополнительные параметры продюсера ответов
    producer-properties: [ ]
  # блок параметров получателя данных
  recipient:
    # топик запросов
    request-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
    # топик ответов
    response-topic: ${kafka.internal.topic.prefix}delta.in
    # топик ошибок
    error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
    # максимальное количество обработчиков входящих запросов
    max-concurrent-handle: ${kafka.max-concurrent-handle}
    # периодичность фиксации оффсета обработанных сообщений
    commit-interval: ${kafka.commit-interval}
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      group.id: ${kafka.internal.topic.prefix}import.tp.delta.in.consumer
    # дополнительные параметры продъюсера ответов
    producer-properties: [ ]

metrics:
  # Порт сервера для получения метрик
  port: ${METRICS_PORT:19843}
  kafkaAdminClientName: kafkaAdminClient

2.2.8.2. Параметры конфигурации

Настройка конфигурации СМЭВ4-адаптера - Модуль импорта данных табличных параметров осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт веб-сервера;

  • environment - название окружения (test, prod и т.д.);

  • zookeeper – строка подключения к сервисной БД Zookeeper;

  • prostore-api-client - блок параметров конфигурирования взаимодействия с Prostore;

  • prostore - указываются настройки генерации на создание и удаление writable table;

  • kafka - общие настройки подключения к Kafka;

  • query - блок настроек импорта данных табличных параметров;

  • mppw - блок настроек сервиса загрузки данных mppw;

  • delete - блок настроек механизма очистки;

  • delta - настройка работы с импортом дельт;

  • metrics - настройка получения метрик.

2.2.8.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http:
  port: ${HTTP_PORT:8091}

Параметры настроек

  • port - указывается порт веб-сервера, например: HTTP_PORT:8091.

2.2.8.2.2. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod).

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - среда разработки, например ENVIRONMENT_NAME:test.

2.2.8.2.3. Секция zookeeper

Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.

Например:

zookeeper:
  # Подключение к зукипер
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost:2181}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connection-string - подключение к Zookeeper DS, например ZOOKEEPER:t5-adsp-01.ru-central1.internal:2181;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.8.2.4. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:localhost;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.8.2.5. Секция prostore

В секции prostore указываются настройки генерации на создание и удаление writable table.

Например:

prostore:
  key:
    primary: tmp_id
    type: BIGINT
  standalone:
    source: ${PS_STANDALONE_SOURCE:ADP}

Параметры настроек

  • primary - название первичного ключа, например tmp_id;

  • type - тип первичного ключа, например BIGINT;

  • source - источник для standalone таблицы (ADB/ADP), например PS_STANDALONE_SOURCE:ADP.

2.2.8.2.6. Секция kafka

Секция kafka хранит общие настройки подключения к Kafka.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  # параметры консьюмера сообщений
  consumer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
    # Смещение при первом запуске приложения
    auto.offset.reset: earliest
  # параметры продюсера сообщений
  producer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
  # параметры клиента администратора для удаления временных топиков
  admin:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры настроек

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов;

  • commit-interval - периодичность фиксации оффсета обработанных сообщений;

  • group.id - GroupId для подписчика;

  • auto.offset.reset - смещение при первом запуске приложения;

  • enable.auto.commit- Вкл/выкл автоматический коммит;

  • consumer - параметры консьюмера сообщений;

  • producer – параметры продюсера сообщений.

2.2.8.2.7. Секция query

Секция query хранит блок настроек импорта данных табличных параметров.

Например:

query:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # топик запросов
  request-topic: ${kafka.internal.topic.prefix}tp.upload.query
  # топик запросов на исполнение после загрузки данных
  response-topic: ${kafka.external.topic.prefix}query.rq
  # топик с ошибками
  error-topic: ${kafka.external.topic.prefix}query.err
  # блок настроек отмены запросов
  cancel:
    # топик запросов на отмену исполнения
    request-topic: ${kafka.external.topic.prefix}cancel.rq
    # настройки кеша отмененных запросов
    cache:
      # начальный размер кеша
      initial-capacity: 10000
      # время вытеснения из кеша
      expire-after-access: 60m
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${kafka.max-concurrent-handle}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${kafka.commit-interval}
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    group.id: ${kafka.internal.topic.prefix}import.tp.query.consumer
  # дополнительные параметры продюсера ответов
  producer-properties:
    bootstrap.servers: ${kafka.external.bootstrap.servers}
  # дополнительные параметры администрирования кафки
  admin-properties: [ ]

Параметры настроек

  • request-topic - топик запросов;

  • response-topic - топик запросов на исполнение после загрузки данных;

  • error-topic - топик с ошибками;

  • cancel- блок настроек отмены запросов;

  • initial-capacity - начальный размер кеша;

  • expire-after-access - время вытеснения из кеша;

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов;

  • commit-interval - периодичность фиксации оффсета обработанных сообщений;

  • consumer-properties - дополнительные параметры консьюмера запросов;

  • producer-properties - дополнительные параметры продюсера ответов;

  • admin-properties - дополнительные параметры администрирования Kafka.

2.2.8.2.8. Секция mppw

Секция mppw хранит блок настроек сервиса загрузки данных MPPW.

mppw:
  # топик запросов к сервису mppw
  request-topic: ${kafka.internal.topic.prefix}mppw.tp
  # топик ответов от сервиса mppw
  response-topic: ${kafka.internal.topic.prefix}mppw.rs
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${kafka.max-concurrent-handle}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${kafka.commit-interval}
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    group.id: ${kafka.internal.topic.prefix}import.tp.response.consumer
    # Смещение при первом запуске приложения
    auto.offset.reset: earliest
  # дополнительные параметры продюсера ответов
  producer-properties: [ ]

Параметры настроек

  • request-topic - топик запросов к сервису MPPW;

  • response-topic - топик ответов от сервиса MPPW;

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов;

  • commit-interval- периодичность фиксации оффсета обработанных сообщений;

  • consumer-properties - дополнительные параметры консьюмера запросов;

  • producer-properties - дополнительные параметры продюсера ответов.

2.2.8.2.9. Секция delete

Секция delete хранит блок настроек механизма очистки.

Например:

delete:
  # входящий топик запросов удаления ресурсов
  request-topic: ${kafka.internal.topic.prefix}tp.delete.tmp
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${kafka.max-concurrent-handle}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${kafka.commit-interval}
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    group.id: ${kafka.internal.topic.prefix}import.tp.delete.consumer

Параметры настроек

  • request-topic - топик запросов к сервису MPPW;

  • response-topic - топик ответов от сервиса MPPW;

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов;

  • commit-interval- периодичность фиксации оффсета обработанных сообщений;

  • consumer-properties - дополнительные параметры консьюмера запросов.

2.2.8.2.10. Секция delta

Секция delta предназначена для настройки дельт.

Например:

delta:
  # префикс топиков с данными
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # признак необходимости удаления топиков
  delete-topics: ${IMPORT_DELTA_DELETE_TOPICS:true}
  # дополнительные параметры администрирования кафки
  admin-properties: [ ]
  # блок параметров поставщика данных
  provider:
    # топик запросов
    request-topic: ${kafka.internal.topic.prefix}tp.upload.delta
    # топик ответов
    response-topic: ${kafka.internal.topic.prefix}delta.rq
    # топик ошибок
    error-topic: ${kafka.internal.topic.prefix}tp.upload.err
    # максимальное количество обработчиков входящих запросов
    max-concurrent-handle: ${kafka.max-concurrent-handle}
    # периодичность фиксации оффсета обработанных сообщений
    commit-interval: ${kafka.commit-interval}
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      group.id: ${kafka.internal.topic.prefix}import.tp.delta.consumer
    # дополнительные параметры продюсера ответов
    producer-properties: [ ]
  # блок параметров получателя данных
  recipient:
    # топик запросов
    request-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
    # топик ответов
    response-topic: ${kafka.internal.topic.prefix}delta.in
    # топик ошибок
    error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
    # максимальное количество обработчиков входящих запросов
    max-concurrent-handle: ${kafka.max-concurrent-handle}
    # периодичность фиксации оффсета обработанных сообщений
    commit-interval: ${kafka.commit-interval}
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      group.id: ${kafka.internal.topic.prefix}import.tp.delta.in.consumer
    # дополнительные параметры продюсера ответов
    producer-properties: [ ]

Параметры настроек

  • data-topic-prefix - префикс топиков с данными;

  • delete-topics - признак необходимости удаления топиков;

  • admin-properties - дополнительные параметры администрирования Kafka;

  • provider - блок параметров поставщика данных;

  • recipient - блок параметров получателя данных;

  • request-topic - топик запросов;

  • response-topic - топик запросов на исполнение после загрузки данных;

  • error-topic - топик с ошибками;

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов;

  • commit-interval - периодичность фиксации оффсета обработанных сообщений;

  • consumer-properties - дополнительные параметры консьюмера запросов;

  • producer-properties - дополнительные параметры продюсера ответов.

2.2.8.2.11. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  # Порт сервера для получения метрик
  port: ${METRICS_PORT:9843}
  kafkaAdminClientName: kafkaAdminClient

Параметры настроек

  • port - порт для метрик, например METRICS_PORT:9843.

2.2.9. Настройка СМЭВ4-адаптера – Модуль группировки данных табличных параметров

2.2.9.1. Конфигурация модуля СМЭВ4-адаптер – Модуль группировки данных табличных параметров (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.

2.2.9.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${HTTP_PORT:8092}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  # параметры консьюмера сообщений
  consumer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
    # Смещение при первом запуске приложения
    auto.offset.reset: earliest
  # параметры продъюсера сообщений
  producer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
  # Параметры администрирования. Используется для health-check
  admin:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}

group:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # Время пересоздания kafka producer, в минутах
  refreshPeriod: ${DATA_PRODUCER_RECREATE_PERIOD:3m}

# блок настроек группировки данных табличных параметров
query:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # топик с данными табличных параметров
  data-topic: ${kafka.external.topic.prefix:}query.tp
  # топик нотификаций на загрузку табличных параметров
  notification-topic: ${kafka.internal.topic.prefix:}tp.upload.query
  # блок настроек отмены запросов
  cancel:
    # топик запросов на отмену исполнения
    request-topic: ${kafka.external.topic.prefix:}cancel.rq
    # настройки кеша отмененных запросов
    cache:
      # начальный размер кеша
      initial-capacity: 10000
      # время вытеснения из кеша
      expire-after-access: 60m
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    bootstrap.servers: ${kafka.external.bootstrap.servers}
    group.id: ${kafka.external.topic.prefix}group.tp.consumer
  # дополнительные параметры продъюсера ответов
  producer-properties:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}

delta:
  table-params:
    # топик с данными табличных параметров
    data-topic: ${kafka.external.topic.prefix}delta.tp
    # топик нотификаций на загрузку табличных параметров
    notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta
    # топик с ошибками обработки
    error-topic: ${kafka.internal.topic.prefix}tp.upload.err
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}delta.tp.consumer
    # дополнительные параметры продъюсера ответов
    producer-properties:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
  result:
    # топик с данными
    data-topic: ${kafka.external.topic.prefix}delta.in.tp
    # топик нотификаций на загрузку табличных параметров
    notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
    # топик с ошибками обработки
    error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}delta.in.tp.consumer
    # дополнительные параметры продъюсера ответов
    producer-properties:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}

environment:
  name: ${ENVIRONMENT_NAME:test}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

metrics:
  # Порт сервера для получения метрик
  port: ${METRICS_PORT:9843}
  kafkaAdminClientName: kafkaAdminClient

2.2.9.2. Параметры конфигурации

Настройка конфигурации СМЭВ4-адаптера – Модуль группировки данных табличных параметров осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • kafkaUrl – адрес сервера Kafka для Агента СМЭВ4;

  • http-server - указывается порт веб-сервера;

  • kafka – настройки сервера Kafka;

  • group - настройка публикации сгруппированных чанков табличных параметров;

  • query - блок настроек группировки данных табличных параметров;

  • delta - указываются настройки группировки дельт;

  • environment - название окружения (test, prod и т.д.);

  • zookeeper - указываются настройки подключения к Zookeeper;

  • metrics – настройка получения метрик.

2.2.9.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http:
  port: ${HTTP_PORT:8092}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:8092.

2.2.9.2.2. Секция kafka

Секция kafka предназначена для настройки сервера Kafka.

Например:

kafka:
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  # параметры консьюмера сообщений
  consumer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
    # Смещение при первом запуске приложения
    auto.offset.reset: earliest
  # параметры продюсера сообщений
  producer:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}
  # Параметры администрирования. Используется для health-check
  admin:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры настроек

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов, например {KAFKA_MAX_CONCURRENT_HANDLE:1000};

  • commit-interval - периодичность фиксации оффсета обработанных сообщений, например {KAFKA_COMMIT_INTERVAL:5s};

  • eventLoopPool - размер пула event loop. например VERTX_POOL_EVENTLOOPPOOL:10;

  • internal - настройка количества определяется адрес сервера Kafka и префикс топика;

  • consumer - параметры потребителя сообщений;

  • producer - параметры поставщика сообщений.

2.2.9.2.3. Секция group

Секция group отвечает за публикацию сгруппированных чанков табличных параметров.

group:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # Время пересоздания kafka producer, в минутах
  refreshPeriod: ${DATA_PRODUCER_RECREATE_PERIOD:3m}

Параметры настроек

  • refreshPeriod - Время пересоздания kafka producer, в минутах.

2.2.9.2.4. Секция query

Секция query предназначена для настроек группировки данных табличных параметров.

Например:

query:
  data-topic-prefix: ${DATA_TOPIC_PREFIX:tp.data}
  # топик с данными табличных параметров
  data-topic: ${kafka.external.topic.prefix:}query.tp
  # топик нотификаций на загрузку табличных параметров
  notification-topic: ${kafka.internal.topic.prefix:}tp.upload.query
  # блок настроек отмены запросов
  cancel:
    # топик запросов на отмену исполнения
    request-topic: ${kafka.external.topic.prefix:}cancel.rq
    # настройки кеша отмененных запросов
    cache:
      # начальный размер кеша
      initial-capacity: 10000
      # время вытеснения из кеша
      expire-after-access: 60m
  # дополнительные параметры консьюмера запросов
  consumer-properties:
    bootstrap.servers: ${kafka.external.bootstrap.servers}
    group.id: ${kafka.external.topic.prefix}group.tp.consumer
  # дополнительные параметры продъюсера ответов
  producer-properties:
    bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры настроек

  • data-topic - топик с данными табличных параметров;

  • notification-topic - топик нотификаций на загрузку табличных параметров;

  • cancel - блок настроек отмены запросов;

  • request-topic - Время пересоздания kafka producer, в минутах;

  • cache - настройки кеша отмененных запросов;

  • initial-capacity – начальный размер кеша;

  • expire-after-access - время вытеснения из кеша;

  • consumer-properties - дополнительные параметры потребителя запросов;

  • producer-properties - дополнительные параметры поставщика ответов.

2.2.9.2.5. Секция delta

В секции delta указываются настройки группировки дельт.

Например:

delta:
  table-params:
    # топик с данными табличных параметров
    data-topic: ${kafka.external.topic.prefix}delta.tp
    # топик нотификаций на загрузку табличных параметров
    notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta
    # топик с ошибками обработки
    error-topic: ${kafka.internal.topic.prefix}tp.upload.err
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}delta.tp.consumer
    # дополнительные параметры продьюсера ответов
    producer-properties:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
  result:
    # топик с данными
    data-topic: ${kafka.external.topic.prefix}delta.in.tp
    # топик нотификаций на загрузку табличных параметров
    notification-topic: ${kafka.internal.topic.prefix}tp.upload.delta.in
    # топик с ошибками обработки
    error-topic: ${kafka.internal.topic.prefix}tp.upload.in.err
    # дополнительные параметры консьюмера запросов
    consumer-properties:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}delta.in.tp.consumer
    # дополнительные параметры продъюсера ответов
    producer-properties:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры настроек

  • data-topic - топик с данными табличных параметров;

  • notification-topic - топик нотификаций на загрузку табличных параметров;

  • error-topic - топик с ошибками обработки;

  • consumer-properties - дополнительные параметры потребителя запросов;

  • producer-properties - дополнительные параметры поставщика ответов.

2.2.9.2.6. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod).

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - среда разработки, например ENVIRONMENT_NAME:test.

2.2.9.2.7. Секция zookeeper

Секция zookeeper предназначена для настройки параметров подключения к серверу Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connection-string - подключение к Zookeeper DS, например ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.9.2.8. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  # Порт сервера для получения метрик
  port: ${METRICS_PORT:9843}
  kafkaAdminClientName: kafkaAdminClient

Параметры настроек

  • port - порт для метрик, например METRICS_PORT:9843.

2.2.10. Настройка СМЭВ4-адаптера – Модуль дефрагментации чанков табличных параметров

2.2.10.1. Конфигурация модуля СМЭВ-адаптер - Модуль дефрагментации чанков табличных параметров (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля.

2.2.10.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

application:
  path: ${APPLICATION_PATH:/var/lib/podd-avro-defragmentator}
  destination_chunk_max_record_count: ${APPLICATION_DESTINATION_CHUNK_MAX_RECORD_COUNT:500}
  request_life_time: 24
  garbage_period: 24
  zookeeper:
    connectionString: ${APPLICATION_ZOOKEEPER_CONNECTIONSTRING:localhost}
    sessionTimeoutMs: ${APPLICATION_ZOOKEEPER_SESSIONTIMEOUTMS:30000}
    connectionTimeoutMs: ${APPLICATION_ZOOKEEPER_CONNECTIONTIMEOUTMS:86400000}
    chroot: ${APPLICATION_ZOOKEEPER_CHROOT:/adapter}

environment:
  name: ${ENVIRONMENT_NAME:test}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    bootstrap-servers: ${kafka.external.bootstrap.servers}
    group-id: ${KAFKA_CONSUMER_GROUPID:defragmentator-consumer}
    topic: ${kafka.external.topic.prefix}query.tp.bin
  producer:
    bootstrap-servers: ${kafka.external.bootstrap.servers}
    topic: ${kafka.external.topic.prefix}query.tp

logging:
  level:
    ru.itone.datamart: ${LOGGING_LEVEL_RUITONEDATAMART:debug}

metrics:
  port: ${METRICS_PORT:9837}

2.2.10.2. Параметры конфигурации

Настройка конфигурации СМЭВ-адаптера - Модуль дефрагментации чанков табличных параметров осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • application - настройка модуля в части указания топиков взаимодействия и размера обрабатываемых данных;

  • environment - указывается название окружения (test, prod и т.д.);

  • kafka - настройка подключения к серверу Kafka для Поставщика и Получателя данных;

  • logging - настройка параметров логирования модуля;

  • metrics - настройка получения метрик.

2.2.10.2.1. Секция application

Секция application предназначена для настройки СМЭВ-адаптера - Модуль дефрагментации чанков табличных параметров в части указания топиков взаимодействия и размера обрабатываемых данных.

Например:

application:
  path: ${APPLICATION_PATH:/var/lib/podd-avro-defragmentator}
  destination_chunk_max_record_count: ${APPLICATION_DESTINATION_CHUNK_MAX_RECORD_COUNT:500}
  request_life_time: 24
  garbage_period: 24
  zookeeper:
    connectionString: ${APPLICATION_ZOOKEEPER_CONNECTIONSTRING:localhost}
    sessionTimeoutMs: ${APPLICATION_ZOOKEEPER_SESSIONTIMEOUTMS:30000}
    connectionTimeoutMs: ${APPLICATION_ZOOKEEPER_CONNECTIONTIMEOUTMS:86400000}
    chroot: ${APPLICATION_ZOOKEEPER_CHROOT:/adapter}

Параметры настроек

  • path – рабочая папка на локальном диске, в которой будут создаваться подпапки для сохранения чанков, например APPLICATION_PATH:/var/lib/podd-avro-defragmentator;

  • destination_chunk_max_record_count - максимальное количество строк в сообщении для destination_topic, например APPLICATION_DESTINATION_CHUNK_MAX_RECORD_COUNT:500;

  • request_life_time - время жизни запроса, пока идет сборка;

  • garbage_period - время жизни отдельных, несобранных порций данных;

  • connectionString - строка подключения к zookeeper, например APPLICATION_ZOOKEEPER_CONNECTIONSTRING:localhost;

  • sessionTimeoutMs - таймаут сессии, например APPLICATION_ZOOKEEPER_SESSIONTIMEOUTMS:30000;

  • connectionTimeoutMs - таймаут подключения, например APPLICATION_ZOOKEEPER_CONNECTIONTIMEOUTMS:86400000;

  • chroot - путь до каталога сохранения в ZK, например APPLICATION_ZOOKEEPER_CHROOT:/test.

2.2.10.2.2. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod)

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - среда разработки, например ENVIRONMENT_NAME:test.

2.2.10.2.3. Секция kafka

Секция kafka предназначена для настройки модуля в части указания адреса сервера Kafka для Поставщика данных (producer) и Получателя данных (consumer).

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    bootstrap-servers: ${kafka.external.bootstrap.servers}
    group-id: ${KAFKA_CONSUMER_GROUPID:defragmentator-consumer}
    topic: ${kafka.external.topic.prefix}query.tp.bin
  producer:
    bootstrap-servers: ${kafka.external.bootstrap.servers}
    topic: ${kafka.external.topic.prefix}query.tp

Параметры настроек

  • consumer - настройка адреса сервера Kafka для Получателя данных;

  • bootstrap-servers - адрес кафки для консьюмеров, например KAFKA_CONSUMER_BOOTSTRAPSERVERS:localhost:9092;

  • group-id - группа для консьюмеров;

  • producer - настройка адреса сервера Kafka для Поставщика данных;

  • bootstrap-servers - адрес кафки для продюсеров, например KAFKA_PRODUCER_BOOTSTRAPSERVERS:localhost:9092.

2.2.10.2.4. Секция logging

Секция logging предназначена для настройки параметров логирования.

Например:

logging:
  level:
    ru.itone.datamart: ${LOGGING_LEVEL_RUITONEDATAMART:debug}
2.2.10.2.5. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - порт для метрик, например METRICS_PORT:9837.

2.2.11. Настройка Модуля группировки чанков

2.2.11.1. Конфигурация Модуля группировки чанков репликации (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором описаны подключение к сервису Kafka, порт веб-сервера, и настройки журналирования запросов и ответов.

2.2.11.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${HTTP_PORT:8084}

spring:
  liquibase:
    enabled: ${LIQUIBASE_ENABLED:true} # Для storage.type=kafka необходимо выключить
    change-log: classpath:/liquibase-changes/changelog.xml
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://${storage.postgres.connection.host}:${storage.postgres.connection.port}/${storage.postgres.connection.database}?currentSchema=${storage.postgres.connection.schema}
    user: ${storage.postgres.connection.user}
    password: ${storage.postgres.connection.password}

storage:
  type: ${STORAGE_TYPE:postgres} # тип, postgres|kafka
  postgres: # параметры подключения к базе. Используется только при type=postgres
    connection:
      database: ${STORAGE_DATABASE:replication}
      schema: ${STORAGE_SCHEMA:public}
      host: ${STORAGE_HOST:localhost}
      port: ${STORAGE_PORT:5432}
      user: ${STORAGE_USER:postgres}
      password: ${STORAGE_PASSWORD:postgres}
    pool:
      max-size: ${STORAGE_POOL_SIZE:30}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  # максимальное количество обработчиков входящих запросов
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
  # периодичность фиксации оффсета обработанных сообщений
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    delta-apply-request: ${kafka.external.topic.prefix}delta.in.rq
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}podd-adapter-group-repl
      auto.offset.reset: earliest
      enable.auto.commit: false
  producer:
    refresh-interval: 60s
    delta-apply-notification: ${kafka.internal.topic.prefix}subscription.in
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}

environment:
  name: ${ENVIRONMENT_NAME:test}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

logging:
  scl.delta:
      enabled: ${SCL_DELTA_ENABLED:false}

metrics:
  port: ${METRICS_PORT:9837}

2.2.11.2. Параметры конфигурации

Настройка конфигурации Модуля группировки чанков репликации осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт веб-сервера.

  • storage - блок настроек хранения чанков данных репликации. При изменении параметров необходимо синхронизировать аналогичные параметры в сервисе MPPW.

  • kafka - настройки параметров подключения к шине данных Apache Kafka.

  • logging - настройки журналирования запросов и ответов.

  • metrics - настройка порта для получения метрик.

2.2.11.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http-server:
  port: ${HTTP_PORT:8084}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:8084.

2.2.11.2.2. Секция storage

В секции storage указываются настройки хранения чанков данных репликации.

ри изменении параметров необходимо синхронизировать аналогичные параметры в сервисе MPPW.

Например:

storage:
  type: ${STORAGE_TYPE:postgres}
  postgres:
    connection:
      database: ${STORAGE_DATABASE:replication}
      schema: ${STORAGE_SCHEMA:public}
      host: ${STORAGE_HOST:localhost}
      port: ${STORAGE_PORT:5432}
      user: ${STORAGE_USER:postgres}
      password: ${STORAGE_PASSWORD:postgres}
    pool:
      max-size: ${STORAGE_POOL_SIZE:30}

Параметры настроек

  • type - тип, postgres|kafka, например: STORAGE_TYPE:postgres;

  • connection - параметры подключения к базе.

2.2.11.2.3. Секция kafka

Секция kafka определяет настройки взаимодействия через СМЭВ4-адаптер между Поставщиком данных (producer) и Получателем данных (consumer).

Здесь же задаются настройки параметров подключения к шине данных Apache Kafka.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
      bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
      topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
      bootstrap.servers: ${PS_KAFKA:localhost:9092}
      topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    delta-apply-request: ${kafka.external.topic.prefix}delta.in.rq
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}podd-adapter-group-repl
      auto.offset.reset: earliest
      enable.auto.commit: false
  producer:
    refresh-interval: 60s
    delta-apply-notification: ${kafka.internal.topic.prefix}subscription.in
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры конфигурации

  • topic - префикс для топиков агента СМЭВ4, например AGENT_TOPIC_PREFIX;

  • max-concurrent-handle - максимальное количество обработчиков входящих запросов, например KAFKA_MAX_CONCURRENT_HANDLE:100;

  • commit-interval - периодичность фиксации оффсета обработанных сообщений, например KAFKA_COMMIT_INTERVAL:5s.

2.2.11.2.4. Секция environment

В секции environment выбирается среда разработки (например, значение test, prod и т.д).

Например:

environment:
        name: ${ENVIRONMENT_NAME:test}

Параметры конфигурации

  • name - название окружения, например ENVIRONMENT_NAME:test.

2.2.11.2.5. Секция zookeeper

В секции zookeeper настраиваются параметры подключения к Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connection-string - Подключение к Zookeeper DS, например ZZOOKEEPER_DS_ADDRESS:localhost;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.11.2.6. Секция logging

Секция logging предназначена для настройки журналирования запросов и ответов.

Например:

logging:
scl.delta:
    enabled: ${SCL_DELTA_ENABLED:false}

Параметры конфигурации

  • enabled - Журналировать события SCL delta, например: SCL_DELTA_ENABLED:false.

LOG_FORMAT - Логирование в формате (JSON/TEXT) - указывается в logback.xml.

2.2.11.2.7. Секция metrics

Секция metrics предназначена для настроек порта получения метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - Порт для получения метрик, например {METRICS_PORT:9837}.

2.2.12. Настройка DATA-Uploader – Модуль исполнения асинхронных заданий

2.2.12.1. Конфигурация модуля DATA-Uploader (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: обеспечение обработки очереди файлов, настройка подключения к ядру витрины (секция: prostore), а также другие настройки необходимые для корректной работы модуля.

2.2.12.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${SERVER_PORT:8082}

persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, zookeeper

prostore-rest-client:
  persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
  datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
  table-completed-inserts-datamarts: ${PERSISTENCE_COMPLETED_INSERTS_TABLE:data_uploader_completed_inserts_datamarts}
  table-deltas-open: ${PERSISTENCE_OPEN_DELTAS_TABLE:data_uploader_deltas_open}
  # Таблица активных экземляров сервиса data-uploader (используется при persistence-mode: prostore)
  table-data-uploader-health-check: ${PERSISTENCE_HEALTH_CHECK_TABLE:data_uploader_health_check}
  # Имя таблицы с задачами загрузки данных (используется при persistence-mode: prostore)
  table-validation-complete: ${PERSISTENCE_VALIDATION_COMPLETE_TABLE:validation_complete}
  # Имя таблицы хранения статусов запросов (используется при persistence-mode: prostore)
  table-requests-status: ${PERSISTENCE_STATUS_TABLE:status}
  # Имя таблицы хранения данных файлов (используется при persistence-mode: prostore)
  table-files: ${PERSISTENCE_FILES_TABLE:files}
  # Имя таблицы хранения активных экземпляров сервисов
  table-data-uploader-active: ${PERSISTENCE_ACTIVE_TABLE:data_uploader_active}
  health-check-refresh-period-sec: ${HEALTH_CHECK_REFRESH_PERIOD:120}
  health-check-wait-period-sec: ${HEALTH_CHECK_WAIT_PERIOD:300}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9090}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}



redis:
  type: ${REDIS_TYPE:STANDALONE}
  connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
  password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
  max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
  max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
  max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
net-client-options:
   tcp-user-timeout: 30
   idle-timeout: 30

upload:
  concurrency: ${UPLOAD_CONCURRENCY:100} # Общее количество параллельных задач загрузки
  send-concurrency: ${UPLOAD_SEND_CONCURRENCY:10} # Количество параллельных отправок данных в кафку для каждого файла
  poll-interval: ${UPLOAD_POLL_INTERVAL:500ms} # Интервал опроса очереди сообщений на загрузку
  mode: ${UPLOAD_MODE:mppw} # mppw|llw
  llw-batch: ${UPLOAD_LLW_BATCH:1000} # Число записей в одной команде upsert/delete. Используется только при mode=llw
  creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable} # enable|disable|period Используется только при mode=llw
  period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s # Используется только при mode=llw и creating-delta-on-upload-request=period
  check-uniqueness: true # выполнять ли проверку уникальности первичных ключей
  pool:
    size: ${UPLOAD_POOL_SIZE:16}
  retry:
    attempts: 5
    delay: 1m


data-storage:
  compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none  редактируется синхронно для модулей rest-uploader/data-uploader!!!
  type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
  # Директория хранения файлов для типа dir
  dir: ${DATA_STORAGE_DIR:/tmp}
  s3:
    endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
    bucket: ${S3_BUCKET:data} # Имя бакета
    region: ${S3_REGION:}
    access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
    secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3

environment:
  name: ${ENVIRONMENT_NAME:test}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

csv-parser:
  separator: ${CSV_PARSER_SEPARATOR:;}
  quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
  escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
  # Настройка интерпретации значений как null. Допустимые значения:
  #  - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
  #  - EMPTY_QUOTES - пустые кавычки, например ;"";
  #  - BOTH - оба варианта
  #  - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
  field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
  # опция позволяет парсить мультистроковые значения

active:
  timeout: ${ACTIVE_TIMEOUT:60}
  time-to-live: ${ACTIVE_TTL:180}

delta:
  timeout: ${DELTA_TIMEOUT:300}
  row-max-count: ${DELTA_MAX_ROWS:500000}
  chunk-row-max-count: ${DELTA_CHUNK_ROWS:10000}
  chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
  # параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
  open-delay: ${DELTA_OPEN_DELAY:60}s
  # количество попыток открытия дельты в случае ошибки
  open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
  # период проверки открытых дельт
  open-check: ${DELTA_OPEN_CHECK:60}s
  # количество попыток фиксации дельты в случае ошибки
  commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
  # период ожидания перед повторной попыткой фиксации дельты
  commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
  # количество попыток отката дельты в случае ошибки
  rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
  # период ожидания перед повторной попыткой отката дельты
  rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s


response:
  time-to-live: ${RESPONSE_TTL:36000}

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  mppw-consumer:
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
      group.id: data.uploader.group
      auto.offset.reset: earliest
      enable.auto.commit: true
  mppw-producer:
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
  data-producer:
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
  data-topic-prefix: ${kafka.internal.topic.prefix}mppw.upload.data
  mppw-upload-rq-topic: ${kafka.internal.topic.prefix}mppw.upload.rq
  mppw-upload-rs-topic: ${kafka.internal.topic.prefix}mppw.upload.rs

metrics:
  port: ${METRICS_PORT:9837}

2.2.12.2. Параметры конфигурации

Настройка конфигурации DATA-Uploader осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт сервера;

  • persistence-mode - настройки хранения данных;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с ProStore.

  • redis - настройка подключения к Redis;

  • upload - указываются настройки параллельной загрузки данных;

  • data-storage - директория хранения файлов для типа dir;

  • environment - определяет значение среды разработки;

  • zookeeper - определяет настройки подключения к Zookeeper;

  • csv-parser - настройка парсера CSV-файлов;

  • active - настройки интервалов между попытками перехода в активное состояние и времени жизни ключа флага активности;

  • delta - настройка обработок загрузок и отправок заданий на загрузку дельт;

  • response - настройка времени хранения ответов по заданию в Redis;

  • kafka - настройка распределений отправки топиков;

  • metrics - настройка получения метрик.

2.2.12.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

server:
  port: ${SERVER_PORT:8081}

Параметры настроек

  • port - порт веб-сервера, например: SERVER_PORT:8081.

2.2.12.2.2. Секция persistence-mode

В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. в случае выбора Prostore автоматически создаются необходимые таблицы.

Например:

persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper

Параметры настроек

  • persistence-mode - настройка хранения данных, например PERSISTENCE_MODE:prostore.

2.2.12.2.3. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.

Например:

prostore-rest-client:
  persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
  datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
  table-completed-inserts-datamarts: ${PERSISTENCE_COMPLETED_INSERTS_TABLE:data_uploader_completed_inserts_datamarts}
  table-deltas-open: ${PERSISTENCE_OPEN_DELTAS_TABLE:data_uploader_deltas_open}
  # Таблица активных экземляров сервиса data-uploader (используется при persistence-mode: prostore)
  table-data-uploader-health-check: ${PERSISTENCE_HEALTH_CHECK_TABLE:data_uploader_health_check}
  # Имя таблицы с задачами загрузки данных (используется при persistence-mode: prostore)
  table-validation-complete: ${PERSISTENCE_VALIDATION_COMPLETE_TABLE:validation_complete}
  # Имя таблицы хранения статусов запросов (используется при persistence-mode: prostore)
  table-requests-status: ${PERSISTENCE_STATUS_TABLE:status}
  # Имя таблицы хранения данных файлов (используется при persistence-mode: prostore)
  table-files: ${PERSISTENCE_FILES_TABLE:files}
  # Имя таблицы хранения активных экземпляров сервисов
  table-data-uploader-active: ${PERSISTENCE_ACTIVE_TABLE:data_uploader_active}
  health-check-refresh-period-sec: ${HEALTH_CHECK_REFRESH_PERIOD:120}
  health-check-wait-period-sec: ${HEALTH_CHECK_WAIT_PERIOD:300}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9090}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • persistence-datamart - датамарт, где будут располагаться таблицы хранения данных, используется при persistence-mode = prostore

  • datasource - источник данных, например PERSISTENCE_DATASOURCE:, по умолчанию пусто, в этом случае берется единственный датасорс из настроек Простора;

  • table-completed-inserts-datamarts - таблица с данными по завершенным запросам добавления данных, например PERSISTENCE_COMPLETED_INSERTS_TABLE:data_uploader_completed_inserts_datamarts;

  • table-deltas-open - таблица с данными по открытым дельтам, например PERSISTENCE_OPEN_DELTAS_TABLE:data_uploader_deltas_open;

  • table-data-uploader-health-check - таблица с heath-check, например PERSISTENCE_HEALTH_CHECK_TABLE:data_uploader_health_check;

  • table-validation-complete - таблица с задачами загрузки данных, напрммер PERSISTENCE_VALIDATION_COMPLETE_TABLE:validation_complete;

  • table-requests-status - таблица хранения статусов запросов. например PERSISTENCE_STATUS_TABLE:status;

  • table-files - таблица хранения данных файлов, например PERSISTENCE_FILES_TABLE:files;

  • table-data-uploader-active - таблица хранения активных экземпляров сервисов, например PERSISTENCE_ACTIVE_TABLE:data_uploader_active;

  • health-check-refresh-period-sec: ${HEALTH_CHECK_REFRESH_PERIOD:120} - период обновления heath-check в секундах, например HEALTH_CHECK_REFRESH_PERIOD:120;

  • health-check-wait-period-sec - период ожидания heath-check в секундах, например HEALTH_CHECK_WAIT_PERIOD:300;

  • host - адрес Prostore, например PS_HOST:t5-prostore-01.ru-central1.internal;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.12.2.4. Секция redis

Секция redis определяет настройки подключения к Redis.

Например:

redis:
  type: ${REDIS_TYPE:STANDALONE}
  connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
  password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
  max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
  max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
  max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
  net-client-options:
    tcp-user-timeout: 30
    idle-timeout: 30

Параметры настроек

  • type - тип подключения к Redis (STANDALONE/CLUSTER), например REDIS_TYPE:STANDALONE;

  • connection-string - указывается список серверов для подключения (перечисление через запятую), например REDIS_CONNECTION_STRING:redis://localhost:6379;

  • password - пароль для подключения, например REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81;

  • max-pool-size - устанавливается максимальный размер пула, например REDIS_MAX_POOL_SIZE:6;

  • max-pool-waiting - устанавливается максимальный размер пула ожидающих команд, например REDIS_MAX_POOL_WAITING:24;

  • max-waiting-handlers - устанавливается максимальный размер ожидающих обработчиков, например REDIS_MAX_WAITING_HANDLERS:32;

  • net-client-options - параметры Redis клиента:

  • tcp-user-timeout - таймаут на соединение;

  • idle-timeout - таймаут ожидания ответа от редиса.

2.2.12.2.5. Секция upload

Секция upload определяет настройки параллельной загрузки данных.

Например:

upload:
  concurrency: ${UPLOAD_CONCURRENCY:100} # Общее количество параллельных задач загрузки
  send-concurrency: ${UPLOAD_SEND_CONCURRENCY:10} # Количество параллельных отправок данных в кафку для каждого файла
  poll-interval: ${UPLOAD_POLL_INTERVAL:500ms} # Интервал опроса очереди сообщений на загрузку
  mode: ${UPLOAD_MODE:mppw} # mppw|llw
  llw-batch: ${UPLOAD_LLW_BATCH:1000} # Число записей в одной команде upsert/delete. Используется только при mode=llw
  creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable} # enable|disable|period Используется только при mode=llw
  period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s # Используется только при mode=llw и creating-delta-on-upload-request=period
  check-uniqueness: true # выполнять ли проверку уникальности первичных ключей
  pool:
    size: ${UPLOAD_POOL_SIZE:16}
  retry:
    attempts: 5
    delay: 1m

Параметры настроек

  • concurrency - общее количество параллельных задач загрузки, например 100;

  • send-concurrency - количество параллельных отправок данных в кафку для каждого файла, например 10;

  • poll-interval - интервал опроса очереди сообщений на загрузку, например 500ms;

  • mode - режим загрузки, например UPLOAD_MODE:mppw;

    возможные значения: mppw / llw;

  • llw-batch - число записей в одной команде upsert/delete, например UPLOAD_LLW_BATCH:1000, используется только при mode=llw;

  • creating-delta-on-upload-request - создание дельты при запросе загрузки, например DELTA_CREATING_MODE:enable, используется только при mode=llw;

    возможные значения: enable/ disable / period;

  • period - период создания дельты при запросе загрузки (в секундах), например CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300, используется только при mode=llw и creating-delta-on-upload-request=period;

  • check-uniqueness - флаг выполнения проверки уникальности первичных ключей;

  • pool/size - размер пула загрузки, например UPLOAD_POOL_SIZE:16;

  • retry - повтор попытки загрузки;

  • attempts - количество попыток;

  • delay - период задержки (в минутах).

2.2.12.2.6. Секция data-storage

В секции data-storage указывается директория хранения файлов для типа dir.

Например:

data-storage:
  compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none  редактируется синхронно для модулей rest-uploader/data-uploader!!!
  type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
  # Директория хранения файлов для типа dir
  dir: ${DATA_STORAGE_DIR:/tmp}
  s3:
    endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
    bucket: ${S3_BUCKET:data} # Имя бакета
    region: ${S3_REGION:}
    access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
    secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3

Параметры настроек

  • compress - настройки сжатия директории хранения файлов, например DATA_STORAGE_COMPRESS:zstd.

Внимание

блок compress редактируется синхронно для модулей rest-uploader/data-uploader

  • type - тип файлов, например DATA_STORAGE_TYPE:dir;

    возможные значения: redis / dir / s3;

  • dir - директория хранения файлов для типа dir, например DATA_STORAGE_DIR:/tmp;

  • s3 - настройки облачного хранилища S3;

  • endpoint - адрес конечной точки, например S3_ENDPOINT:http://127.0.0.1:9000/;

  • bucket - имя бакета, например S3_BUCKET:data

  • region - регион хранилища;

  • access-key - пользователь, под которым происходит взаимодействие с s3, например S3_USER:minioadmin;

  • secret-key- пароль пользователя для взаимодействия с s3, например S3_PASSWORD:minioadmin.

2.2.12.2.7. Секция environment

В секции environment выбирается среда разработки (например, значение test, prod и т.д).

Например:

environment:
        name: ${ENVIRONMENT_NAME:test}

Параметры конфигурации

  • name - название окружения, например ENVIRONMENT_NAME:test.

2.2.12.2.8. Секция zookeeper

В секции zookeeper настраиваются параметры подключения к Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connection-string - Подключение к Zookeeper DS, например ZZOOKEEPER_DS_ADDRESS:localhost;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.12.2.9. Секция csv-parser

Внимание

При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковы в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.

Секция csv-parser - настройка парсинга CSV.

Например:

csv-parser:
  separator: ${CSV_PARSER_SEPARATOR:;}
  quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
  escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
  field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
  multiline-limit: 0

Параметры конфигурации

  • separator - Символ разделителя значений, например CSV_PARSER_SEPARATOR:;;

  • quote-char - символ кавычки, например CSV_PARSER_QUOTE_CHAR:";

  • escape-char - Символ экранирования значений, например CSV_PARSER_ESCAPE_CHAR:';

    Настройка интерпретации значений как null. Допустимые значения:

    • EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;

    • EMPTY_QUOTES - пустые кавычки, например ;»»;

    • BOTH - оба варианта

    • NEITHER - никогда. Пустая строка всегда определяется как пустая строка

  • field-as-null - способ определения null поля, например CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.

  • multiline-limit - параметры парсинга мультистроковых значений.

Внимание

Парсер может зависать если в данных встречаются вложенные неэкранированные кавычки..

  1. Параметр CSV_PARSER_ESCAPE_CHAR работает следующим образом: если символ экранирования и символ кавычки равны ", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например "поле, ""содержащее двойную кавычку""" будет считано как поле, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».

  2. Параметр CSV_PARSER_FIELD_AS_NULL может принимать следующие значения:

    • EMPTY_SEPARATORS - два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].

    • EMPTY_QUOTES - два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].

    • BOTH - оба варианта (см. EMPTY_SEPARATORS и EMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].

    • NEITHER - ни один из вариантов (см. EMPTY_SEPARATORS и EMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].

2.2.12.2.10. Секция active

В секции active настраиваются интервалы между попытками перехода в активное состояние и времени жизни ключа флага активности.

Например:

active:
    timeout: ${ACTIVE_TIMEOUT:60}
    time-to-live: ${ACTIVE_TTL:180}

Параметры настроек

  • timeout - интервал между попытками перехода в активное состояние;

  • time-to-live - время жизни ключа флага активности.

2.2.12.2.11. Секция delta

Секция delta предназначена для указания настройки обработок загрузок и отправок заданий на загрузку дельт.

Например:

delta:
  timeout: ${DELTA_TIMEOUT:300}
  row-max-count: ${DELTA_MAX_ROWS:500000}
  chunk-row-max-count: ${DELTA_CHUNK_ROWS:10000}
  chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
  # параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
  open-delay: ${DELTA_OPEN_DELAY:60}s
  # количество попыток открытия дельты в случае ошибки
  open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
  # период проверки открытых дельт
  open-check: ${DELTA_OPEN_CHECK:60}s
  # количество попыток фиксации дельты в случае ошибки
  commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
  # период ожидания перед повторной попыткой фиксации дельты
  commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
  # количество попыток отката дельты в случае ошибки
  rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
  # период ожидания перед повторной попыткой отката дельты
  rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s

Параметры настроек

  • timeout - максимальный интервал времени между первой считанной записью цикла загрузки и отправкой заданий на загрузку дельт, например DELTA_TIMEOUT:300;

  • row-max-count - максимальное количество обработанных записей для старта отправки заданий на загрузку дельт, например DELTA_CHUNK_ROWS:10000;

  • chunk-row-max-count - количество сообщений в одном чанке, например DELTA_CHUNK_ROWS:10000;

  • chunk-data-max-size - максимальный размер чанка, например DELTA_CHUNK_DATA_SIZE:1048576;

  • open-delay - параметр ожидания (в секундах) перед повторной попыткой открытия дельты в случае ошибки, например DELTA_OPEN_DELAY:60;

  • open-attempts - количество попыток открытия дельты в случае ошибки, например DELTA_OPEN_ATTEMPTS:5;

  • open-check - период проверки открытых дельт (в секундах), например DELTA_OPEN_CHECK:60;

  • commit-attempts - количество попыток фиксации дельты в случае ошибки, например DELTA_COMMIT_ATTEMPTS:5;

  • commit-error-delay - период ожидания перед повторной попыткой фиксации дельты (в секундах), например DELTA_COMMIT_DELAY:1;

  • rollback-attempts - количество попыток отката дельты в случае ошибки, например DELTA_COMMIT_ATTEMPTS:3;

  • rollback-error-delay - период ожидания перед повторной попыткой отката дельты (в секундах), например DELTA_COMMIT_DELAY:5.

2.2.12.2.12. Секция response

Секция response определяет настройка времени хранения ответов по заданию в Redis.

Например:

response:
    time-to-live: ${RESPONSE_TTL:36000}

Параметры настроек

  • time-to-live - Сколько времени Redis будет хранить ответ по заданию (ключ status.<uuid>).

2.2.12.2.13. Секция kafka

Секция kafka позволяет настраивать отправку топиков в заданные модули.

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  mppw-consumer:
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
      group.id: data.uploader.group
      auto.offset.reset: earliest
      enable.auto.commit: true
  mppw-producer:
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
  data-producer:
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
  data-topic-prefix: ${kafka.internal.topic.prefix}mppw.upload.data
  mppw-upload-rq-topic: ${kafka.internal.topic.prefix}mppw.upload.rq
  mppw-upload-rs-topic: ${kafka.internal.topic.prefix}mppw.upload.rs

Параметры настроек

  • data-topic-prefix - префикс топика, куда будут отправляться данные;

  • mppw-upload-rq-topic - топик для отправки заданий на MPPW модуль;

  • mppw-upload-rq-topic - топик, в который будут приходить результаты исполнения заданий MPPW модуля.

2.2.12.2.14. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - порт для метрик, например METRICS_PORT:9837.

2.2.13. Настройка REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников

2.2.13.1. Конфигурация модуля REST-Uploader (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля: асинхронная загрузка данных из источников, настройка подключения к ядру витрины (секция: prostore), а также другие настройки необходимые для корректной работы модуля.

2.2.13.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${SERVER_PORT:8081}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

file-size:
  restriction: ${SEND_FILE_SIZE_RESTRICTION:512}

environment:
  # Название окружения
  name: ${ENVIRONMENT_NAME:test}

data-storage:
  compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none  редактируется синхронно для модулей rest-uploader/data-uploader!!!
  compression-ratio: ${DATA_STORAGE_COMPRESSION_RATIO:4} # допустимый диапазон [-7;22] где -7 самый быстрый, а 22 наибольшее сжатие
  type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
  # Директория хранения файлов для типа dir
  dir: ${DATA_STORAGE_DIR:/tmp}
  s3:
    endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
    region: ${S3_REGION:}
    bucket: ${S3_BUCKET:data} # Имя бакета
    access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
    secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3

conditions:
  # включение ФЛК и поведение при обнаружении ошибок
  mode: warning
  # период хранения журналов ошибок
  save-time: 1d
  # путь хранения журналов ошибок на общем диске:
  save-path: /tmp/rest-uploader/reports
  # путь к хранению правил в Zookeeper
  zookeeper-path: rest-uploader/conditions
  # таймаут обработки запроса. 0 - таймаут отключен
  rest-timeout: 60s
  # период жизни группы
  save_group_time: 1d
  validation:
    # таймаут выполнения асинхронной проверки
    validation-timeout: 1h
    # таймаут получения сообщений из redis
    poll-timeout: 30s
    # количество корутин асинхронной валидации
    max-concurrent-handle: 1
    # размер порции вычитки сообщений из redis
    batch-size: 1
    # признак выполнения проверки кодировки
    charset-check-enabled: true
    # допустимые кодировки для механизма автоопределения
    valid-charsets: [ UTF-8, US-ASCII, TIS-620]
  health-check:
    # период жизни флага активности
    timeout-active: 3m
    # период обновления статуса
    publish-period: 30s

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
  retry-count: 3
  retry-base-sleep-time-ms: 1_000


persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, zookeeper

prostore-rest-client: # требуется синхронно менять в приложениях rest-uploader и data-uploader !!!
  persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
  datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
  table-conditions: ${PERSISTENCE_TABLE_CONDITIONS:rest_uploader_conditions}
  table-ids: ${PERSISTENCE_TABLE_IDS:rest_uploader_ids}
  # Таблица активных экземляров сервиса rest-uploader (используется при persistence-mode: prostore)
  table-rest-uploader-health-check: ${PERSISTENCE_TABLE_HEALTH_CHECK:rest_uploader_health_check}
  # Таблица групп файлов (используется при persistence-mode: prostore)
  table-group-info: ${PERSISTENCE_TABLE_GROUP_INFO:group_info}
  # Таблица данных о файлах в группе (используется при persistence-mode: prostore)
  table-group-content: ${PERSISTENCE_TABLE_GROUP_CONTENT:group_content}
  # Таблица уникальных значений полей в группе (используется при persistence-mode: prostore)
  table-group-uniq: ${PERSISTENCE_TABLE_GROUP_UNIQ:group_uniq}
  # Таблица очереди файлов на ФЛК (используется при persistence-mode: prostore)
  table-validation-queue: ${PERSISTENCE_TABLE_VALIDATION_QUEUE:validation_queue}
  # Таблица очереди файлов на загрузку (используется при persistence-mode: prostore)
  table-validation-complete: ${PERSISTENCE_TABLE_VALIDATION_COMPLETE:validation_complete}
  # Таблица статусов запросов (используется при persistence-mode: prostore)
  table-requests-status: ${PERSISTENCE_TABLE_STATUS:status}
  # Таблица с файлами (используется при persistence-mode: prostore)
  table-files: ${PERSISTENCE_TABLE_FILES:files}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9090}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

response:
  time-to-live: ${RESPONSE_TTL:10h} # Период хранения информации о статусе запроса


control:
  delta:
    # подключение возможности управления дельтами от клиента. Управление дельтами от клиента допускается только при настройках
    # delta-> creating-delta-on-upload-request=disable у модулей data-uploader/podd-adapter-mppw
    enable: ${CONTROL_DELTA_ENABLE:true}


redis:
  type: ${REDIS_TYPE:STANDALONE}
  connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
  password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
  max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
  max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
  max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
  net-client-options:
    tcp-user-timeout: 30
    idle-timeout: 30


auth:
  secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
  enabled: ${AUTH_ENABLED:true}
  access-list-path: rest-uploader/ids

metrics:
  port: ${METRICS_PORT:9837}

# Настройки парсера csv файлов
csv-parser:
  # Символ разделителя значений
  separator: ${CSV_PARSER_SEPARATOR:;}
  # Символ кавычки
  quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
  # Символ экранирования значений
  escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
  # Настройка интерпретации значений как null. Допустимые значения:
  #  - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
  #  - EMPTY_QUOTES - пустые кавычки, например ;"";
  #  - BOTH - оба варианта
  #  - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
  field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}

backup:
  mode: ${BACKUP_MODE:rest} # kafka | rest
  rest:
    uri: ${BACKUP_URI:/backup}
  zk-path: ${REST_UPLOADER_BACKUP_ZK_PATH:/${environment.name}/rest-uploader}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${REST_UPLOADER_BACKUP_GROUP_ID:rest-uploader_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

# Настройки модуля сбора информации о компонентах витрины
component-info:
  enabled: true
  # DataSource Prostore
  datasource: ''
  # Схема Prostore
  datamart: component_info
  # Имя таблицы для записи информации о компоненте
  table-name: component_info
  # Период попыток создания схемы, при неуспехе
  create-table-period: 60s
  # Период публикации health-check
  publish-period: 60s
  # Период после которого компонент считается неактивным при отсутствии health-check
  timeout-active: 300s
  # Список элементов конфига маскируемых при отправке,
  #  если указан узловой элемент, то маскируются все вложенные в него элементы
  secrets:
    - redis.password

2.2.13.2. Параметры конфигурации

Настройка конфигурации REST-uploader осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт сервера;

  • executor - настраивается размер пула для запросов;

  • file-size - настраиваются ограничения на размер загружаемого файла;

  • environment - настройки окружения;

  • data-storage - директория хранения файлов для типа dir;

  • conditions - включение форматно-логического контроля и поведение при обнаружении ошибок;

  • zookeeper - настройки подключения к Zookeeper;

  • persistence-mode - настройки хранения данных;

  • prostore-api-client - блок параметров конфигурирования взаимодействия с Prostore;

  • response - настройка периода хранения информации о статусе запроса;

  • control - подключение возможности управления дельтами от клиента;

  • redis - настройка подключения к Redis;

  • auth- указывается секрет для валидации токенов;

  • metrics - настройка получения метрик;

  • csv-parser - настройка парсинга CSV;

  • backup - настройки бекапирования;

  • component-info - настройки модуля сбора информации о компонентах витрины.

2.2.13.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http-server:
  port: ${SERVER_PORT:8081}

Параметры настроек

  • port - порт веб-сервера, например: SERVER_PORT:8081.

2.2.13.2.2. Секция executor

Секция executor предназначена для указания размера пула для запросов.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

Параметры настроек

  • reader-pool-size - Размер пула для запросов, например EXECUTOR_READER_POOL_SIZE:20

2.2.13.2.3. Секция file-size

В секции file-size можно настраивать ограничения на размер загружаемого файла.

Например:

file-size:
  restriction: ${SEND_FILE_SIZE_RESTRICTION:512}

Параметры настроек

  • file-size-restriction - ограничение на размер загружаемого файла, например SEND_FILE_SIZE_RESTRICTION:512.

2.2.13.2.4. Секция environment

Секция environment предназначена для настройки среды окружения.

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - Название окружения, например ENVIRONMENT_NAME:test.

2.2.13.2.5. Секция data-storage

В секции data-storage указывается директория хранения файлов для типа dir.

Например:

data-storage:
  compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none
  compression-ratio: ${DATA_STORAGE_COMPRESSION_RATIO:4} # допустимый диапазон [-7;22] где -7 самый быстрый, а 22 наибольшее сжатие
  type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
  # Директория хранения файлов для типа dir
  dir: ${DATA_STORAGE_DIR:/tmp}
  s3:
    endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
    bucket: ${S3_BUCKET:data} # Имя бакета
    region: ${S3_REGION:}
    access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
    secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3

Параметры настроек

  • compress - настройки сжатия директории хранения файлов, например DATA_STORAGE_COMPRESS:zstd

Внимание

блок compress редактируется синхронно для модулей rest-uploader/data-uploader

  • type - тип файлов, например DATA_STORAGE_TYPE:dir;

    возможные значения: redis / dir / s3;

  • dir - директория хранения файлов для типа dir, например DATA_STORAGE_DIR:/tmp;

  • s3 - настройки облачного хранилища S3;

  • endpoint - адрес конечной точки, например S3_ENDPOINT:http://127.0.0.1:9000/;

  • bucket - имя бакета, например S3_BUCKET:data

  • region - регион хранилища;

  • access-key - пользователь, под которым происходит взаимодействие с s3, например S3_USER:minioadmin;

  • secret-key- пароль пользователя для взаимодействия с s3, например S3_PASSWORD:minioadmin.

2.2.13.2.6. Секция conditions

В секции conditions - реализована возможность включения форматно-логического контроля и настройки поведения при обнаружении ошибок.

Например:

conditions:
  mode: warning
  save-time: 1d
  save-path: /tmp/rest-uploader/reports
  zookeeper-path: rest-uploader/conditions
  rest-timeout: 60s
  save_group_time: 1d
  validation:
    validation-timeout: 1h
    poll-timeout: 30s
    max-concurrent-handle: 1
    batch-size: 1
    charset-check-enabled: true
  health-check:
    timeout-active: 3m
    publish-period: 30s

Параметры настроек

  • mode - включение ФЛК и поведение при обнаружении ошибок, например warning;

  • save-time - период хранения журналов ошибок, например 1d;

  • save-path - путь хранения журналов ошибок на общем диске, например /tmp/rest-uploader/reports;

  • zookeeper-path - путь к хранению правил в Zookeeper, например rest-uploader/conditions;

  • rest-timeout - таймаут обработки запроса, например 60s, 0 - таймаут отключен;

  • save_group_time - период жизни группы, например 1d;

  • validation-timeout - таймаут выполнения асинхронной проверки, например 1h;

  • poll-timeout - таймаут получения сообщений из redis, например 30s;

  • max-concurrent-handle - количество корутин асинхронной валидации, например 1;

  • batch-size - размер порции вычитки сообщений из redis, например 1;

  • charset-check-enabled - признак выполнения проверки кодировки, например true;

  • timeout-active - период жизни флага активности, например 3m;

  • publish-period - период обновления статуса, например 30s;

Для настройки mode реализованы режимы:

skip_string

  1. При необходимости пропуска строк формируется обновленный файл и сохраняется в queue с прежним ключом, после проверки всего файла;

  2. Подтверждается чтение комплексной записи из stream validation_queue, которая затем удаляется из стрима;

  3. Размещается запись в list с именем validation_complete;

  4. В Redis записывается статус 0 – Буферизирован;

  5. В зависимости от наличия group_id в комплексной записи:

    • при отсутствии group_id – завершается обработка файла;

    • при наличии group_id – обновляется статус в groupContent_[group_id] и выполняется проверка комплектности группы в соответствии с шагами 3-6 Журнал по группе файлов.

warning

  1. Подтверждается чтение комплексной записи из stream validation_queue и удаляется из стрима;

  2. Размещается запись в list с именем validation_complete;

  3. В Redis записывается статус 0- Буферизирован;

  4. В зависимости от наличия group_id в комплексной записи:

    • при отсутствии group_id - завершает обработку файла;

    • при наличии group_id - обновляет статус в groupContent_[group_id] и выполняет проверка комплектности группы в соответствии с шагами 3-6 Журнал по группе файлов.

skip_file/ skip_on_first_error:

  1. Подтверждается чтение комплексной записи из stream validation_queue, которая затем удаляется из стрима;

  2. Удаляется файл из hset queue по ключу;

  3. В Redis записывает статус 7 – Ошибки ФЛК;

  4. В зависимости от наличия group_id в комплексной записи:

    • при отсутствии group_id – завершается обработка файла;

    • при наличии group_id – обновляется статус в groupContent_[group_id] и проверяется комплектность группы в соответствии с шагами 3-6 Журнал по группе файлов.

skip_string_except_last пропускаются строки не прошедшие ФЛК по уникальности кроме последней

  1. При необходимости пропуска строк формируется обновленный файл и сохраняется в queue с прежним ключом, после проверки всего файла;

  2. Подтверждается чтение комплексной записи из stream validation_queue, которая затем удаляется из стрима;

  3. Размещается запись в list с именем validation_complete;

  4. В Redis записывается статус 0 – Буферизирован;

  5. В зависимости от наличия group_id в комплексной записи:

    • при отсутствии group_id – завершается обработка файла;

    • при наличии group_id – обновляется статус в groupContent_[group_id] и выполняется проверка комплектности группы в соответствии с шагами 3-6 Журнал по группе файлов.

2.2.13.2.7. Секция zookeeper

В секции zookeeper указываются параметры настроек к Zookeeper.

Например:

zookeeper:
  connect-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000}
  retry-count: 3
  retry-base-sleep-time-ms: 1_000

Параметры настроек

  • connect-string - Подключение к Zookeeper DS, например ZOOKEEPER_DS_ADDRESS:localhost;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;

  • retry-count - количество попыток подключения, например 3.

2.2.13.2.8. Секция persistence-mode

В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. в случае выбора Prostore автоматически создаются необходимые таблицы.

Например:

persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper

Параметры настроек

  • persistence-mode - настройка хранения данных, например PERSISTENCE_MODE:prostore.

2.2.13.2.9. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.

Например:

prostore-rest-client: # требуется синхронно менять в приложениях rest-uploader и data-uploader !!!
  persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
  datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
  table-conditions: ${PERSISTENCE_TABLE_CONDITIONS:rest_uploader_conditions}
  table-ids: ${PERSISTENCE_TABLE_IDS:rest_uploader_ids}
  # Таблица активных экземляров сервиса rest-uploader (используется при persistence-mode: prostore)
  table-rest-uploader-health-check: ${PERSISTENCE_TABLE_HEALTH_CHECK:rest_uploader_health_check}
  # Таблица групп файлов (используется при persistence-mode: prostore)
  table-group-info: ${PERSISTENCE_TABLE_GROUP_INFO:group_info}
  # Таблица данных о файлах в группе (используется при persistence-mode: prostore)
  table-group-content: ${PERSISTENCE_TABLE_GROUP_CONTENT:group_content}
  # Таблица уникальных значений полей в группе (используется при persistence-mode: prostore)
  table-group-uniq: ${PERSISTENCE_TABLE_GROUP_UNIQ:group_uniq}
  # Таблица очереди файлов на ФЛК (используется при persistence-mode: prostore)
  table-validation-queue: ${PERSISTENCE_TABLE_VALIDATION_QUEUE:validation_queue}
  # Таблица очереди файлов на загрузку (используется при persistence-mode: prostore)
  table-validation-complete: ${PERSISTENCE_TABLE_VALIDATION_COMPLETE:validation_complete}
  # Таблица статусов запросов (используется при persistence-mode: prostore)
  table-requests-status: ${PERSISTENCE_TABLE_STATUS:status}
  # Таблица с файлами (используется при persistence-mode: prostore)
  table-files: ${PERSISTENCE_TABLE_FILES:files}
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9090}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • persistence-datamart - датамарт, где будут располагаться таблицы хранения данных, например PERSISTENCE_DATAMART:persistence. Используется при persistence-mode = prostore.

  • datasource - по умолчанию пусто, в таком случае берется единственный датасорс из настроек Prostore;

  • table-conditions - условия таблиц, например PERSISTENCE_TABLE_CONDITIONS:rest_uploader_conditions;

  • table-ids - настройки идентификаторов таблиц, например PERSISTENCE_TABLE_IDS:rest_uploader_ids;

  • table-rest-uploader-health-check - таблица с heath-check, например PERSISTENCE_TABLE_HEALTH_CHECK:rest_uploader_health_check;

  • table-group-info - таблица групп файлов, например PERSISTENCE_TABLE_GROUP_INFO:group_info;

  • table-group-content - таблица данных о файлах в группе, например PERSISTENCE_TABLE_GROUP_CONTENT:group_content;

  • table-group-uniq - таблица уникальных значений полей в группе, например PERSISTENCE_TABLE_GROUP_UNIQ:group_uniq;

  • table-validation-queue - таблица очереди файлов на ФЛК, например PERSISTENCE_TABLE_VALIDATION_QUEUE:validation_queue;

  • table-validation-complete - таблица очереди файлов на загрузку, например PERSISTENCE_TABLE_VALIDATION_COMPLETE:validation_complete;

  • table-requests-status - таблица хранения статусов запросов. например PERSISTENCE_STATUS_TABLE:status;

  • table-files - таблица хранения данных файлов, например PERSISTENCE_FILES_TABLE:files;

  • host - адрес Prostore, например PS_HOST:t5-prostore-01.ru-central1.internal;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.13.2.10. Секция response

В секции response указывается период хранения информации о статусе запроса.

Например:

response:
  time-to-live: ${RESPONSE_TTL:10h}

Параметры настроек

  • time-to-live - период хранения информации о статусе запроса, например ESPONSE_TTL:10h.

2.2.13.2.11. Секция control

Секция control определяет возможности управления дельтами от клиента. Управление дельтами от клиента допускается только при настройках delta-> creating-delta-on-upload-request=disable у модулей DATA-Uploader и podd-adapter-mppw.

Например:

control:
  delta:
    enable: ${CONTROL_DELTA_ENABLE:true}

Параметры настроек

  • enable - подключение возможности управления дельтами от клиента, например CONTROL_DELTA_ENABLE:true.

2.2.13.2.12. Секция redis

Секция redis определяет настройки подключения к Redis.

Например:

redis:
  type: ${REDIS_TYPE:STANDALONE}
  connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
  password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
  max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
  max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
  max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
  net-client-options:
    tcp-user-timeout: 30
    idle-timeout: 30

Параметры настроек

  • type - тип подключения к Redis (STANDALONE/CLUSTER);

  • connection-string - указывается список серверов для подключения (перечисление через запятую);

  • password - пароль для подключения;

  • max-pool-size - устанавливается максимальный размер пула;

  • max-pool-waiting - устанавливается максимальный размер пула ожидающих команд;

  • max-waiting-handlers - устанавливается максимальный размер ожидающих обработчиков;

  • net-client-options - параметры Redis клиента:

  • tcp-user-timeout - таймаут на соединение;

  • idle-timeout - таймаут ожидания ответа от редиса.

2.2.13.2.13. Секция auth

Секция auth служит для хранения секрета валидации токена.

Например:

auth:
  secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
  enabled: ${AUTH_ENABLED:true}
  access-list-path: rest-uploader/ids

Параметры настроек

  • secret - cекрет для валидации токенов, например AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C;

  • enabled - включение/отключение аутентификации, например AUTH_ENABLED:true;

  • access-list-path - путь к списку доступов, например rest-uploader/ids.

2.2.13.2.14. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.13.2.15. Секция csv-parser

Внимание

При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковы в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.

Секция csv-parser - настройка парсинга CSV.

Например:

csv-parser:
  # Символ разделителя значений
  separator: ${CSV_PARSER_SEPARATOR:;}
  # Символ кавычки
  quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
  # Символ экранирования значений
  escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
  # Настройка интерпретации значений как null. Допустимые значения:
  #  - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
  #  - EMPTY_QUOTES - пустые кавычки, например ;"";
  #  - BOTH - оба варианта
  #  - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
  field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}

Параметры конфигурации

  • separator - Символ разделителя значений, например CSV_PARSER_SEPARATOR:;;

  • quote-char - символ кавычки, например CSV_PARSER_QUOTE_CHAR:";

  • escape-char - Символ экранирования значений, например CSV_PARSER_ESCAPE_CHAR:';

    Настройка интерпретации значений как null. Допустимые значения:

    • EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;

    • EMPTY_QUOTES - пустые кавычки, например ;»»;

    • BOTH - оба варианта

    • NEITHER - никогда. Пустая строка всегда определяется как пустая строка

  • field-as-null - способ определения null поля, например CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS;

  • multiline-limit - параметры парсинга мультистроковых значений.

Внимание

Парсер может зависать если в данных встречаются вложенные неэкранированные кавычки.

  1. Параметр CSV_PARSER_ESCAPE_CHAR работает следующим образом: если символ экранирования и символ кавычки равны ", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например "поле, ""содержащее двойную кавычку""" будет считано как поле, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».

  2. Параметр CSV_PARSER_FIELD_AS_NULL может принимать следующие значения:

    • EMPTY_SEPARATORS - два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].

    • EMPTY_QUOTES - два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].

    • BOTH - оба варианта (см. EMPTY_SEPARATORS и EMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].

    • NEITHER - ни один из вариантов (см. EMPTY_SEPARATORS и EMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].

2.2.13.2.16. Секция backup

Секция backup предназначена для настроек бекапирования модуля.

Например:

backup:
  zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

Параметры настроек

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки забэкапированных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.13.2.17. Секция component-info

В секции component-info указываются настройки модуля сбора информации о компонентах витрины.

Например:

component-info:
  enabled: true
  datasource: ''
  datamart: component_info
  table-name: component_info
  create-table-period: 60s
  publish-period: 60s
  timeout-active: 300s
  secrets:
    - redis.password

Параметры настроек

  • datasource - датасорс из настроек Prostore;

  • datamart - схема Prostore;

  • table-name - имя таблицы для записи информации о компоненте;

  • create-table-period - период попыток создания схемы, в случае не успешного создания;

  • publish-period - период публикации health-check;

  • timeout-active - период, после которого компонент считается неактивным при отсутствии health-check;

  • secrets - список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.

2.2.13.3. Проверка форматно-логического контроля

Проверка форматно-логического контроля включает в себя:

  • обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме;

  • необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме.

Таблица 2.15 Список реализованных проверок

Наименование проверки

Код ошибки

Кирилическое описание

Проверка уникальности

dublicate

Дубликат файла/группы

Проверка парсинга файла

parsingErr

Ошибка парсинга: текст ошибки

Проверка кодирования

encodingErr

Кодировка файла не соответствует кодировке UTF-8

Проверка превышения предельного размера файла (больше 512 Мб)

tooLargeFile

Слишком большой файл

Проверка наличия данных в файле

emptyFile

Пустой файл

Проверка соответствия заголовков инфосхеме

wrongMetadata

Структура файла не соответствует схеме

Проверка соответствия числа столбцов в строке

wrongFieldsCount

Некорректное число столбцов в строке

Проверка соответствия типам полей

wrongFieldType

Значение не соответствует типу требуемый тип

Проверка уникальности полей

nonUniq

Значение не отвечает требованиям уникальности

Проверка регулярных выражений

nonMatchRegex

Значение не соответствует регулярному выражению регулярное выражение

Проверка соответствия условию

nonMatchConstant

Значение не соответствует условию условие

Таймаут валидации

validationTimeout

Истек таймаут валидации файла

2.2.13.3.1. Синхронная проверка ФЛК

Примечание

  • синхронные проверки выполняются вне зависимости от настроек модуля REST-Uploader;

  • синхронные проверки являются блокирующими;

  • ошибки синхронных проверок возвращаются в теле ответа по REST-API.

К синхронным проверкам относятся:

  • проверка соответствия инфосхеме:

    • проверка соответствия имен и количества полей в заголовках;

    • проверка типа данных;

    • проверка экранирования данных: проверка соответствия числа столбцов по каждой строке;

  • проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM при загрузке удаляются начальные байты ef bb bf);

  • проверка размера файла и наличия данных:

    • проверка предельного размера загружаемого файла 512Мб;

    • проверка наличия данных в файле.

2.2.13.3.2. Асинхронная проверка

Примечание

  • асинхронные проверки выполняются в зависимости от настроек модуля;

  • проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля);

  • список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла.

К асинхронным проверкам относятся:

  • проверка уникальности полей:

    • по сочетанию атрибутов (для комплексных ключей);

    • по заданному атрибуту;

  • сравнение значения с константой;

  • соответствие регулярному выражению.

Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов.

2.2.13.3.2.1. Проверка уникальности по одному или по сочетанию полей

Проверка уникальности проводится:

  • в рамках группы файлов, если заданы headers - для проверки в рамках группы обязательно заполнения всех полей:

    • group_id;

    • group_file_num;

    • group_file_count.

  • при проверке в рамках группы значения ключей для проверки уникальности в рамках группы хранится в Redis:

    • по всем файлам в рамках группы при наличии групповых атрибутов

    • по одному файлу, при отсутствии групповых атрибутов

Пример запроса для проверки уникальности по группе файлов:

--проверка по сочетанию полей
fields:
  id:
    uniq: true
    uniq-with: [type,region]
--проверка уникальности по одному полю
  snils:
    match: "/^[-\s\d]{11}$/"
    uniq: true
2.2.13.3.2.2. Проверка соответствия заданному значению
  • проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id;

  • проверка осуществляется для значений каждого поля в соответствии с заданным правилом;

  • проверка соответствия заданному значению включает в себя:

2.2.13.3.2.3. Поведение в случае таймаута валидации

Период выполнения асинхронных проверок определяется конфигурационным параметром validation-timeout и по умолчанию составляет 60 минут.

В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с обогащением отчета о найденных ошибках ошибкой validationTimeout.

В случае возникновения подобной ошибки рекомендуется:

  • проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки;

  • увеличить значение validation-timeout и повторить загрузку данных.

2.2.13.4. Статусная модель

Статус запроса к модулю REST-Uploder можно получить, выполнив запрос с передачей идентификатора запроса GET '/v2/requests/:requestId/status'

В ответ возвращается три поля:

  • code - код статуса;

  • errorMessage - сообщение об ошибке, заполняется лишь в случае ошибочного статуса;

  • description - описание ошибки, заполняется лишь в случае ошибочного статуса.

Пример ответа на запрос статуса

{"code":2,"description":null,"errorMessage":null}
{"code":3,"description":"Успешно обработан","errorMessage":null}
{"code":4,"description":"Ошибка обработки запроса","errorMessage":"ru.itone.dtm.data.uploader.upload.UploadException: ru.itone.dtm.prostore.rest.api.ProstoreRestException: Error executing query [insert into univer.slots select resource_id,slot_id,tag_type,tag_age,available_date,duration,slot_create_ts,slot_update_ts,slot_status,sys_op from univer.slots_upload_ext]: All of the connectors are failed\n\tat"}
{"code":5,"description":"Идентификатор запроса не обнаружен","errorMessage":null}
{"code":7,"description":"Ошибки ФЛК","errorMessage":null}

В свою очередь, идентификатор запроса ранее был получен в ответ от REST-Uploader:

  • POST“/v2/datamarts/{datamart_name}/tables/{table_name}/upload;

  • POST“/v2/datamarts/{datamart_name}/tables/{table_name}/delete.

Таблица 2.16 Статусная модель

Код статуса

Описание статуса

Действия при получении данного статуса

-1

Загрузка данных в буффер

Данный статус клиентскому приложению не возвращается, ответ вернется после того как загружаемые данные будут сохранены приложением REST-Uploader для дальнейшей загрузки.

0

Запрос буфферизирован

Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек.

1

Ожидает открытия дельты

Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек.

2

В обработке (модулем DATA-Uploader)

Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек.

3

Успешно обработан

Дополнительных действий не требуется

4

Ошибка обработки запроса

Необходимо:

  • изучить содержимое вернувшегося поля description

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

    • REST-Uploader

    • DATA-Uploader

    • podd-adapter-mppw

    • query-execution-core

    • используемого коннектора (kafka-postgres-writer или kafka-jet-writer)

5

Идентификатор запроса не обнаружен

Использовать действующий идентификатор запроса

6

Форматно-логический контроль

Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек.

7

Ошибки ФЛК

В процессе ФЛК выявлены ошибки, необходимо запросить отчет ФЛК, обратившись к REST-Uploader c запросом GET '/v2/requests/{request_id}/report/'

Далее проанализировать и устранить выявленные недочеты в загружаемых данных или скорректировать проверки ФЛК.

2.2.13.5. Спецификация модуля асинхронной загрузки данных из сторонних источников

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

Метод

URL

Назначение

POST

v2/datamarts/{datamart_name}/tables/{table_name}/upload

Загрузка данных в витрину с учетом реализации ФЛК

GET

v2/requests/{request_id}/status

Получение статуса запроса

DELETE

v2/datamarts/{datamart_name}/tables/{table_name}/delete

Удаление данных из витрины

POST

v2/conditions/{datamart}/{table}

запрос для загрузки списка правил для таблицы, для сохранения в Zookeeper

PUT

v2/conditions/{datamart}/{table}

запрос для добавления правил для таблицы, для сохранения в Zookeeper

GET

v2/conditions/{datamart}/{table}

запрос для получения списка проверок для таблицы, хранящийся в Zookeer

DELETE

v2/conditions/{datamart}/{table}

запрос для удаления всего списка проверок по таблице

GET

v2/requests/{request_id}/report

Возвращает отчет по форматно логическом контроле загружаемых данных в формате .csv

GET

v2/group/{group_id}/report

Запрос возвращает отчет по комплектности группы загружаемых файлов в формате .csv

openapi: 3.0.1
info:
  title: Rest-uploader
  description: This is a rest-uploader service for datamart filling
  version: 2.0.0
servers:
  - url: 'http://localhost:8081'
paths:
  '/v2/datamarts/{datamart_name}/tables/{table_name}/upload':
    post:
      summary: Add a new data to the datamart
      operationId: post-v2-datamarts-datamart_name-tables-table_name-upload
      parameters:
        - name: datamart_name
          in: path
          required: true
          schema:
            type: string
        - name: table_name
          in: path
          required: true
          schema:
            type: string
        - name: groupId
          in: header
          description: 'идентификатор группы'
          required: false
          schema:
            type: string
        - name: groupFileNum
          in: header
          description: 'номер файла в группе'
          required: false
          schema:
            type: integer
        - name: groupFileCount
          in: header
          description: 'число файлов в группе'
          required: false
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/uploadData'
      responses:
        '200':
          description: successful operation
          headers:
            requestId:
              schema:
                type: string
          content:
            text/plain:
              schema:
                type: string
        '400':
          description: Bad request
          headers:
            requestId:
              schema:
                type: string
          content:
            text/csv:
              schema:
                type: array
                items:
                  type: array
                  items:
                    type: string
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - data
      description: Загрузка данных из внешних источников. К телу прикладывается файл csv
    parameters:
      - schema:
          type: string
        name: datamart_name
        in: path
        required: true
      - schema:
          type: string
        name: table_name
        in: path
        required: true
  '/v2/requests/{request_id}/status':
    get:
      summary: Return request status
      description: Возвращение статуса запроса
      operationId: get-v2-request-request_id-status
      parameters:
        - name: request_id
          in: path
          description: Identifier of request
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation. При ошибочном ответе возвращается код и описание ошибки в соответствии с примером
          content:
            plain/text:
              schema:
                type: string
                example: "code: 4, description: Ошибка обработки запроса, errorMessage: Полный текст ошибки..."
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - data
    parameters:
      - schema:
          type: string
        name: request_id
        in: path
        required: true
  '/v2/requests/{request_id}/reportFLK':
    get:
      summary: Return report FLK check
      description: Возвращает отчет по формато логическом контроле загружаемых данных
      operationId: get-v2-request-request_id-reportFLK
      parameters:
        - name: request_id
          in: path
          description: Identifier of request
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          content:
            text/csv:
              schema:
                type: array
                items:
                  type: array
                  items:
                    type: string
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - report
  '/v2/group/{groupId}/report':
    get:
      summary: Return report group
      description: Возвращает отчет по комплектности группы загружаемых файлов
      operationId: get-v2-group-groupId-report
      parameters:
        - name: groupId
          in: path
          description: Identifier of group
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          content:
            text/csv:
              schema:
                type: array
                items:
                  type: array
                  items:
                    type: string
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '404':
          description: Not Found
          content:
            json:
              schema:
                type: string
                description: Сообщение об ошибке
                example: 'Report not found'
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - report

  '/v2/{datamart_name}/tables/{table_name}/delete':
    parameters:
      - schema:
          type: string
        name: datamart_name
        in: path
        required: true
      - schema:
          type: string
        name: table_name
        in: path
        required: true
      - name: groupId
        in: header
        description: 'идентификатор группы'
        required: false
        schema:
          type: string
      - name: groupFileNum
        in: header
        description: 'номер файла в группе'
        required: false
        schema:
          type: integer
      - name: groupFileCount
        in: header
        description: 'число файлов в группе'
        required: false
        schema:
          type: integer
    post:
      summary: Delete data by primary key array
      operationId: post-v2-datamart_name-tables-table_name-delete
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Invalid token
        '403':
          description: Invalid identifier
        '500':
          description: Internal server error
          content: {}
      tags:
        - data
      description: Удаление данных по массиву первичных ключей. К телу прикладывается файл csv
      security:
        - bearerAuth: []
      requestBody:
        $ref: '#/components/requestBodies/deleteData'
  '/v2/conditions/{datamart}/{table}':
    post:
      summary: Create verification conditions
      description: Формирование правил проверки для датамарта/таблицы
      operationId: post-v2-conditions
      parameters:
        - name: datamart
          in: path
          description: Name of datamart
          required: true
          schema:
            type: string
        - name: table
          in: path
          description: Name of table
          required: true
          schema:
            type: string
      requestBody:
        content:
          form-data/yaml: {}
          form-data/json: {}
          application/json:
            schema: {}
            example: '
            fields:
              birthday:
              # ограничение на формат даты ГГГГ-ММ-ДД: 4 цифры года, 2 цифры месяца и 2 цифры дня   
              # Уникальность по одному полю
                match: "(\\d{4})\\-(\\d{2})\\-(\\d{2})"
                uniq: true
              # Уникальность по сочетанию полей
                uniq-with: [code,passport]
              code:
                in: ["1","2","3","4","5","6","7","8","9","10"]
                uniq: true'
      responses:
        '200':
          description: successful operation
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - conditions
    put:
      summary: Update verification conditions
      description: Обновление правил проверки для датамарта/таблицы
      operationId: put-v2-conditions
      parameters:
        - name: datamart
          in: path
          description: Name of datamart
          required: true
          schema:
            type: string
        - name: table
          in: path
          description: Name of table
          required: true
          schema:
            type: string
      requestBody:
        content:
          form-data/yaml: {}
          form-data/json: {}
          application/json:
            schema: {}
            example: '
            fields:
              birthday:
              # ограничение на формат даты ГГГГ-ММ-ДД: 4 цифры года, 2 цифры месяца и 2 цифры дня   
              # Уникальность по одному полю
                match: "(\\d{4})\\-(\\d{2})\\-(\\d{2})"
                uniq: true
              # Уникальность по сочетанию полей
                uniq-with: [code,passport]
              code:
                in: ["1","2","3","4","5","6","7","8","9","10"]
                uniq: true'
      responses:
        '200':
          description: successful operation
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - conditions
    get:
      summary: Return verification conditions
      description: Возвращение правил проверки для датамарта/таблицы
      operationId: get-v2-conditions
      parameters:
        - name: datamart
          in: path
          description: Name of datamart
          required: true
          schema:
            type: string
        - name: table
          in: path
          description: Name of table
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
          content:
            form-data/yaml: {}
            form-data/json: {}
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - conditions
    delete:
      summary: Delete verification conditions
      description: Удаление правил проверки для датамарта/таблицы
      operationId: delete-v2-conditions
      parameters:
        - name: datamart
          in: path
          description: Name of datamart
          required: true
          schema:
            type: string
        - name: table
          in: path
          description: Name of table
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful operation
        '401':
          description: Invalid token
          content: {}
        '403':
          description: Invalid idetifier
          content: {}
        '500':
          description: Internal server error
          content: {}
      security:
        - bearerAuth: []
      tags:
        - conditions
components:
  requestBodies:
    uploadData:
      description: 'загружаемые данные'
      required: true
      content:
        text/csv:
          schema:
            type: array
            items:
              type: array
              items:
                type: string
        multipart/form-data:
          schema:
            required:
              - uploadData
            properties:
              uploadData:
                type: string
                description: Data for uploading
                format: binary
    deleteData:
      description: 'Удаляемые данные, важны лишь ключевые поля, остальные могут отсутствовать или будут проигнорированы'
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              primaryKeys:
                type: array
                description: Массив первичных ключей
                items:
                  type: array
                  items:
                    type: string
        text/csv:
          schema:
            type: array
            items:
              type: array
              items:
                type: string
        multipart/form-data:
          schema:
            required:
              - uploadData
            properties:
              uploadData:
                type: string
                description: Data for uploading
                format: binary
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  examples: {}

security:
  - bearerAuth: []

tags:
  - name: data
    description: Загрузка и удаление данных из Витрины, получение статуса запроса
  - name: conditions
    description: Управление правилами проверок для таблицы
  - name: report
    description: Получение отчетов

2.2.14. Настройка СМЭВ4-адаптера – Модуль подписок

2.2.14.1. Конфигурация модуля СМЭВ4-адаптер - Модуль подписок (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:

  • настройка подключения к Prostore (секция: prostore);

  • подключение к Брокеру сообщений Kafka, Zookeeper;

  • порядок обработки запросов между Получателем и Поставщиком данных (секция: kafka);

  • настройка метрик (секция: metrics) и другие настройки необходимые для корректной работы адаптера.

2.2.14.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

environment:
  name: ${ENVIRONMENT_NAME:test}

http-server:
  port: ${HTTP_PORT:8085}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

migration:
  enabled: ${MIGRATION_ENABLE:false}
  old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}

table-metadata:
  cache:
    enabled: false

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

prostore:
  status-event-topic:
    topic: ${PS_STATUS_EVENT_TOPIC:status.event}
    property:
      bootstrap.servers: ${kafka.internal.bootstrap.servers}
      group.id: ${kafka.external.topic.prefix}replicator-status-event
      auto.offset.reset: earliest
      enable.auto.commit: false

subscription:
  consumer:
    # режим отмены подписки на потребителе. Возможные значения rename, drop, none
    cancel-mode: none
    # Продолжительность исключения подписки в случае ошибки применения
    exclusion-duration: 24h
    # Периодичность срабатывания механизма очистки для ошибочных подписок
    cleanup-interval: 5s

replication:
  max-deltas-in-batch: 10 # максимальное число дельт в выгружаемой пачке

# Массив описания standalone таблиц, участвующих в репликации
#standalone-tables: []
# Пример описания
#standalone-tables:
#  - table: "misdm05.readable_book"
#    anchor: "update_at"
#    soft-delete: "delete_at"

storage: # блок настроек хранения чанков данных репликации. При изменении параметров необходимо синхронизировать аналогичные параметры в сервисе mppw
  type: ${STORAGE_TYPE:postgres} # тип, postgres|kafka
  postgres: # параметры подключения к базе. Используется только при type=postgres
    connection:
      database: ${STORAGE_DATABASE:replication}
      schema: ${STORAGE_SCHEMA:public}
      host: ${STORAGE_HOST:localhost}
      port: ${STORAGE_PORT:5432}
      user: ${STORAGE_USER:postgres}
      password: ${STORAGE_PASSWORD:postgres}
    pool:
      max-size: ${STORAGE_POOL_SIZE:30}


kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    subscription-request:
      topic: ${kafka.external.topic.prefix}replication.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-subscription-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    subscription-cancel-request:
      topic: ${kafka.external.topic.prefix}replication.cancel.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-subscription-cancel-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    subscription-consumer-cancel-request:
      topic: ${kafka.external.topic.prefix}replication.cancel.in.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}}replicator-subscription-consumer-cancel-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    subscription-storage-request:
      topic: ${kafka.external.topic.prefix}replication.in.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-subscription-storage-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    delta-request:
      topic: ${kafka.external.topic.prefix}delta.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-delta-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    delta-apply-notification:
      topic: ${kafka.internal.topic.prefix}subscription.in
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-notification
        auto.offset.reset: earliest
        enable.auto.commit: false
    mppw-delta-apply-result:
      topic: ${kafka.internal.topic.prefix}mppw.delta.in.rs
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-result
        auto.offset.reset: earliest
        enable.auto.commit: false

  producer:
    subscription-result: ${kafka.external.topic.prefix}replication.rs
    subscription-error: ${kafka.external.topic.prefix}replication.err
    subscription-cancel-error: ${kafka.external.topic.prefix}replication.cancel.rs
    subscription-cancel-result: ${kafka.external.topic.prefix}replication.cancel.rs
    subscription-consumer-cancel-result: ${kafka.external.topic.prefix}replication.cancel.in.rs
    subscription-storage-result: ${kafka.external.topic.prefix}replication.in.rs
    subscription-storage-error: ${kafka.external.topic.prefix}replication.in.err
    delta-error: ${kafka.external.topic.prefix}delta.err
    delta-apply-error: ${kafka.external.topic.prefix}delta.in.err
    delta-apply-result: ${kafka.external.topic.prefix}delta.in.rs
    delta-notification: ${kafka.external.topic.prefix}delta.notification
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      mppr-delta-request: ${kafka.internal.topic.prefix}mppr.delta.rq
      mppw-delta-apply-request: ${kafka.internal.topic.prefix}mppw.delta.in.rq
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

metrics:
  port: ${METRICS_PORT:9837}

log:
  replRequest: ${REPL_REQUEST_LOG_ENABLED:false}
  replResponse: ${REPL_RESPONSE_LOG_ENABLED:false}

backup:
  zk-path: ${REPLICATOR_BACKUP_ZK_PATH:/${environment.name}/podd-adapter-replicator}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  adapterCommandBroadcast: ${REPLICATOR_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  timeout: ${BACKUP_TIMEOUT:PT180s}
  idleDelay: ${BACKUP_DELAY:500}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${REPLICATOR_BACKUP_GROUP_ID:podd_adapter_replicator_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

2.2.14.2. Параметры конфигурации

Настройка конфигурации СМЭВ4-адаптера - Модуль подписок осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • environment - указывается название окружения (test, prod и т.д.);

  • http-server - настройки порта подключения;

  • executor - масштабирования нагрузки на модуль;

  • zookeeper – параметры подключения к Zookeeper;

  • migration - настройки миграции;

  • prostore-api-client - блок параметров конфигурирования взаимодействия с Prostore;

  • subscription - настройки подписки;

  • replication - настройки репликации;

  • storage - блок настроек хранения чанков данных репликации. При изменении параметров необходимо синхронизировать аналогичные параметры в сервисе MPPW.

  • kafka - настройки параметров подключения к шине данных Apache Kafka;

  • log - настройка сохранения лог-файла;

  • metrics - настройка получения метрик;

  • backup - настройки бекапирования.

2.2.14.2.1. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod).

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - среда разработки, например ENVIRONMENT_NAME:test.

2.2.14.2.2. Секция http-server

Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).

Например:

http-server:
  port: ${HTTP_PORT:8085}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:8085.

2.2.14.2.3. Секция executor

Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

Параметры настроек

  • reader-pool-size - размер пула для чтения Kafka, например EXECUTOR_READER_POOL_SIZE:20.

2.2.14.2.4. Секция zookeeper

Секция zookeeper предназначена для настройки параметров подключения к Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • ZOOKEEPER_DS_ADDRESS - адрес сервера Zookeeper DS;

  • ZOOKEEPER_DS_SESSION_TIMEOUT_MS - таймаут подключения к Zookeeper DS,максимальное время ожидания для выявления сбоев потребителей, указывается в миллисекундах (MS.);

  • ZOOKEEPER_DS_SESSION_TIMEOUT_MS - таймаут сессии, максимальное время ожидания подключения к Zookeeper. Если ответ не получен до истечения установленного значения, клиент повторно отправляет запрос при необходимости, указывается в миллисекундах (MS.);

  • ZOOKEEPER_DS_CHROOT - Zookeeper DS chroot path.

2.2.14.2.5. Секция migration

Секция migration реализована настройка миграции Zookeeper для задачи бекапирования.

Например:

migration:
  enabled: ${MIGRATION_ENABLE:false}
  old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}

Параметры настроек

  • enabled - подключение миграции, например {MIGRATION_ENABLE:false};

  • old-connection-string - адрес Zookeeper, например {OLD_ZOOKEEPER_DS_ADDRESS:localhost}.

2.2.14.2.6. Секция prostore-rest-client

В секции prostore-rest-client настраиваются параметры конфигурирования взаимодействия с Prostore.

Например:

prostore-rest-client:
  host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:t5-prostore-01.ru-central1.internal;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.14.2.7. Секция subscription

В секции subscription настраиваются подписки на потребителе.

Например

subscription:
  consumer:
    # режим отмены подписки на потребителе. Возможные значения rename, drop, none
    cancel-mode: none
    # Продолжительность исключения подписки в случае ошибки применения
    exclusion-duration: 24h
    # Периодичность срабатывания механизма очистки для ошибочных подписок
    cleanup-interval: 5s

Параметры конфигурации

  • cancel-mode - режим отмены подписки на потребителе. Возможные значения: rename, drop, none;

  • exclusion-duration - продолжительность исключения подписки в случае ошибки применения (в часах), например exclusion-duration: 24h;

  • cleanup-interval - периодичность срабатывания механизма очистки для ошибочных подписок (в секундах), например cleanup-interval: 5s.

2.2.14.2.8. Секция replication

В секции subscription указываются настройки репликации.

Например

replication:
  max-deltas-in-batch: 10

Параметры конфигурации

  • max-deltas-in-batch - максимальное число дельт в выгружаемой пачке, например max-deltas-in-batch: 10.

2.2.14.2.9. Секция storage

В секции storage указываются настройки хранения чанков данных репликации.

ри изменении параметров необходимо синхронизировать аналогичные параметры в сервисе MPPW.

Например:

storage:
  type: ${STORAGE_TYPE:postgres}
  postgres:
    connection:
      database: ${STORAGE_DATABASE:replication}
      schema: ${STORAGE_SCHEMA:public}
      host: ${STORAGE_HOST:localhost}
      port: ${STORAGE_PORT:5432}
      user: ${STORAGE_USER:postgres}
      password: ${STORAGE_PASSWORD:postgres}
    pool:
      max-size: ${STORAGE_POOL_SIZE:30}

Параметры настроек

  • type - тип, postgres|kafka, например: STORAGE_TYPE:postgres;

  • connection - параметры подключения к базе.

2.2.14.2.10. Секция kafka

В секции kafka настраиваются параметры подключения к шине данных Apache Kafka (используется для взаимодействия с СМЭВ4-адаптером) и настройки взаимодействия через топики модуля СМЭВ4-адаптер - Модуль исполнения запросов.

Модуль взаимодействует через топики:

  • replication.rq/rs/err - запрос создания подписки (Поставщик данных);

  • replication.cancel.rq/rs/err - запрос отмены подписки (Поставщик данных);

  • delta.rq/mppr.delta.rq - запрос дельты (Поставщик данных);

  • replication.in.rq/rs/err - запрос создания структуры по подписке (Получатель данных);

  • subscription.in/delta.in.rs/delta.in.err - запрос применения дельты (Получатель данных);

  • status.event/delta.notification - статусы с Prostore (Поставщик данных).

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:10}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  internal:
    bootstrap.servers: ${PS_KAFKA:localhost:9092}
    topic.prefix: ${INTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  consumer:
    subscription-request:
      topic: ${kafka.external.topic.prefix}replication.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-subscription-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    subscription-cancel-request:
      topic: ${kafka.external.topic.prefix}replication.cancel.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-subscription-cancel-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    subscription-consumer-cancel-request:
      topic: ${kafka.external.topic.prefix}replication.cancel.in.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}}replicator-subscription-consumer-cancel-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    subscription-storage-request:
      topic: ${kafka.external.topic.prefix}replication.in.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-subscription-storage-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    delta-request:
      topic: ${kafka.external.topic.prefix}delta.rq
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.external.bootstrap.servers}
        group.id: ${kafka.external.topic.prefix}replicator-delta-request
        auto.offset.reset: earliest
        enable.auto.commit: false
    delta-apply-notification:
      topic: ${kafka.internal.topic.prefix}subscription.in
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-notification
        auto.offset.reset: earliest
        enable.auto.commit: false
    mppw-delta-apply-result:
      topic: ${kafka.internal.topic.prefix}mppw.delta.in.rs
      max-concurrent-handle: ${kafka.max-concurrent-handle}
      commit-interval: ${kafka.commit-interval}
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${kafka.internal.topic.prefix}replicator-delta-apply-result
        auto.offset.reset: earliest
        enable.auto.commit: false

  producer:
    subscription-result: ${kafka.external.topic.prefix}replication.rs
    subscription-error: ${kafka.external.topic.prefix}replication.err
    subscription-cancel-error: ${kafka.external.topic.prefix}replication.cancel.rs
    subscription-cancel-result: ${kafka.external.topic.prefix}replication.cancel.rs
    subscription-consumer-cancel-result: ${kafka.external.topic.prefix}replication.cancel.in.rs
    subscription-storage-result: ${kafka.external.topic.prefix}replication.in.rs
    subscription-storage-error: ${kafka.external.topic.prefix}replication.in.err
    delta-error: ${kafka.external.topic.prefix}delta.err
    delta-apply-error: ${kafka.external.topic.prefix}delta.in.err
    delta-apply-result: ${kafka.external.topic.prefix}delta.in.rs
    delta-notification: ${kafka.external.topic.prefix}delta.notification
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
    internal:
      mppr-delta-request: ${kafka.internal.topic.prefix}mppr.delta.rq
      mppw-delta-apply-request: ${kafka.internal.topic.prefix}mppw.delta.in.rq
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры конфигурации

2.2.14.2.11. Секция metrics

В секции metrics настраиваются параметры метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837

Параметры конфигурации

  • port - порт для получения метрик, например 9837.

2.2.14.2.12. Секция log

В секции log настраиваются параметры логирования.

Например:

log:
  replRequest: ${REPL_REQUEST_LOG_ENABLED:false}
  replResponse: ${REPL_RESPONSE_LOG_ENABLED:false}

Параметры конфигурации

  • repl-request - журналировать запросы к модулю подписок, например REPL_REQUEST_LOG_ENABLED:false;

  • repl-response - журналировать ответы модуля подписок, например REPL_RESPONSE_LOG_ENABLED:false.

2.2.14.2.13. Секция backup

В секции backup настраиваются параметры бекапирования модуля.

Например:

backup:
  zk-path: ${REPLICATOR_BACKUP_ZK_PATH:/${environment.name}/podd-adapter-replicator}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  adapterCommandBroadcast: ${REPLICATOR_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  timeout: ${BACKUP_TIMEOUT:PT180s}
  idleDelay: ${BACKUP_DELAY:500}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}
        group.id: ${REPLICATOR_BACKUP_GROUP_ID:podd_adapter_replicator_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${kafka.internal.bootstrap.servers}

Параметры настроек

  • zk-path - путь к корневой ноде Zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки сохраненных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.15. Настройка BLOB-адаптера

2.2.15.1. Конфигурация BLOB-адаптера (application.yml)

Файл application.yml – основной конфигурационный файл BLOB-адаптер, в котором задана логика и порядок работы модуля:

  • получение и обработка входящих запросов;

  • настройка подключения к СМЭВ3-адаптеру, СМЭВ4-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля.

2.2.15.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  enabled: ${SERVER_ENABLED:true}
  port: ${SERVER_PORT:8081}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

vertx:
  web-client:
    max-pool-size: 100

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:100}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${kafka.agent.topic.prefix}}
  enabled: ${KAFKA_ENABLED:true}
  consumer:
    blob-request: ${kafka.external.topic.prefix}blob.rq
    # максимальное количество обработчиков входящих запросов
    max-concurrent-handle: ${kafka.max-concurrent-handle}
    # периодичность фиксации оффсета обработанных сообщений
    commit-interval: ${kafka.commit-interval}
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${AGENT_TOPIC_PREFIX:}blob-consumer
      auto.offset.reset: earliest
      enable.auto.commit: false
  producer:
    blob-result: ${kafka.external.topic.prefix}blob.rs
    blob-error: ${kafka.external.topic.prefix}blob.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}

blob:
  chunk-size: ${CHUNK_SIZE:524288}
  storage:
    client: vertx # vertx/awssdk
    protocol: ${BLOB_STORAGE_PROTOCOL:http} # use only for client vertx
    host: ${BLOB_STORAGE_HOST:localhost}
    port: ${BLOB_STORAGE_PORT:8888}
    path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
    path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
    bucket: ${BUCKET:} # use only for client awssdk
    auth:
      type: ${BLOB_STORAGE_AUTH_TYPE:NONE}  # BASIC/TOKEN/AUTH/NONE/AWSBASICCREDENTIALS
      user: ${BLOB_STORAGE_AUTH_USER:user}  # use only for auth.type BASIC
      password: ${BLOB_STORAGE_AUTH_PASSWORD:pass} # use only for auth.type BASIC
      access-token: ${ACCESS_TOKEN:}  # use only for auth.type AWSBASICCREDENTIALS
      secret-token: ${SECRET_TOKEN:}  # use only for auth.type AWSBASICCREDENTIALS
      token: ${BLOB_STORAGE_AUTH_TOKEN:token}  # use only for auth.type TOKEN
      authorization-server:   # use only for auth.type AUTH
        protocol: ${AUTH_SERVER_PROTOCOL:http}
        host: ${AUTH_SERVER_HOST:localhost}
        port: ${AUTH_SERVER_PORT:80}
        path: ${AUTH_SERVER_PATH:oauth2/token}
        client-id: ${AUTH_SERVER_CLIENT_ID:}
        client-secret: ${AUTH_SERVER_CLIENT_SECRET:}

logging:
  request-response:
    blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
    blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}

metrics:
  port: ${METRICS_PORT:9837}

2.2.15.2. Параметры конфигурации

Настройка конфигурации BLOB-адаптера осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт сервера;

  • executor - настраивается размер пула для запросов;

  • vertx - настраиваются значения вертиклов;

  • kafka - настраиваются параметры подключения к шине данных Apache Kafka;

  • blob - настраивается подключение к Хранилищу BLOB-объектов;

  • logging - настраивается логирование работы модуля;

  • metrics - настраивается получение метрик.

2.2.15.2.1. Секция http-server

Секция http-server позволяет настраивать взаимодействие с BLOB-объектами через модуль СМЭВ3-адаптер по протоколу http/https и задавать порт, на котором будет открыт доступ к серверу.

Например:

http-server:
  enabled: ${SERVER_ENABLED:true}
  port: ${SERVER_PORT:8081}
  • enabled - флаг активации работы с сервером;

  • port - порт, на котором будет открыт доступ к серверу.

2.2.15.2.2. Секция executor

Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

Параметры настроек

  • reader-pool-size - размер пула для чтения Kafka, например EXECUTOR_READER_POOL_SIZE:20.

2.2.15.2.3. Секция vertx

Секция vertx определяет настройки количества вертиклов. Например:

vertx:
  web-client:
    max-pool-size: 20

Параметры настроек

  • max-pool-size - максимальное значение для веб-клиента.

2.2.15.2.4. Секция kafka

Секция kafka предназначена для настройки параметров подключения к шине данных Apache Kafka (используется для взаимодействия с СМЭВ4-адаптером).

Например:

kafka:
  agent.topic.prefix: ${AGENT_TOPIC_PREFIX:}
  max-concurrent-handle: ${KAFKA_MAX_CONCURRENT_HANDLE:1000}
  commit-interval: ${KAFKA_COMMIT_INTERVAL:5s}
  external:
    bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
    topic.prefix: ${EXTERNAL_TOPIC_PREFIX:${agent.topic.prefix}}
  enabled: ${KAFKA_ENABLED:true}
  consumer:
    blob-request: ${kafka.external.topic.prefix}blob.rq
    # максимальное количество обработчиков входящих запросов
    max-concurrent-handle: ${kafka.max-concurrent-handle}
    # периодичность фиксации оффсета обработанных сообщений
    commit-interval: ${kafka.commit-interval}
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}
      group.id: ${AGENT_TOPIC_PREFIX:}blob-consumer
      auto.offset.reset: earliest
      enable.auto.commit: false
  producer:
    blob-result: ${kafka.external.topic.prefix}blob.rs
    blob-error: ${kafka.external.topic.prefix}blob.err
    property:
      bootstrap.servers: ${kafka.external.bootstrap.servers}

Параметры конфигурации

  • enabled - флаг включения чтения из Kafka, например KAFKA_ENABLED:true;

  • blob-request - максимальное количество обработчиков входящих запросов, например ${kafka.external.topic.prefix}blob.rq;

  • max-concurrent-handle - периодичность фиксации оффсета обработанных сообщений, например ${kafka.max-concurrent-handle}

blob.rq, blob.rs, blob.err - топики взаимодействия с Агентом СМЭВ4.

2.2.15.2.5. Секция blob

Секция blob предназначена для настройки:

  • размера выгружаемого чанка BLOB;

  • пути к Хранилищу BLOB-объектов (GET-запрос);

  • метода аутентификации для модуля BLOB-адаптера;

  • получения токена;

  • повторной аутентификаций при истечении времени жизни токена.

Например:

blob:
  chunk-size: ${CHUNK_SIZE:524288}
  storage:
    client: vertx # vertx/awssdk
    protocol: ${BLOB_STORAGE_PROTOCOL:http} # use only for client vertx
    host: ${BLOB_STORAGE_HOST:localhost}
    port: ${BLOB_STORAGE_PORT:8888}
    path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
    path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
    bucket: ${BUCKET:} # use only for client awssdk
    auth:
      type: ${BLOB_STORAGE_AUTH_TYPE:NONE}  # BASIC/TOKEN/AUTH/NONE/AWSBASICCREDENTIALS
      user: ${BLOB_STORAGE_AUTH_USER:user}  # use only for auth.type BASIC
      password: ${BLOB_STORAGE_AUTH_PASSWORD:pass} # use only for auth.type BASIC
      access-token: ${ACCESS_TOKEN:}  # use only for auth.type AWSBASICCREDENTIALS
      secret-token: ${SECRET_TOKEN:}  # use only for auth.type AWSBASICCREDENTIALS
      token: ${BLOB_STORAGE_AUTH_TOKEN:token}  # use only for auth.type TOKEN
      authorization-server:   # use only for auth.type AUTH
        protocol: ${AUTH_SERVER_PROTOCOL:http}
        host: ${AUTH_SERVER_HOST:localhost}
        port: ${AUTH_SERVER_PORT:80}
        path: ${AUTH_SERVER_PATH:oauth2/token}
        client-id: ${AUTH_SERVER_CLIENT_ID:}
        client-secret: ${AUTH_SERVER_CLIENT_SECRET:}

Параметры конфигурации

  • chunk-size - размер выгружаемого чанка BLOB, например ${CHUNK_SIZE:524288};

  • protocol - протокол обмена с сервером хранилища BLOB-объектов (одно из значений http или https), например BLOB_STORAGE_PROTOCOL:http;

  • host - имя сервера хранилища BLOB-объектов, например BLOB_STORAGE_HOST:localhost;

  • port - порт сервера хранилища BLOB-объектов, если отсутствует, то следует использовать следующие порты 80 для HTTP, 443 для HTTPS, например BLOB_STORAGE_PORT:8888;

  • path-prefix - путь до места хранилища BLOB-объектов, путь до места хранения BLOB-объекта на сервере хранилища BLOB-объектов, например BLOB_STORAGE_PATH_POSTFIX:;

  • path-postfix - окончание пути, начало списка параметров, например BLOB_STORAGE_PATH_PREFIX:;

  • bucket - наименование хранилища, только для клиентов AWSSDK;

  • auth - параметры аутентификации BLOB-адаптера;

  • type -тип аутентификации (NONE - нет, BASIC - по имени/паролю, TOKEN - по токену, AUTH - через сервер аутентификации), например BLOB_STORAGE_AUTH_TYPE:NONE;

  • user - имя пользователя (для аутентификации BASIC), например BLOB_STORAGE_AUTH_USER:user;

  • password - пароль (для аутентификации BASIC), например BLOB_STORAGE_AUTH_PASSWORD:pass;

  • token - токен (для аутентификации TOKEN), например BLOB_STORAGE_AUTH_TOKEN:token;

  • protocol - имя протокола HTTP или HTTPS (для аутентификации AUTH), например AUTH_SERVER_PROTOCOL:http;

  • host - строка с IP или FQDN сервера авторизации (для аутентификации AUTH), например AUTH_SERVER_HOST:localhost;

  • port - TCP-порт (для аутентификации AUTH), например AUTH_SERVER_PORT:80;

  • path - путь на сервере (для аутентификации AUTH), например AUTH_SERVER_PATH:oauth2/token;

  • client-id - идентификатор клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификации AUTH), например AUTH_SERVER_CLIENT_ID:;

  • client-secret - секретный код клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификации AUTH), например AUTH_SERVER_CLIENT_SECRET:.

Пример cURL-запроса к серверу аутентификации

cURL (windows)

curl -X POST http://t5-avanpost-01.ru-central1.internal/oauth2/token ^
  -H "Accept: application/json"^
  -H "Content-type: application/x-www-form-urlencoded"^
  --data "grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2" ^
  -o result.txt ^
  --trace-ascii result.log

cURL (linux)

curl --request POST \
  --url http://t5-avanpost-01.ru-central1.internal/oauth2/token \
  --header 'Accept: application/json' \
  --header 'Content-type: application/x-www-form-urlencoded' \
  --data 'grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2' \
  -o result.txt

Пример cURL-запроса к Хранилищу BLOB-объектов

cURL (windows)

curl -X GET http://vmserv1.internal.example.com:8080/datamart/data/v1/blobs/1234567 ^
  -H "Authorization: bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJqdGkiOiI5YmQ3MzdjZi05MDNmLTQxZTktYjI5Mi1mZmUwM2QzNDhkNWIiLCJleHAiOjE2NTQxMDI5NDgsImlhdCI6MTY1NDEwMTE0OCwiaXNzIjoiY2VydC5pc3N1ZXIuaG9zdCIsImF1ZCI6IiIsImV4cGlyZXNfaW4iOjE4MDAsImNsaWVudF9pZCI6ImIwZmQwZjI4LTRiOTktNDBkNy04ZGQzLWU2NjNhNmNjNzdkMSJ9.qi8JKlQAdMsK3fTq4H88Z5-FppaUP95OH-rmPtCxEMmlPnyhNCRJe34aKMR5mXVldEzY1clV87-qjWCyPLH_Zkqji1C7aQz7fMbgZixhY2wrQnXAXRfslkRe5Ph3GYYd26GvWOG1xl99AHvfDWIfI1SGcJyd0z_iOl1GbghLvSV38MquZ8ugBdKaDjV-Ww3U_sWlJVO-oF8xjUMYuhOSsCNxhxMng1oVwUdAUbbgoB5ldyoGTbqmbQMYvBmKBT0eZqOR6RnJEAjmfOC9YeWwADKwovFybvGOaQZsjlaoJ2XxpmS79U7UO_6KXK1cnHfshVuB5_yUwubrRh6tRxt0CA"^
  -o result.bin ^
  --trace-ascii result.log

Пример настройки динамической ссылки на файлы с содержимым BLOB-полей

Пример 1

Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:

http://aa.bb.cc:8080/api/v1/blobs/12345678

Настройки файла application.yml должны иметь следующий вид:

blob-storage:
  protocol: http
  host: aa.bb.cc
  port: 8080
  path-prefix: api/v1/blobs/

Пример 2

Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:

https://aa.bb.cc/api/v1/blobs/12345678/data?format=jpg&size=low&backgraund=#000000,

Настройки файла application.yml должны иметь следующий вид:

blob-storage:
  protocol: https
  host: aa.bb.cc
  path-prefix: api/v1/blobs/
  path-postfix: /data
  params:
    format: jpg
    size: low
    backgraund: "#000000"

Пример 3

Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:

http://aa.bb.cc:8080/api/v1/blobs/12345678

Настройки файла application.yml должны иметь следующий вид:

blob-storage:
  protocol: ${PROT:http}
  host: ${HOST:aa.bb.cc}
  port: ${PORT:80}
  path-prefix: ${PREFIX:api/v1/blobs/}

Пример 4

Если требуется получить строку вида:

https://aa.bb.cc:8080/app/{link}/download?requester_id={value}&user=fdsfs&zip=true

Необходимо настроить:

  1. В Витрине данных поле с типом LINK должно содержать текст:

12345678/download?requester_id=ABCDEFGH
  1. В файл application.yml добавить следующие настройки:

blob-storage:
  protocol: https
  host: aa.bb.cc
  port: 8080
  path-prefix: api/
  params:
    user: fdsfs
    zip: true

Указание дополнительных параметров к Хранилищу BLOB-объектов

Например

blob-storage:
  params:
    name1: value1
    name2: value2

Пример запроса

/files/test?name1=value1&name2=value2
2.2.15.2.6. Секция logging

В секции logging настраивается логирование работы модуля.

Например:

logging:
  request-response:
    blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
    blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}

Параметры настроек

  • blob-request - журналировать запросы, например BLOB_REQUEST_LOG_ENABLED:false;

  • blob-request - журналировать ответы, например BLOB_RESPONSE_LOG_ENABLED:false.

2.2.15.2.7. Секция metrics

Секция metrics предназначена для настройки параметров метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры конфигурации

  • port - Порт для метрик, например METRICS_PORT:9837.

2.2.16. Настройка Сервиса формирования документов

2.2.16.1. Конфигурация Сервиса Формирования документов (application.yml)

Файл application.yml – основной конфигурационный файл Сервиса Формирования документов, в котором задана логика и порядок работы сервиса:

  • настройка и обработка документов;

  • путь к pebble-шаблонам документов (секция printable-forms);

  • настройка сервиса формирования подписи (sign-service);

  • настройка подключения к базе данных (секция: datasource);

  • настройка проверки состояния БД (секция health) и другие настройки необходимые для корректной работы сервиса.

2.2.16.1.1. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

http-server:
  port: ${HTTP_PORT:8080}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

metrics:
  port: ${METRICS_PORT:9837}

vertx:
  web-client:
    max-pool-size: 20

counter-service:
  host: ${COUNTER_SERVICE_HOST:localhost}
  port: ${COUNTER_SERVICE_PORT:9000}
  serviceName: ${COUNTER_SERVICE_NAME:printableform}
  timeout: ${COUNTER_SERVICE_TIMEOUT:30}


sign-service:
  url: ${SIGN_SERVICE_URL:http://localhost:8192}
  timeout: ${SIGN_SERVICE_TIMEOUT:30}
  pool-size: ${SIGN_SERVICE_POOL_SIZE:5}

notarius:
  host: ${NOTARUIS_HOST:localhost}
  port: ${NOTARUIS_PORT:8192}
  enabled: ${NOTARIUS_ENABLED:FALSE}
  props:
    maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
    signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
    digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}

printable-forms:
  reports:
    # имя документа
    - report: document_1
      # настройки по извлечению данных
      extract:
        # путь pebble шаблона, который будет извлекать данные
        template: extract_static.peb
      # настройки по формированию xml документа
      xml:
        # путь pebble шаблона, который будет формировать xml документ
        template: generate_xml_1.peb
        # Id подписываемого элемента, если не указано, то подписывается весь xml
        elementId: elementToSign
        # имя элемента, куда добавлять ЭП, если не указано, то в корень
        elementName: signature
        # имя файла, если не указано, то <Id_ПФ + ".xml">
        fileName: document_1.xml
      # настройки по формированию xml документа с открепленной подписью
      xml_detached_sig:
        # имя файла, если не указано, то <Id_ПФ + ".xml">
        fileName: document_1.xml
        # имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
        fileSign: xmlSign.p7s
      # настройки по формированию pdf документа
      pdf:
        # путь pebble шаблона, который будет формировать pdf документ
        template: generate_pdf_1.peb
        # имя файла, если не указано, то <Id_ПФ + ".pdf">
        fileName: pdfFileName.pdf
      # настройки по формированию pdf документа с открепленной подписью
      pdf_sig:
        # путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
        #  (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)
        # имя файла, если не указано, то <Id_ПФ + ".pdf">
        fileName: pdfFileName.pdf
        # имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
        fileSign: pdfSign.p7s

2.2.16.2. Параметры конфигурации

Настройка конфигурации Сервиса Формирования документов осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - указывается порт веб-сервера;

  • executor - предназначена для указания размера пула для запросов;

  • prostore-rest-client - настраивается блок параметров взаимодействия с Prostore;

  • metrics - указывается порт для получения метрик;

  • counter-service - указываются настройки подключения к сервису генерации номера;

  • sign-service - указываются настройки подключения к сервису подписания документа;

  • notarius - указываются настройки сервиса подписания и проверки подписи «Нотариус»;

  • printable-forms - указываются настройки сервиса формирования документов

2.2.16.2.1. Секция http-server

В секции http-server указывается порт веб-сервера.

Например:

http-server:
  port: ${HTTP_PORT:8080}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:8080.

2.2.16.2.2. Секция executor

В секции executor указывается размер пула для запросов.

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

Параметры настроек

  • reader-pool-size - Размер пула для чтения запросов, например EXECUTOR_READER_POOL_SIZE:20

2.2.16.2.3. Секция prostore-rest-client

В секции prostore-rest-client настраивается блок параметров взаимодействия с Prostore.

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:localhost;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.16.2.4. Секция metrics

В секции metrics указывается порт для получения метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - порт для получения метрик, например METRICS_PORT:9837

2.2.16.2.5. Секция counter-service

В секции counter-service настраивается подключение к сервису генерации номера.

Например:

counter-service:
  host: ${COUNTER_SERVICE_HOST:localhost}
  port: ${COUNTER_SERVICE_PORT:9000}
  serviceName: ${COUNTER_SERVICE_NAME:printableform}
  timeout: ${COUNTER_SERVICE_TIMEOUT:30}

Параметры настроек

  • host - адрес сервиса генерации номера, например COUNTER_SERVICE_HOST:t5-printable-form-01.ru-central1.internal;

  • port - порт сервиса генерации номера, например COUNTER_SERVICE_PORT:9000;

  • serviceName - значение имени сервиса, например COUNTER_SERVICE_NAME:printableform;

  • timeout - таймаут на генерации номера, например COUNTER_SERVICE_TIMEOUT:30.

2.2.16.2.6. Секция sign-service

В секции sign-service настраивается подключение к сервису подписания документа.

Например:

sign-service:
  url: ${SIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192}
  timeout: ${SIGN_SERVICE_TIMEOUT:30}
  pool-size: ${SIGN_SERVICE_POOL_SIZE:5}

Параметры настроек

  • url - URL сервиса подписания документа, например SIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192;

  • timeout - таймаут на подписание документа (сек), например SIGN_SERVICE_TIMEOUT:30;

  • pool-size - размер пула для сервиса подписания, например SIGN_SERVICE_POOL_SIZE:5.

2.2.16.2.7. Секция notarius

В секции notarius указываются настройки сервиса Нотариус.

Например:

notarius:
  host: ${NOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal}
  port: ${NOTARUIS_PORT:8192}
  enabled: ${NOTARIUS_ENABLED:FALSE}
  props:
    maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
    signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
    digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}

Параметры настроек

  • host - адрес сервиса Нотариус, например NOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal;

  • port - порт сервиса Нотариус, например NOTARUIS_PORT:8192;

  • enabled - выбор сервиса подписания между schloussler и notarius, например NOTARIUS_ENABLED:FALSE;

  • maxContentLength - максимальный размер отправляемого объекта, например NOTARUIS_MAX_CONTENT_LENGTH:1048576005;

  • signatureURI - URI алгоритма хэширования, например NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256;

  • digestMethod - алгоритм хэширования, например NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411.

2.2.16.2.8. Секция printable-forms

В секции printable-forms настраивается сервис формирования документов.

Например:

printable-forms:
  reports:
    # имя документа
    - report: document_1
      # настройки по извлечению данных
      extract:
        # путь pebble шаблона, который будет извлекать данные
        template: ./src/main/resources/extract_static.peb
      # настройки по формированию xml документа
      xml:
        # путь pebble шаблона, который будет формировать xml документ
        template: ./src/main/resources/generate_xml_1.peb
        # Id подписываемого элемента, если не указано, то подписывается весь xml
        elementId: elementToSign
        # имя элемента, куда добавлять ЭП, если не указано, то в корень
        elementName: signature
        # имя файла, если не указано, то <Id_ПФ + ".xml">
        fileName: document_1.xml
      # настройки по формированию pdf документа
      pdf:
        # путь pebble шаблона, который будет формировать pdf документ
        template: ./src/main/resources/generate_pdf_1.peb
        # имя файла, если не указано, то <Id_ПФ + ".pdf">
        fileName: pdfFileName.pdf
      # настройки по формированию pdf документа с открепленной подписью
      pdf_sig:
        # путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
        #  (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)

        # имя файла, если не указано, то <Id_ПФ + ".pdf">
        fileName: pdfFileName.pdf
        # имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
        fileSign: pdfSign.p7s

Внимание

В конфигурационном файле application.yml пути к файлам pebble-шаблонов должны быть либо: относительно директории запуска, либо абсолютные пути.

2.2.16.3. Примеры pebble-шаблонов для Сервиса Формирования документов

2.2.16.3.1. Возможность вызова REST-сервисов из шаблона Сервиса Формирования документов

Для вызова REST-сервисов из шаблона Сервиса Формирования документов используется функция callRest.

Пример вызова функции из pebble-шаблона:

{% set host = "smevql-dtm-smevqlserver01.ru-central1.internal" %}
{% set port = "8080" %}
{% set route = "data" %}
    {% set rq = "${jsonRequest.replace("\"", "\\\"")}" %}

{% set varName = callRest(
        method = "POST",
        url = "http://#\{host}:#{port}/#{route}",
        headers = "Content-Type=application/json",
        body = rq,
        responseType = "JSON"
      )
%}

{{ varName["response"]["ticket"][0]["id"]}}

Для асинхронного вызова (без ожидания ответа), необходимо выставить параметр async=true.

2.2.16.3.2. Pebble-шаблон для обработки поступившего запроса и формирования json-файла
{# формируем sql запрос в переменную passengersquery#}
{% var passengersquery %}
    {% if params[0] is empty %}
        select * from smart.all_types limit 10
    {% else %}
        select * from smart.all_types limit {{ params[0] }}
    {% endif %}
{% endvar %}
{# выполняем sql запрос и помещаем результат выполнения в переменную rows.searchpassenger #}
{{ sql("searchpassenger", passengersquery) }}

{% var json_data %}
{
    "passengers": [
    {% for p in rows.searchpassenger %}
    {#  формируем json динамически  #}
        {% if loop.first %}
        {% else %}
            ,
        {% endif %}
        {
            "id": "{{ p.id }}",
            "firstname": "{{ p.firstname }}",
            "middlename": "{{ p.middlename }}",
            "lastname": "{{ p.lastname }}",
            "birthday": "{{ p.birthday }}"
        }
    {% endfor %}
    ]
}
{% endvar %}

{#выведем полученный json в неэкранированной форме#}
{{ json_data | raw }}
2.2.16.3.3. Pebble-шаблон для формирования xml-документа
<root>
    <passengers Id="elementToSign">
    {% for p in data.passengers %}
        <passenger id="{{ p.id }}">
            <firstname>{{ p.firstname }}</firstname>
            <middlename>{{ p.middlename }}</middlename>
            <lastname>{{ p.lastname }}</lastname>
            <birthday>{{ p.birthday }}</birthday>
        </passenger>
        <cert>
            <organization>{{ certification_info.subjectDN.commonName }}</organization>
            <serial>{{ dec_to_hex(certification_info.serialNumber) }}</serial>
            <issuer>{{ certification_info.issuerDN.commonName }}</issuer>
            <valid-from>{{ certification_info.notBefore | date("dd.MM.yyyy") }}</valid-from>
            <valid-until>{{ certification_info.notAfter | date("dd.MM.yyyy") }}</valid-until>
        </cert>
    {% endfor %}
    </passengers>
    <signature/>
</root>
2.2.16.3.4. Pebble-шаблон для формирования pdf-документа
<html>
    <head>
        <style>
            table, th, td {
            border: 1px solid black;
            }
        </style>
    </head>
    <body>
    <h3>Certificate</h3>
    <table>
        <tr>
            <th>Организация</th>
            <th>Сертификат</th>
            <th>Издатель</th>
            <th>Действителен с</th>
            <th>Действителен по</th>
        </tr>
        <tr>
            <td>{{ certification_info.subjectDN.commonName }}</td>
            <td>{{ certification_info.serialNumber }}</td>
            <td>{{ certification_info.issuerDN.commonName }}</td>
            <td>{{ certification_info.notBefore }}</td>
            <td>{{ certification_info.notAfter }}</td>
        </tr>
    </table>
    <h3>Passengers</h3>
    <table>
        <tr>
            <th>id</th>
            <th>firstname</th>
            <th>middlename</th>
            <th>lastname</th>
            <th>birthday</th>
        </tr>
        {% for p in data.passengers %}
        <tr>
            <td>{{ p.id }}</td>
            <td>{{ p.firstname }}</td>
            <td>{{ p.middlename }}</td>
            <td>{{ p.lastname }}</td>
            <td>{{ p.birthday }}</td>
        </tr>
        {% endfor %}
    </table>
    </body>
</html>

2.2.17. Настройка REST-адаптера

2.2.17.1. Конфигурация REST-адаптера

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля

2.2.17.1.1. Пример файла application.yml
http-server:
  port: 8082

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  default-schema: ${PS_SCHEMA:demo_dev}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

swagger:
  file-path: sample.yaml
  #Map operationId -> templatefile
  templates:
    execquery_get: sample.peb
    execquery_post: sample.peb
    execquery_get_params: sample.peb
    execquery_post_params: sample.peb

metrics:
  port: ${METRICS_PORT:9837}

vertx:
  web-client:
    max-pool-size: 20

  # Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf
spf:
  host: ${SPF_HOST:localhost}
  port: ${SPF_PORT:8080}
  # Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
  params: {}

2.2.17.2. Параметры конфигурации

Настройка конфигурации REST-адаптера осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • http-server - порт сервера;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с Prostore;

  • swagger - пример файла конфигурации конечных точек;

  • metrics - настраивается получение метрик;

  • vertx - настраиваются значения вертиклов;

  • spf - Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf.

2.2.17.2.1. Секция http-server

Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).

Например:

http-server:
  port: 8082

Параметры настроек

  • port - порт веб-сервера, например: 8082.

2.2.17.2.2. Секция prostore-rest-client

В секции prostore-rest-client настраиваются параметры конфигурирования взаимодействия с Prostore.

Например:

prostore-rest-client:
  host: ${PS_HOST:t5-prostore-01.ru-central1.internal}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:8}

Параметры настроек

  • host - адрес Prostore, например PS_HOST:t5-prostore-01.ru-central1.internal;

  • port - порт Prostore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к Prostore, например PS_MAX_POOL_SIZE:8.

2.2.17.2.3. Секция swagger

В секции swagger приведен пример файла конфигурации конечных точек.

Например:

swagger:
  file-path: sample.yaml
  #Map operationId -> templatefile
  templates:
    execquery_get: sample.peb
    execquery_post: sample.peb
    execquery_get_params: sample.peb
    execquery_post_params: sample.peb

Параметры настроек

  • file-path - пример файла конфигурации конечных точек;

  • templates - шаблоны парсинга и обогащения запросов.

2.2.17.2.4. Секция metrics

В секции metrics настраиваются параметры метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837

Параметры конфигурации

  • port - порт для получения метрик, например 9837.

2.2.17.2.5. Секция spf

В секции spf указываются (при использовании функции toSpf) параметры подключения к сервису печатных форм.

Например:

spf:
  host: ${SPF_HOST:localhost}
  port: ${SPF_PORT:8080}
  # Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
  params: {}

Параметры настроек

  • host - адрес Сервиса печатных форм, например SPF_HOST:localhost;

  • port - порт Сервиса печатных форм, например SPF_PORT:8080;

  • params - Дополнительные параметры (ключ-значения сертификатов, необходимых для сервиса ПФ).

2.2.17.3. Kонфигурационный файл с конечными точками

Для доступа к конечным точкам отредактируйте файл sample.yaml, описав все необходимые API в соответствии с приведенным в файле шаблоном (шаблон соответствует спецификации OpenAPI 3.0 https://swagger.io/specification/ ).

Пример файла sample.yaml со всеми конфигурируемыми атрибутами:

openapi: 3.0.0
info:
  title: Sample API
  version: 0.1.9
servers:
  - url: /
paths:
  /test/query:
    get:
      summary: Returns some value
      operationId: execquery_get
      responses:
        '200': # status code
          description: A JSON array of user names
          content:
            application/json:
              schema:
                type: string

    post:
      summary: Returns some value
      operationId: execquery_post
      responses:
        '200':    # status code
          description: A JSON array of user names
          content:
            application/json:
              schema:
                type: string
  /test/query/{id}:
    post:
      summary: Returns some value
      operationId: execquery_post_params
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: utf8
      responses:
        '200': # status code
          description: A JSON array of user names
          content:
            application/json:
              schema:
                type: string
    get:
      summary: Returns some value
      operationId: execquery_get_params
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: utf8
      responses:
        '200': # status code
          description: A JSON array of user names
          content:
            application/json:
              schema:
                type: string

Секция servers

  • url: / - корневой путь сервера.

Секция: paths

  • /test/query - путь запроса;

  • get - тип запроса (get, post и т.д.);

  • operationId - определение operationId для связки с файлом шаблона;

  • responses - описание параметров ответа.

2.2.17.4. Шаблоны

Для парсинга и обогащения запросов используются шаблоны.

В качестве языка шаблонов используется pebble с дополнениями:

  • функция xpath(expression) - возвращает вычисленное выражение на входящем документе;

  • тэг {% mtom %} some content {% endmtom %} - отправляет внутренность вложением;

  • функция sql(var, sql, param1, param2, ...) - выполняет sql-запрос с параметрами, результат записывается в переменную var.

Пример формирования шаблона приведен в файле sample.peb.

{% var restrictionsquery %}
   {% if id is empty %}
      select * from passenger
   {% else %}
      select * from passenger where passenger.id = '{{ id }}'
   {% endif %}
{% endvar %}
{{ sql("searchingpassenger", restrictionsquery) }}


{% for ts in rows.searchingpassenger %}
   id = {{ ts.id }} and name = {{ ts.firstname }}
{% endfor %}

2.2.18. Настройка Counter-provider - Сервиса генерации уникального номера

2.2.18.1. Конфигурация модуля Counter-Provider (application.yml)

Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы сервиса:

  • среда разработки;

  • настройка счетчика;

  • настройка подключения к Zookeeper, а также другие настройки необходимые для корректной работы сервиса.

2.2.18.2. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

environment:
  name: ${ENVIRONMENT_NAME:test}

http-server:
  port: ${HTTP_PORT:9000}

counter:
  start-number: ${COUNTER_START_NUMBER:1}
  retry-after-failure: ${COUNTER_RETRY_AFTER_FAILURE:3}
  update-timeout: ${COUNTER_UPDATE_TIMEOUT:}
  reset-period: ${COUNTER_RESET_PERIOD:}
  increment-gap: ${INCREMENT_GAP:1}

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:5}
  persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
  datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
  counter-prefix: ${COUNTER_PREFIX:counter_}


migration:
  enabled: ${MIGRATION_ENABLE:false}
  old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}

backup:
  mode: ${BACKUP_MODE:rest} # kafka | rest
  rest:
    uri: ${BACKUP_URI:/backup}
  zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}


metrics:
  port: ${METRICS_PORT:9837}

2.2.18.3. Параметры конфигурации

Настройка конфигурации Сервиса генерации уникального номера осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • environment - указывается среда разработки;

  • http-server - указывается порт веб-сервера;

  • counter - указываются настройки счетчика;

  • zookeeper - определяет настройки подключения к Zookeeper;

  • persistence-mode - настройки хранения данных;

  • prostore-rest-client - блок параметров конфигурирования взаимодействия с ProStore;

  • migration - настройки миграции;

  • backup - настройки бекапирования;

  • metrics - настройка порта для получения метрик.

2.2.18.3.1. Секция environment

В секции environment указывается среда разработки (dev, test, stable, prod)

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

Параметры настроек

  • name - среда разработки, например ENVIRONMENT_NAME:test.

2.2.18.3.2. Секция http-server

В секции http указывается порт веб-сервера.

Например:

http-server:
  port: ${HTTP_PORT:9000}

Параметры настроек

  • port - порт веб-сервера, например: HTTP_PORT:9000.

2.2.18.3.3. Секция counter

В секции counter можно настраивать начальный номер счетчика, а также количество попыток записи счетчика после ошибки обновления.

Например:

counter:
  start-number: ${COUNTER_START_NUMBER:1}
  retry-after-failure: ${COUNTER_RETRY_AFTER_FAILURE:3}
  update-timeout: ${COUNTER_UPDATE_TIMEOUT:}
  reset-period: ${COUNTER_RESET_PERIOD:}
  increment-gap: ${INCREMENT_GAP:1}

Параметры настроек

  • start-number - начальный номер счетчика, например COUNTER_START_NUMBER:1;

  • retry-after-failure- количество попыток записи счетчика после ошибки обновления, например COUNTER_RETRY_AFTER_FAILURE:3;

  • update-timeout - таймаут обновления счетчика, например COUNTER_UPDATE_TIMEOUT:;

  • reset-period - период сброса счетчика, например COUNTER_RESET_PERIOD:;

  • increment-gap - шаг инкремента, например INCREMENT_GAP:1.

2.2.18.3.4. Секция zookeeper

В секции zookeeper настраиваются параметры подключения к Zookeeper.

Например:

zookeeper:
  connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
  connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
  session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
  chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}

Параметры настроек

  • connection-string - Подключение к Zookeeper DS, например ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;

  • connection-timeout-ms - Zookeeper DS таймаут подключения, например ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;

  • session-timeout-ms - Zookeeper DS таймаут сессии, например ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;

  • chroot - Zookeeper DS chroot path, например ZOOKEEPER_DS_CHROOT:/adapter.

2.2.18.3.5. Секция persistence-mode

В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. В случае выбора Prostore автоматически создаются необходимые таблицы.

Например:

persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper

Параметры настроек

  • persistence-mode - настройка хранения данных, например PERSISTENCE_MODE:prostore.

2.2.18.3.6. Секция prostore-rest-client

В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9195}
  http:
    max-pool-size: ${PS_MAX_POOL_SIZE:5}
  persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
  datasource: ${PERSISTENCE_DATASOURCE:}
  counter-prefix: ${COUNTER_PREFIX:counter_}

Параметры настроек

  • host - адрес ProStore, например PS_HOST:localhost;

  • port - порт ProStore, например PS_PORT:9195;

  • max-pool-size - максимальное число подключений к ProStore, например PS_MAX_POOL_SIZE:8;

  • persistence-datamart - настройка хранения данных, например {PERSISTENCE_DATAMART:persistence};

  • datasource - источник данных, например PERSISTENCE_DATASOURCE:, по умолчанию пусто, в этом случае берется единственный датасорс из настроек Простора.

2.2.18.3.7. Секция migration

В секции migration настраиваются миграции Zookeeper для задачи бекапирования.

Например:

migration:
  enabled: ${MIGRATION_ENABLE:false}
  old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}

Параметры настроек

  • enabled - подключение миграции, например {MIGRATION_ENABLE:false};

  • old-connection-string - адрес Zookeeper, например {OLD_ZOOKEEPER_DS_ADDRESS:localhost}.

2.2.18.3.8. Секция backup

В секции backup настраивается бекапирования модуля.

Например:

backup:
  mode: ${BACKUP_MODE:rest} # kafka | rest
  rest:
    uri: ${BACKUP_URI:/backup}
  zk-path: ${COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters}
  commandTopic: ${BACKUP_COMMAND_TOPIC:adapter.command}
  backupTopic: ${BACKUP_TOPIC:adapter.backup}
  statusTopic: ${STATUS_TOPIC:adapter.status}
  kafka:
    consumer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
        group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
        auto.offset.reset: latest
    producer:
      property:
        bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

Параметры настроек

  • mode - режим бекапирования, например BACKUP_MODE:rest;

  • uri - путь к файлу бекапирования в случае выбора REST-сервисов для режима бэкапирования;

  • zk-path - путь к корневой ноде zookeeper для бэкапирования, например {COUNTER_BACKUP_ZK_PATH:/${environment.name}/counter-provider/counters};

  • commandTopic - топик команд бэкапирования, например: {BACKUP_COMMAND_TOPIC:adapter.command};

  • backupTopic - топик для отправки сохраненных данных, например: {BACKUP_TOPIC:adapter.backup};

  • statusTopic - топик для отправки статусов бэкапирования, например: {STATUS_TOPIC:adapter.status}.

2.2.18.3.9. Секция metrics

В секции metrics настраивается порт получения метрик.

Например:

metrics:
  port: ${METRICS_PORT:9837}

Параметры настроек

  • port - Порт для получения метрик, например {METRICS_PORT:9837}.

2.2.19. Настройка утилиты Backup manager

2.2.19.1. Конфигурация утилиты Backup manager (application.yml)

Файл application.yml – основной конфигурационный файл утилиты, в котором задана её логика и порядок работы:

В конфигурации утилиты сохранены:

  • путь к DTM-tools и параметры необходимые для работы утилиты DTM-tools:

    • маска топиков для бекапирования данных СУБД backend.backup.(datamart);

    • адрес Prostore (с переопределением через команду запуска);

  • адрес Kafka и имена топиков для:

    • передачи команд модулям адаптера;

    • получения статусов модулей адаптера;

    • бекапирования данных бекенда Витрины;

    • бекапирования данных модулей адаптеров;

  • путь к рабочей директории резервного копирования (доступный файловому коннектору) с переопределением через команду запуска;

  • хранимый объем топика (значение по умолчанию 1Тб);

  • время хранения топиков бекапа (значение по умолчанию 3 суток).

2.2.19.2. Пример файла application.yml

В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.

logging:
  level:
    org.springframework: OFF
    org.apache: OFF
    ru.itone.dtm.BackupApplicationKt: OFF

spring:
  main:
    banner-mode: OFF

config:
  dtmToolsPath: ${BM_DTM_TOOLS_PATH:./}
  prostorePath: ${BM_PROSTORE_PATH:localhost:9094}
  kafkaBrokers: ${BM_KAFKA_BROKERS:localhost1:9092, localhost2:9092}
  backupDir: ${BM_BACKUP_DIR:./backup}
  backupArchive: ${BM_BACKUP_ARCHIVE:./backup.zip}
  adapterBackupTimeout: ${BM_ADAPTER_BACKUP_TIMEOUT:1}s
  topic:
    adapterCommand: ${BM_ADAPTER_COMMAND_TOPIC:adapter.command}
    adapterCommandBroadcast: ${BM_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
    adapterStatus: ${BM_ADAPTER_STATUS_TOPIC:adapter.status}
    adapterBackup: ${BM_ADAPTER_BACKUP_TOPIC:adapter.backup}
    backendBackupPrefix: ${BM_BACKEND_BACKUP_TOPIC_PREF:backend.backup.}
    backendBackupRetentionBytes: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_BYTES:1000000000000}
    backendBackupRetentionMs: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_MS:259200000}
    initializationStatusTimeout: ${BM_MODULES_WAIT_INIT_TIMEOUT:15}s
    executionStatusTimeout: ${BM_MODULES_WAIT_EXECUTE_TIMEOUT:120}s

backup:
  mode: [rest, kafka] # kafka, rest
  rest-services:
    counter-provider: localhost:9000/backup
    rest-uploader: localhost:8081/backup

2.2.19.3. Параметры конфигурации

Настройка конфигурации Backup manager осуществляется путем редактирования параметров настроек в файле application.yml, где настраиваются секции:

  • logging - настраивается логирование работы модуля;

  • spring - настройки фреймворка Spring;

  • config - указываются настройки утилиты;

  • backup - бекапирования данных СУБД.

2.2.19.3.1. Секция logging

В секции logging настраивается логирование работы модуля

Например:

logging:
  level:
      org.springframework: OFF
      org.apache: OFF
      ru.itone.dtm.BackupApplicationKt: OFF

Параметры настроек

  • org.springframework - логирование фреймворка Spring, например OFF;

  • org.apache - логирование Apache, например OFF;

  • ru.itone.dtm.BackupApplicationKt - логирование утилиты, например OFF.

2.2.19.3.2. Секция spring

В секции spring указываются настройки фреймворка Spring.

Например:

spring:
  main:
      banner-mode: OFF

Параметры настроек

  • banner-mode - режим баннера, например: OFF.

2.2.19.3.3. Секция config

В секции config указываются настройки утилиты.

Например:

config:
  dtmToolsPath: ${BM_DTM_TOOLS_PATH:./}
  prostorePath: ${BM_PROSTORE_PATH:localhost:9094}
  kafkaBrokers: ${BM_KAFKA_BROKERS:localhost1:9092, localhost2:9092}
  backupDir: ${BM_BACKUP_DIR:./backup}
  backupArchive: ${BM_BACKUP_ARCHIVE:./backup.zip}
  adapterBackupTimeout: ${BM_ADAPTER_BACKUP_TIMEOUT:1}
  topic:
      adapterCommand: ${BM_ADAPTER_COMMAND_TOPIC:adapter.command}
      adapterCommandBroadcast: ${BM_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast}
      adapterStatus: ${BM_ADAPTER_STATUS_TOPIC:adapter.status}
      adapterBackup: ${BM_ADAPTER_BACKUP_TOPIC:adapter.backup}
      backendBackupPrefix: ${BM_BACKEND_BACKUP_TOPIC_PREF:backend.backup.}
      backendBackupRetentionBytes: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_BYTES:1000000000000}
      backendBackupRetentionMs: ${BM_BACKEND_BACKUP_TOPIC_RETENTION_MS:259200000}
      initializationStatusTimeout: ${BM_MODULES_WAIT_INIT_TIMEOUT:15}
      executionStatusTimeout: ${BM_MODULES_WAIT_EXECUTE_TIMEOUT:120}

Параметры настроек

  • dtmToolsPath - адрес dtmTools, например: BM_DTM_TOOLS_PATH:./;

  • prostorePath - адрес Prostore, например: BM_PROSTORE_PATH:localhost:9094;

  • kafkaBrokers - адрес брокеров Kafka, например: BM_KAFKA_BROKERS:localhost1:9092, localhost2:9092;

  • backupDir - директория хранения файла бэкапа, например: BM_BACKUP_DIR:./backup;

  • backupArchive - архив бэкапа, например: BM_BACKUP_ARCHIVE:./backup.zip;

  • adapterBackupTimeout - тайм-аут резервного копирования, например: BM_ADAPTER_BACKUP_TIMEOUT:1;

  • topic - имена топиков, например:

    • adapterCommandBroadcast - передачи команд модулям адаптера, например: BM_ADAPTER_COMMAND_BROADCAST_TOPIC:adapter.command.broadcast;

    • adapterStatus - получения статусов модулей адаптера, например: BM_ADAPTER_STATUS_TOPIC:adapter.status;

    • aadapterBackup - бекапирования данных модулей адаптеров, например: BM_ADAPTER_BACKUP_TOPIC:adapter.backup.

2.2.19.3.4. Секция backup

В секции backup указываются настройки бэкапа Kafka или REST-сервисов.

Например:

backup:
  mode: [rest, kafka] # kafka, rest
  rest-services:
    counter-provider: localhost:9000/backup
    rest-uploader: localhost:8081/backup

Параметры настроек

  • mode - режим бэкапирования;

  • counter-provider местонахождения файла бэкапа для сервиса Counter-provider;

  • rest-uploader - местонахождения файла бэкапа для сервиса Rest-uploader.

2.2.20. Настройка Arenadata Cluster Manager (ADCM)

Подробная инструкция по настройке Arenadata Cluster Manager (ADCM) приведена в официальной документации разработчика на странице https://docs.arenadata.io/adcm/.

2.2.21. Настройка Arenadata Streaming (ADS)

Инструкция по настройке Arenadata Streaming (ADS) через Arenadata Cluster Manager (ADCM) приведена в официальной документации к Arenadata Cluster Manager (ADCM) на странице https://docs.arenadata.io/ads/AdminGuide/Config_ADCM.html.

2.2.22. Настройка сервиса журналирования

Сервис журналирования позволяет работать с логами прикладных модулей запущенных в средах WildFly и Kubernetes/OpenShift.

Настройка сервиса журналирования должна быть применена к каждому модулю.

Ниже приведены шаги по настройке сервиса журналирования.

  1. Добавьте зависимости в проект:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.3.4.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>logger-test</artifactId>

<properties>
   <java.version>11</java.version>
   <spring-cloud.version>Hoxton.SR5</spring-cloud.version>
</properties>

<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
   </dependency>

   <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
   </dependency>

   <dependency>
      <groupId>ch.qos.logback.contrib</groupId>
      <artifactId>logback-json-classic</artifactId>
      <version>0.1.5</version>
   </dependency>

   <dependency>
      <groupId>ch.qos.logback.contrib</groupId>
      <artifactId>logback-jackson</artifactId>
      <version>0.1.5</version>
   </dependency>
   <dependency>
      <groupId>net.logstash.logback</groupId>
      <artifactId>logstash-logback-encoder</artifactId>
      <version>6.3</version>
   </dependency>
   <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
   </dependency>
   <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-boot-starter</artifactId>
      <version>3.0.0</version>
   </dependency>
   <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
      <version>3.0.6</version>
   </dependency>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.kafka</groupId>
      <artifactId>spring-kafka</artifactId>
      <version>2.5.9.RELEASE</version>
   </dependency>

</dependencies>
<dependencyManagement>
   <dependencies>
      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>
  1. Подключите FluentBit к приложению как отдельный контейнер в OpenShift:

containers:
 - name: fluent-bit
   image: fluent/fluent-bit:latest
   volumeMounts: #перенос конфигураций, и лог файла из проекта в контейнер
     - name: logger
       mountPath: /fluent-bit/logger/
     - name: fluent-bit-config
       mountPath: /fluent-bit/etc/
   terminationMessagePolicy: File
   envFrom:
     - configMapRef:
         name: logger-fluent-bit-config-env
  1. Создайте файл logback.xml для логирования приложения ( подробнее см. документацию):

Внимание

Обязательно в appender FILE_FLUENT прописать путь до конфигураций FluentBit, иначе в контейнер логи не подтянутся. Например, <file>name-project/docker/fluentbit/conf/log.log</file>.

<configuration debug="true">
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
               <Pattern>
                  %d{yyyy-MM-dd HH:mm:ss}%-5level %logger{36} - %msg%n
               </Pattern>
            </pattern>
      </layout>
   </appender>

   <appender name="FILE_FLUENT" class="ch.qos.logback.core.FileAppender">
      <file>docker/fluentbit/conf/log.log</file>
      <append>false</append>
      <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
               <Pattern>
                  x-b3-traceid=%X{X-B3-TraceId:-} x-b3-spanid=%X{X-B3-SpanId:-} x-b3-parentspanid=%X{X-B3-ParentSpanId:-} x-b3-sampled=%X{X-B3-Sampled:-} x-b3-flags=%X{X-B3-Flags:-} caller_file_name=%file serverEventDatetime="%d" logLevel=%level threadName=%thread  message="%replace(%replace(%m){'\n','\u2028'}){'\"','\''}" exception="%replace(%replace(%ex){'\"','\u2028'}){'\n','\u2028'}%nopex" callerLine=%L callerMethod="%replace(%caller){'\n','\u2028'}" loggerName="%10.10logger" callerClass=%logger{40} levelStr="%level" levelInt="%level" mdc= \n
               </Pattern>
            </pattern>
      </layout>
   </appender>

   <root level="debug" additivity="false">
      <appender-ref ref="STDOUT"/>
      <appender-ref ref="FILE_FLUENT"/>
   </root>
</configuration>
  1. Добавьте описание конфигурации для FluentBit (подробнее см документацию ):

[SERVICE]
      Flush         1
      Log_Level     info
      Daemon        off
      Parsers_File /fluent-bit/etc/parsers.conf
[INPUT]
      Name   tail
      Path        /fluent-bit/logger/log.log
      Tag    kafka-efs
      Buffer_Chunk_Size 400k
      Buffer_Max_Size 6MB
      Mem_Buf_Limit 6MB
      Parser logfmt
      Refresh_Interval 20

[FILTER]
      Name record_modifier
      Match       kafka-efs
      Record      subsystem ${SUBSYSTEM}
      Record      distribVersion ${DISTRIBVERSION}
      Record      deploymentUnit ${DEPLOYMENTUNIT}
      Record      hostName ${HOSTNAME}
      Record      ipAddress ${IPADDRESS}

[FILTER]
      Name        modify
      Match       kafka-efs
      Hard_copy callerClass className

[FILTER]
      Name        record_modifier
      Match       kafka-efs
      Whitelist_key serverEventDatetime
      Whitelist_key subsystem
      Whitelist_key distribVersion
      Whitelist_key deploymentUnit
      Whitelist_key hostName
      Whitelist_key ipAddress
      Whitelist_key logLevel
      Whitelist_key className
      Whitelist_key threadName
      Whitelist_key message
      Whitelist_key x-b3-traceid
      Whitelist_key x-b3-spanid
[FILTER]
      Name    lua
      Match   kafka-efs
      script  convert_date.lua
      call    convert_date_efs

[OUTPUT]
      Name  stdout
      Match kafka-efs
      Format json
      json_date_key time

[OUTPUT]
      Name  http
      Match kafka-efs
      Host logstash-service-gt-tatarstan-test-efs.apps.ocp-public.sbercloud.ru
      Port 80
      Format json
      json_date_key time

Для правильной работы подключите parsers.conf.

[PARSER]
      Name        logfmt
      Format      logfmt
  1. Настройте форматирование даты:

function convert_date_efs(tag, timestamp, record)
  local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
  dt_str = record["serverEventDatetime"]
  local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
  ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
  ts = (ts * 1000) + milliseconds
  record["serverEventDatetime"] = ts
  return 2, timestamp, record
end

function convert_date_pprb(tag, timestamp, record)
  local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
  dt_str = record["serverEventDatetime"]
  local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
  ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
  ts = (ts * 1000) + milliseconds
  record["timestamp"] = ts
  return 2, timestamp, record
end

function convert_date_logstash(tag, timestamp, record)
  local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
  dt_str = record["serverEventDatetime"]
  local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
  ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
  ts = (ts * 1000) + milliseconds
  record["time"] = ts
  return 2, timestamp, record
end
  1. Добавьте параметры модуля:

kind: ConfigMap
apiVersion: v1
metadata:
  name: logger-fluent-bit-config-env
data:
  MODULEID: 1.0.0
  MODULEVERSION: 1.0.0
  NODEID: 12345
  HOSTADDRESS: 0.0.0.0
  SUBSYSTEM: LOGGER-TEST
  DISTRIBVERSION: 1.0.0
  DEPLOYMENTUNIT: TEST-UNIT
  IPADDRESS: 0.0.0.1
  1. Настройте конфигурацию для OpenShift. Для того, чтобы Prometheus мог идентифицировать сервис и собирать с него информацию, создайте Service и укажите путь, на котором располагаются метрики приложения.

apiVersion: v1
kind: Service
metadata:
name: monitoring-rest
annotations:
   description: 'Exposes Prometheus App by CLuster Ip'
   prometheus.io.scrape: 'true'
   prometheus.io.path: '/monitoring-rest/actuator/prometheus'
   prometheus.io.port: '8081'
labels:
   app: monitoring-rest
spec:
type: LoadBalancer
ports:
   - name: http
      port: 9837
      targetPort: 9837
selector:
   app: monitoring-rest

2.2.23. Установка компонента сбора данных запросов и ответов Витрины данных

Компонент сбора данных запросов и ответов Витрины данных реализован с целью проведения бизнес-мониторинга ИЭП процессов обработки запросов типовым ПО витрины данных, как в целом, так и в части функционирования отдельных витрин для последующей передачи данных в СЦЛ.

2.2.23.1. Процесс установки

Общий процесс установки состоит из следующих действий:

  1. Настройка логирования модулей.

  2. Установка и настройка Vector.

  3. Установка и настройка HaProxy.

  4. Установка и настройка fluentbit.

2.2.23.1.1. Настройка логирования модулей

Необходимо настроить формирование логов в формате JSON на стороне модулей:

  • СМЭВ4-адаптер - Модуль исполнения запросов;

  • СМЭВ4-адаптер – Модуль MPPR;

  • BLOB-адаптер;

  • СМЭВ4-адаптер-Модуль подписок;

  • Сервис формирования документов

Для этого в файле logback.xml включите параметр net.logstash.logback.encoder.LogstashEncoder.

Пример logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- keep 30 days' worth of history capped at 3GB total size -->
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

Подробная информация об encoder: https://github.com/logfellow/logstash-logback-encoder

Чтобы включить генерацию СЦЛ в секции logging файлa настроек application.yaml установите значения true.

2.2.23.1.2. Установка и настройка Vector

Установка производится по официальной документации: https://vector.dev/docs/setup/installation/

Пример настройки source:

json_source:
    type: fluent
    address: 0.0.0.0:24226

Пример фильтрации сообщений, имеющих флаг scl:

scl_tags_filter:
type: filter
inputs:
  - json_source
condition:
  type: "vrl"
  source: |-
    exists(.tags) && includes(array!(.tags), "TYPE_SCL")

Пример парсинга scl-сообщений:

scl_message_remap:
    type: remap
    inputs:
    - scl_tags_filter
    source: |-
    . = parse_json!(.message)

Пример отправки scl-сообщений в Kafka:

podd_agent_sink:
    type: kafka
    inputs:
      - scl_message_remap
    bootstrap_servers: kafka:9092
    topic: "<префикс>.scl.signal"
    acknowledgements: true
    compression: "gzip"
    encoding:
      codec: json
    healthcheck: true
2.2.23.1.3. Установка и настройка HaProxy

Установка производится по официальной документации: http://docs.haproxy.org/

Для настройки HaProxy в секции backend перечислите список установленных инстансов Vector.

Пример файла haproxy.cfg:

global
    log 127.0.0.1 local2

    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    maxconn 4000
    user haproxy
    group haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode tcp
    log global
    retries 3

    maxconn 3000

listen stats
    bind                 0.0.0.0:1936
    mode                 http
    stats                enable
    stats                uri /

frontend services
    bind 0.0.0.0:24226
    default_backend services
    mode tcp

backend services
    balance roundrobin
    mode tcp
    server vector01 vector-01:24226
    server vector02 vector-02:24226
2.2.23.1.4. Установка и настройка Fluent bit

Установка производится по официальной документации: (https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit).

Fluent bit должен быть настроен на чтение файлов логов приложений.

Пример файла конфигурации fluent-bit.conf:

[SERVICE]
    flush        5
    daemon       off
    log_level    info
    parsers_file parsers.conf
[INPUT]
    name tail
    path <путь до лог файла приложения>
    tag *
    parser json
[OUTPUT]
    name forward
    match *
    host haproxy
    port 24226

Пример файла parsers.conf:

[PARSER]
    Name        json
    Format      json

На этом настройка fluentbit завершена.

2.2.23.1.5. Работа с БД ClickHouse

В рамках технического решения по хранению протоколируемых запросов и ответов с возможностью извлечение данных по уникальному идентификатору реализовано использование колоночной аналитической базы данных ClickHouse.

Ключевые функциональные особенности базы данных ClickHouse:

  • движок базы данных: по умолчанию ClickHouse использует движок Atomic;

  • движок таблиц: MergeTree;

  • версия ClickHouse: LTS;

  • запрос на создание таблицы хранения логов в ClickHouse: CREATE TABLE.

Пример создания таблицы:

CREATE TABLE {Название БД}.logs
(
   logger String,
   timestamp DateTime,
   level String,
   requestId String,
   message String,
   messageType String,
   customerId String,
   customerOgrn String,
   queryMnemonic String
)
ENGINE = MergeTree()
PARTITION BY timestamp
ORDER BY timestamp
SETTINGS index_granularity = 8192;

Пример задания конфигурационных настроек:

clickhouse_default_config:
clickhouse:
   logger:
      level: trace
      log: /var/log/clickhouse-server/clickhouse-server.log
      errorlog: /var/log/clickhouse-server/clickhouse-server.err.log
      size: 1000M
      count: 10
   http_port: 8123
   tcp_port: 9000
   listen_host: 0.0.0.0
   max_connections: 4096
   keep_alive_timeout: 3
   user_directories:
      users_xml:
      path: users.xml
      local_directory:
      path: "{{ clickhouse_root_data_folder }}/access/"
   path: "{{ clickhouse_root_data_folder | add_slash }}"
2.2.23.1.6. Включение / выключение отправки сообщений в СЦЛ

Отправка логов в СЦЛ осуществляется автоматически после корректной настройки компонента.

Для выключения отправки логов закомментируйте блок отправки сообщений podd_agent_sink в Kafka в настройках Vector.

2.2.24. Настройка Агента СМЭВ4

Порядок установки и описание настроек Агента СМЭВ4 см. в документе: «Руководство администратора СМЭВ4».

Описание формата взаимодействия между Агентом СМЭВ4 и СМЭВ4-адаптером (название топиков, формат сообщений, схема взаимодействия) описан в разделе Спецификация Модуля исполнения запросов.

2.2.24.1. Настройка взаимодействия программы с Агентом СМЭВ4

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

  1. Настройте Агента СМЭВ4 и СМЭВ4-адаптер на работу с одним и тем же брокером сообщения Kafka:

  • Если вместе с Агентом СМЭВ4 устанавливается брокер сообщений Kafka, а Агент СМЭВ4 преднастроен на работу именно с этим экземпляром брокера сообщений, то укажите адрес этого брокера сообщений в конфигурационном файле СМЭВ4-адаптера (application.yml), параметр kafkaUrl.

  • Если вместе с Агентом СМЭВ4 не устанавливается брокер сообщений Kafka, то в Агенте СМЭВ4 согласно его документации настройте работу с брокером сообщений Kafka, установленным с программой. Для этого используйте адрес сервера Kafka из конфигурационного файла СМЭВ4-адаптера (application.yml), параметр kafkaUrl.

  1. Настройте названия топиков (см. Таблица 2.17) для обмена сообщениями в конфигурационном файле СМЭВ4-адаптера (application.yml).

Таблица 2.17 Название топиков для обмена сообщениями между СМЭВ4-адаптером и Агентом СМЭВ4

Назначение

Настройка

Значение по умолчанию

1

Получение запросов

client.kafka.query.consumer.rqTopicName

query.rq

2

Ответы на запросы

client.kafka.query.producer.rsTopicName

query.rs

3

Ошибки запросов

client.kafka.query.producer.errTopicName

query.err

4

Результат запроса оценки

client.kafka.query.estimateTopicName

query.query.estimation.rs

Формат обмена электронными сообщениями с СМЭВ4-адаптером описан в разделе Спецификация Модуля исполнения запросов.

2.3. Настройка сервиса мониторинга

Для мониторинга состояния работы Типового ПО «Витрина данных» используется связка Grafana + Prometheus.

Prometheus — система мониторинга, обладающая возможностями тонкой настройки метрик. Prometheus используется для отслеживания состояния работы компонентов системы на низком уровне.

Grafana — инструмент с открытым исходным кодом для визуализации данных из различных систем сбора статистики. Grafana используется для представления в графическом виде временных рядов и текстовых данных.

Примечание

Описание установки системы мониторинга приведено в разделе Установка системы мониторинга документа «Руководство по установке Типового ПО «Витрина данных»».

2.3.1. Предоставление источника данных

Существует два способа предоставления источника данных:

  • с помощью конфигурационного файла;

  • с помощью интерфейса Grafana.

Каждый файл конфигурации предоставления источника данных содержит манифест, в котором указывается желаемое состояние набора подготовленных источников данных.

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

Ниже приведен пример настройки источника данных TestData , который можно использовать для информационных панелей.

  1. В директории provisioning/datasources/ создайте файл dtm.yml со следующим содержимым:

apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: <ip:port>
    jsonData:
      httpMethod: POST
      manageAlerts: false
      prometheusType: Prometheus
  1. Перезапустите Grafana, чтобы загрузить новые изменения.

  2. На боковой панели наведите курсор на значок « Конфигурация» (шестеренка) и нажмите «Источники данных». TestData появится в списке источников данных.

    Примечание

    Папка provisioning/datasources/ находится в /etc/grafana/.

Для работы Prometheus с Grafana необходимо добавить Prometheus в качестве источника получения данных в Grafana.

  1. Откройте Grafana — Configuration — Data sources, нажмите Add data source и выберите Prometheus.

Выбор Prometheus в качестве источника получения данных

Рисунок - 2.13 Выбор Prometheus в качестве источника получения данных

  1. В поле URL введите адрес и порт, по которому доступен Prometheus.

Ввод URL Prometheus

Рисунок - 2.14 Ввод URL Prometheus

  1. Внизу страницы нажмите кнопку Save & test

Применение настроек

Рисунок - 2.15 Применение настроек

После успешной проверки Prometheus будет добавлен в Grafana.

2.3.2. Предоставление информационной панели

Определить поставщика информационных панелей можно также двумя способами:

  • с помощью конфигурационного файла;

  • с помощью интерфейса Grafana.

Каждый файл конфигурации информационной панели содержит манифест, который определяет желаемое состояние набора поставщиков информационной панели.

Поставщик информационной панели сообщает Grafana, где найти и где разместить определения информационной панели.

Grafana регулярно проверяет изменения в определениях панели мониторинга (по умолчанию каждые 10 секунд).

В директории provisioning/dashboards/ создайте файл dtm.yml со следующим содержимым:

apiVersion: 1

providers:
  - name: 'DTM Metrics' # Уникальное идентифицируемое имя поставщика
     folder: 'dtm-metrics' # Папка, в которую помещаются дашборды
     type: file
     disableDeletion: false
     updateIntervalSeconds: 10
     allowUiUpdates: false
     options:
       path: <path to dashboard definitions>
       foldersFromFilesStructure: false

Примечание

Папка provisioning/dashboards/ находится в /etc/grafana/.

  1. Нажмите на иконку + и выберите «Import dashboard».

Меню импорта Панели

Рисунок - 2.16 Меню импорта Панели

  1. В открывшемся окне нажмите на плашку «Upload dashboard JSON file» и загрузите файл нужной панели.

Загрузка файла панели

Рисунок - 2.17 Загрузка файла панели

2.3.2.1. Настройка конфигурационного файла Prometheus

Пример конфигурационного файла prometheus.yml:

global:
  scrape_timeout:      5s
  scrape_interval:     5s

scrape_configs:
  - job_name: 'smevql-server'
    static_configs:
      - targets: ['ip:8080']

  - job_name: 'blob-adapter'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'counter-provider'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'csv-uploader'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'data-uploader'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'podd-adapter-group-repl'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'podd-adapter-group-tp'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9843']

  - job_name: 'podd-adapter-import-tp'
    static_configs:
      - targets: ['ip:19843']

  - job_name: 'podd-adapter-mppr'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9843']

  - job_name: 'podd-adapter-mppw'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9843']

  - job_name: 'podd-adapter-query'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'podd-adapter-replicator'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'podd-avro-defragmentator'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'printable-form-service'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'rest-uploader'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9837']

  - job_name: 'smev3-adapter'
    static_configs:
      # изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
      - targets: ['ip:9033']