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 хранятся настройки использования альтернативного значения серверного порта.
Существует два варианта изменения дефолтного значения номера порта:
Значение может быть передано через переменную окружения
SERVER_PORT. В случае запуска приложения с помощью systemd переменную необходимо передать через указаниеEnvironment="HTTP_PORT=3010"в.service-файле.
В случае прямого запуска, переменная должна быть задана на уровне ОС на момент запуска приложения.
Возможно указать в конфигурационном файле следующую настройку:
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.