2. Конфигурация Агента проверок (application.yml)

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

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

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

management:
  endpoint:
    health:
      show-details: always
  prometheus:
    metrics:
      export:
        enabled: true
  endpoints:
    web:
      exposure:
        include: health, prometheus, configprops, env
  metrics:
    tags:
      application: check-adapter-dqf
      namespace: ${POD_NAMESPACE:local}
      pod: ${POD_NAME:local}
      node_name: ${NODE_NAME:local}
spring:
  task:
    scheduling:
      pool:
        size: 5
  profiles:
    active: ${PROFILES_ACTIVE:dqf}
server:
  port: ${HTTP_PORT:3010}
adapter:
  adapterNg:
    http:
      url: http://localhost:3010/
      useAdapter: ${USE_NG_ADAPTER:true}
  podd:
    http:
      url: http://localhost:8172/
  prostore:
    jdbc:
      prostoreUrl: ${PROSTORE_JDBC_URL:jdbc:prostore://{prostore_host}:{prostore_port}/}
      driverClassName: ${PROSTORE_JDBC_DRIVER_CLASS:ru.datamart.prostore.jdbc.Driver}
    http:
      prostoreUrl: ${PROSTORE_HTTP_URL:http://{prostore_host}:{prostore_port}/}
      maxConnections: ${PROSTORE_MAX_CONNECTIONS:1000}
      fetchSize: ${PROSTORE_FETCH_SIZE:10000}
      maxInMemorySize: ${PROSTORE_MAX_IN_MEMORY_SIZE:16777216}
      concurrency: ${PROSTORE_THREAD_COUNT:16}
  webclient:
    input:
      connProvider:
        maxConnections: ${ADAPTER_QUALITY_RECORD_INPUT_MAX_CONNECTIONS:1000}
      retry:
        initialDelayMs: ${ADAPTER_QUALITY_RECORD_INPUT_INITIAL_DELAY_MS:1000}
        maxDelayMs: ${ADAPTER_QUALITY_RECORD_INPUT_MAX_DELAY_MS:5000}
    output:
      connProvider:
        maxConnections: ${ADAPTER_QUALITY_RECORD_OUTPUT_MAX_CONNECTIONS:1000}
        maxIdleTime: ${ADAPTER_QUALITY_RECORD_OUTPUT_MAX_IDLE_TIME:60}
        maxLifeTime: ${ADAPTER_QUALITY_RECORD_OUTPUT_MAX_LIFE_TIME:120}
        evictInBackground: ${ADAPTER_QUALITY_RECORD_OUTPUT_EVICT_IN_BACKGROUND:30}
      retry:
        initialDelayMs: ${ADAPTER_QUALITY_RECORD_OUTPUT_INITIAL_DELAY_MS:1000}
        maxDelayMs: ${ADAPTER_QUALITY_RECORD_OUTPUT_MAX_DELAY_MS:5000}
    execAlg:
      connProvider:
        maxConnections: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_MAX_CONNECTIONS:1000}
        maxIdleTime: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_MAX_IDLE_TIME:60}
        maxLifeTime: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_MAX_LIFE_TIME:120}
        evictInBackground: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_EVICT_IN_BACKGROUND:30}
      retry:
        initialDelayMs: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_INITIAL_DELAY_MS:1000}
        maxDelayMs: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_MAX_DELAY_MS:5000}
dqf:
  quality:
    bufferSize: 1000
    capacity:
      incomeQueue: ${DQF_QUALITY_CAPACITY_INCOME_QUEUE:1000}
      outcomeQueue: ${DQF_QUALITY_CAPACITY_INCOME_QUEUE:1000}
    threads:
      recordThreads: ${DQF_QUALITY_RECORD_THREAD_COUNT:1}
      checkThreads: ${DQF_QUALITY_CHECK_THREAD_COUNT:1}
      consumerAsyncThreads: ${DQF_QUALITY_CONSUMER_ASYNC_THREADS:16}
  schema: ${DQF_SCHEMA:reg_datamart_dqf}
nsud:
  nsudCron: ${NSUD_CRON_TASK:0 */5 * * * *}
  nsudUrlList: ${NSUD_URL_LIST:http://{agent_host}:{agent_port}/04PV02/pkch/api/v3/dqf_check_versions}
  nsudUrlAck: ${NSUD_URL_ACK:http://{agent_host}:{agent_port}/04PV02/pkch/api/v3/dqf_check_versions/activations}
  useHash: ${NSUD_USE_HASH:true}
  pebble:
    interval: ${NSUD_PEBBLE_INTERVAL:PT30s}
    idleDelay: ${NSUD_PEBBLE_IDLE_DELAY:PT1m}
    pebbleRefresh: ${NSUD_PEBBLE_REFRESH:PT5m}
  datamarts:
    - {имя основной схемы, подлежащей проверке}
agg:
  aggCron: ${AGGREGATION_CRON_TASK: 0 0 1 * * *}
  aggArmDsCron: ${AGGREGATION_ARM_DS_CRON_TASK: 0 0 1 * * *}
  aggUrl: ${AGGREGATION_URL:http://{agent_host}:{agent_port}/04PV02/pkch/api/v3/dqf_check_reports}
  aggArmDsStatUrl: ${AGGREGATION_DS_STAT_URL:http://{agent_host}:{agent_port}/04PV02/pmd/api/v3/data_mart_check_adapter_stats}
incident:
  limitCount: ${INC_RATE_LIMITER_COUNT:100}
  limitCron: ${INC_RATE_LIMITER_CRON:0 0 0 ? * 1}
  batchSize: ${INC_BATCH_SIZE:100}
  incUrl: ${INC_URL:http://{agent_host}:{agent_port}}/04PV02/pue/api/v3/incidents/dqf_quality_check}

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

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

  • management – настройка внутренних эндпоинтов и метрик;

  • spring – настройка Spring Boot и профиля работы приложения;

  • server – настройка использования альтернативного значения серверного порта;

  • adapter – настройка параметров вызова внешних сервисов;

  • dqf – настройка параметров передачи данных аудита гостех;

  • nsud – настройка взаимодействия с ЕИП НСУД;

  • agg – настройка плана выполнения агрегаций;

  • incident – настройка отправки единичных инцидентов качества.

3.1. Секция management

В секции management хранятся настройки внутренних эндпоинтов и метрик.

Например:

management:
  endpoint:
    health:
      show-details: always
  prometheus:
    metrics:
      export:
        enabled: true
  endpoints:
    web:
      exposure:
        include: health, prometheus, configprops, env
  metrics:
    tags:
      application: check-adapter-dqf
      namespace: ${POD_NAMESPACE:local}
      pod: ${POD_NAME:local}
      node_name: ${NODE_NAME:local}

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

  • endpoint.health.show-details - детализация статуса health;

  • prometheus.metrics.export.enabled - экспорт метрик Prometheus;

  • endpoints.web.exposure.include - список доступных HTTP-эндпоинтов;

  • metrics.tags.* - метки, добавляемые к метрикам.

3.2. Секция spring

В секции spring хранятся настройки Spring Boot и профиля работы приложения.

Например:

spring:
  task:
    scheduling:
      pool:
        size: 5
  profiles:
    active: ${PROFILES_ACTIVE:dqf}

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

  • task.scheduling.pool.size - размер пула планировщика задач Spring;

  • profiles.active - активные профили приложения. Для задачи проверки качества данных используется профиль dqf.

3.3. Секция server

В секции server хранятся настройки использования альтернативного значения серверного порта.

Существует два варианта изменения дефолтного значения номера порта:

  1. Значение может быть передано через переменную окружения SERVER_PORT. В случае запуска приложения с помощью systemd переменную необходимо передать через указание Environment="HTTP_PORT=3010" в .service-файле.

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

  1. Возможно указать в конфигурационном файле следующую настройку:

server:
  port: ${HTTP_PORT:3010}

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

  • port - порт сервера, значение может быть изменено на нужное.

3.4. Секция adapter

В секции adapter хранятся настройки параметров вызова внешних сервисов.

Например:

adapter:
  adapterNg:
    http:
      url: http://localhost:3010/
      useAdapter: ${USE_NG_ADAPTER:true}
  podd:
    http:
      url: http://localhost:8172/
  prostore:
    jdbc:
      prostoreUrl: ${PROSTORE_JDBC_URL:jdbc:prostore://{prostore_host}:{prostore_port}/}
      driverClassName: ${PROSTORE_JDBC_DRIVER_CLASS:ru.datamart.prostore.jdbc.Driver}
    http:
      prostoreUrl: ${PROSTORE_HTTP_URL:http://{prostore_host}:{prostore_port}/}
      maxConnections: ${PROSTORE_MAX_CONNECTIONS:1000}
    fetchSize: ${PROSTORE_FETCH_SIZE:10000}
    maxInMemorySize: ${PROSTORE_MAX_IN_MEMORY_SIZE:16777216}
    concurrency: ${PROSTORE_THREAD_COUNT:16}
  webclient:
    input:
      connProvider:
        maxConnections: ${DQF_QUALITY_RECORD_INPUT_MAX_CONNECTIONS:1000}
      retry:
        initialDelayMs: ${ADAPTER_QUALITY_RECORD_INPUT_INITIAL_DELAY_MS:1000}
        maxDelayMs: ${ADAPTER_QUALITY_RECORD_INPUT_MAX_DELAY_MS:5000}
    output:
      connProvider:
        maxConnections: ${DQF_QUALITY_RECORD_OUTPUT_MAX_CONNECTIONS:1000}
        maxIdleTime: ${DQF_QUALITY_RECORD_OUTPUT_MAX_IDLE_TIME:60}
        maxLifeTime: ${DQF_QUALITY_RECORD_OUTPUT_MAX_LIFE_TIME:120}
        evictInBackground: ${DQF_QUALITY_RECORD_OUTPUT_EVICT_IN_BACKGROUND:30}
      retry:
        initialDelayMs: ${ADAPTER_QUALITY_RECORD_OUTPUT_INITIAL_DELAY_MS:1000}
        maxDelayMs: ${ADAPTER_QUALITY_RECORD_OUTPUT_MAX_DELAY_MS:5000}
    execAlg:
      connProvider:
        maxConnections: ${DQF_QUALITY_RECORD_EXEC_ALG_MAX_CONNECTIONS:1000}
        maxIdleTime: ${DQF_QUALITY_RECORD_EXEC_ALG_MAX_IDLE_TIME:60}
        maxLifeTime: ${DQF_QUALITY_RECORD_EXEC_ALG_MAX_LIFE_TIME:120}
        evictInBackground: ${DQF_QUALITY_RECORD_EXEC_ALG_EVICT_IN_BACKGROUND:30}
      retry:
        initialDelayMs: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_INITIAL_DELAY_MS:1000}
        maxDelayMs: ${ADAPTER_QUALITY_RECORD_EXEC_ALG_MAX_DELAY_MS:5000}

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

  • adapterNg.http.url - URL сервиса ИУА;

  • adapterNg.http. useAdapter - используется ли ИУА для взаимодействия со СМЭВ 3;

  • podd.http.url - URL сервиса Агент СМЭВ 4, необходимо указывать порт для взаимодействия именно через Rest-api (по умолчанию в Агенте СМЭВ 4 8172);

  • prostore.jdbc.* - JDBC-параметры подключения к Prostore;

  • prostore.http.* - HTTP-параметры подключения к Prostore;

  • fetchSize - количество записей, получаемых при поточной выборке из компонента Prostore;

  • pormaxInMemorySizet - буферизация данных в памяти для кодеков webclient;

  • concurrency - количество потоков трансфорирующих данные, после извлечения;

  • webclient.input.connProvider.maxConnections - максимальное число одновременно открытых соединений в пуле;

  • webclient.input.retry.initialDelayMs - начальное время паузы перед выполнением новой попытки вызова при получении ошибки;

  • webclient.input.retry.maxDelayMs - конечное время паузы перед выполнением новой попытки вызова при получении ошибки;

  • webclient.output.connProvider.maxIdleTime - максимальное время ожидания без активности для одного соединения;

  • webclient.output.connProvider.maxLifeTime - общее время жизни соединения от момента его создания;

  • webclient.output.connProvider.evictInBackground - интервал, с которым фоновой задачей будет выполняться проверка и удаления истекших (idle/expired) соединений;

  • webclient.output.retry.initialDelayMs - начальное время паузы перед выполнением новой попытки вызова при получении ошибки;

  • webclient.output.retry.maxDelayMs - конечное время паузы перед выполнением новой попытки вызова при получении ошибки;

  • webclient.execAlg.connProvider.maxConnections - максимальное число одновременно открытых соединений в пуле;

  • webclient.execAlg.connProvider. maxIdleTime - максимальное время ожидания без активности для одного соединения;

  • webclient.execAlg.connProvider.maxLifeTime - общее время жизни соединения от момента его создания;

  • webclient.execAlg.connProvider.evictInBackground - интервал, с которым фоновой задачей будет выполняться проверка и удаления истекших (idle/expired) соединений;

  • powebclient. execAlg.retry.initialDelayMsrt - начальное время паузы перед выполнением новой попытки вызова при получении ошибки;

  • webclient.execAlg.retry.maxDelayMs - конечное время паузы перед выполнением новой попытки вызова при получении ошибки.

3.5. Секция dqf

В секции dqf хранятся настройки параметров передачи данных аудита гостех.

Например:

dqf:
  quality:
    bufferSize: 1000
    capacity:
      incomeQueue: ${DQF_QUALITY_CAPACITY_INCOME_QUEUE:1000}
      outcomeQueue: ${DQF_QUALITY_CAPACITY_INCOME_QUEUE:1000}
    threads:
      recordThreads: ${DQF_QUALITY_RECORD_THREAD_COUNT:1}
      checkThreads: ${DQF_QUALITY_CHECK_THREAD_COUNT:1}
      consumerAsyncThreads: ${DQF_QUALITY_CONSUMER_ASYNC_THREADS:16}
  schema: ${DQF_SCHEMA:reg_datamart_dqf}

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

  • bufferSize - размер внутреннего пакета обработки;

  • incomeQueue - размер внутренней очереди извлечения данных;

  • outcomeQueue - размер очереди на отправку в ПО Prostore;

  • recordThreads - количество тредов на получение списка идентификаторов;

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

  • consumerAsyncThreads - количество тредов на извлечение данных из внутренней очереди;

  • schema - наименование служебной схемы (формируется по шаблону: {имя_основной_схемы}_dqf).

3.6. Секция nsud

В секции nsud хранятся настройки взаимодействия с ЕИП НСУД.

Например:

nsud:
  nsudCron: ${NSUD_CRON_TASK:0 */5 * * * *}
  nsudUrlList: ${NSUD_URL_LIST:http://{agent_host}:{agent_port}/04PV02/pkch/api/v3/dqf_check_versions}
  nsudUrlAck: ${NSUD_URL_ACK:http://{agent_host}:{agent_port}/04PV02/pkch/api/v3/dqf_check_versions/activations}
  useHash: ${NSUD_USE_HASH:true}
  pebble:
    interval: ${NSUD_PEBBLE_INTERVAL:PT30s}
    idleDelay: ${NSUD_PEBBLE_IDLE_DELAY:PT1m}
    pebbleRefresh: ${NSUD_PEBBLE_REFRESH:PT5m}
  datamarts:
    - {имя основной схемы, подлежащей проверке}

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

  • nsudCron - периодичность получения списка проверок;

  • nsudUrlList - адрес для получения списка проверок качества данных (необходимо указывать порт для взаимодействия именно через REST API (по умолчанию в Агенте СМЭВ 4 8172));

  • nsudUrlAck - адрес подтверждения применения проверок качества данных (необходимо указывать порт для взаимодействия именно через REST API (по умолчанию в Агенте СМЭВ 4 8172));

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

3.7. Секция agg

В секции agg хранятся настройки плана выполнения агрегаций.

Например:

agg:
  aggCron: ${AGGREGATION_CRON_TASK: 0 0 1 * * *}
  aggArmDsCron: ${AGGREGATION_ARM_DS_CRON_TASK: 0 0 1 * * *}
  aggUrl: ${AGGREGATION_URL:http://{agent_host}:{agent_port}/04PV02/pkch/api/v3/dqf_check_reports}
  aggArmDsStatUrl: ${AGGREGATION_DS_STAT_URL:http://{agent_host}:{agent_port}/04PV02/pmd/api/v3/data_mart_check_adapter_stats}

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

  • aggCron - периодичность запуска подсчета агрегированной статистики для передачи в ЕИП НСУД (рекомендуется устанавливать 1 раз в день);

  • aggArmDsCron - периодичность запуска подсчета агрегированной статистики для отображений виджета ТПО УД (рекомендуется устанавливать 1 раз в день);

  • aggUrl - адрес отправки агрегированной статистики в ЕИП НСУД (необходимо указывать порт для взаимодействия именно через REST API (по умолчанию в Агенте СМЭВ 4 8172));

  • aggArmDsStatUrl - адрес отправки агрегированной статистики в разрезе таблиц в ЕИП НСУД (необходимо указывать порт для взаимодействия именно через Rest-api (по умолчанию в Агенте СМЭВ 4 8172)).

3.8. Секция incident

В секции incident хранятся настройки отправки единичных инцидентов качества.

Например:

incident:
  batchSize: ${INC_BATCH_SIZE:100}
  incUrl: ${INC_URL:http://{agent_host}:{agent_port}}/04PV02/pue/api/v3/incidents/dqf_quality_check}

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

  • batchSiz - размер пакета, передаваемого за раз в ЕИП НСУД;

  • incUrl - адрес для передачи единичных инцидентов в ЕИП НСУД;

  • aggUrl - адрес отправки агрегированной статистики в ЕИП НСУД (необходимо указывать порт для взаимодействия именно через REST API (по умолчанию в Агенте СМЭВ 4 8172)).

4. Конфигурационный файл с описанием проверяемой схемы

Агенту проверок, для построения внутренней модели со связями таблиц, необходим файл с описанием проверяемой схемы и связей таблиц внутри этой схемы в формате приведенном ниже:

CREATE TABLE vehicle.owners (
  id            UUID        NOT NULL,
  name          VARCHAR(255) NOT NULL,
  birthdate     DATE         NULL,
  PRIMARY KEY (id)
);

CREATE TABLE vehicle.cars (
  id            UUID        NOT NULL,
  owner_id      UUID        NOT NULL,
  model         VARCHAR(255) NOT NULL,
  manufacture_year INTEGER    NULL,
  PRIMARY KEY (id)
);

CREATE TABLE vehicle.repairs (
  id            UUID        NOT NULL,
  car_id        UUID        NOT NULL,
  owner_id      UUID        NOT NULL,
  repair_date   DATE        NOT NULL,
  description   TEXT        NULL,
  PRIMARY KEY (id)
);

-- Foreign key constraints
ALTER TABLE vehicle.cars
  ADD CONSTRAINT fk_cars_owner
    FOREIGN KEY (owner_id)
    REFERENCES vehicle.owners(id);

ALTER TABLE vehicle.repairs
  ADD CONSTRAINT fk_repairs_car
    FOREIGN KEY (car_id)
    REFERENCES vehicle.cars(id);

ALTER TABLE vehicle.repairs
  ADD CONSTRAINT fk_repairs_owner
    FOREIGN KEY (owner_id)
    REFERENCES vehicle.owners(id);

Имя файла необходимо формировать по формату {имя проверяемой схемы}.sql в данном случае vehicle.sql.