.. _check_adapter_config: Конфигурация Агента проверок (application.yml) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл ``application.yml`` – основной конфигурационный файл Агента проверок, в котором задана логика и порядок работы модуля: .. _check_application.yml: Пример файла application.yml ################################### В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач. .. code-block:: yaml 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} Параметры конфигурации ^^^^^^^^^^^^^^^^^^^^^^ Настройка конфигурации сервиса генерации уникального номера осуществляется путем редактирования параметров настроек в файле ``application.yml``, где настраиваются секции: - ``management`` – настройка внутренних эндпоинтов и метрик; - ``spring`` – настройка Spring Boot и профиля работы приложения; - ``server`` – настройка использования альтернативного значения серверного порта; - ``adapter`` – настройка параметров вызова внешних сервисов; - ``dqf`` – настройка параметров передачи данных аудита гостех; - ``nsud`` – настройка взаимодействия с ЕИП НСУД; - ``agg`` – настройка плана выполнения агрегаций; - ``incident`` – настройка отправки единичных инцидентов качества. Секция management ################### В секции ``management`` хранятся настройки внутренних эндпоинтов и метрик. Например: .. code-block:: yaml 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.*`` - метки, добавляемые к метрикам. Секция spring ################### В секции ``spring`` хранятся настройки Spring Boot и профиля работы приложения. Например: .. code-block:: yaml spring: task: scheduling: pool: size: 5 profiles: active: ${PROFILES_ACTIVE:dqf} **Параметры настроек** - ``task.scheduling.pool.size`` - размер пула планировщика задач Spring; - ``profiles.active`` - активные профили приложения. Для задачи проверки качества данных используется профиль ``dqf``. Секция server ################### В секции ``server`` хранятся настройки использования альтернативного значения серверного порта. Существует два варианта изменения дефолтного значения номера порта: 1. Значение может быть передано через переменную окружения ``SERVER_PORT``. В случае запуска приложения с помощью **systemd** переменную необходимо передать через указание ``Environment="HTTP_PORT=3010"`` в ``.service-файле``. В случае прямого запуска, переменная должна быть задана на уровне ОС на момент запуска приложения. 2. Возможно указать в конфигурационном файле следующую настройку: .. code-block:: yaml server: port: ${HTTP_PORT:3010} **Параметры настроек** - ``port`` - порт сервера, значение может быть изменено на нужное. Секция adapter ################### В секции ``adapter`` хранятся настройки параметров вызова внешних сервисов. Например: .. code-block:: yaml 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`` - конечное время паузы перед выполнением новой попытки вызова при получении ошибки. Секция dqf ################### В секции ``dqf`` хранятся настройки параметров передачи данных аудита гостех. Например: .. code-block:: yaml 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``). Секция nsud ################### В секции ``nsud`` хранятся настройки взаимодействия с ЕИП НСУД. Например: .. code-block:: yaml 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``. Секция agg ################### В секции ``agg`` хранятся настройки плана выполнения агрегаций. Например: .. code-block:: yaml 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)). Секция incident ################### В секции ``incident`` хранятся настройки отправки единичных инцидентов качества. Например: .. code-block:: yaml 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)). .. _check_adapter_schema_config: Конфигурационный файл с описанием проверяемой схемы ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Агенту проверок, для построения внутренней модели со связями таблиц, необходим файл с описанием проверяемой схемы и связей таблиц внутри этой схемы в формате приведенном ниже: .. code-block:: sql 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``.