2. Конфигурация модуля REST-Uploader (application.yml)

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

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

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

http-server:
  port: ${SERVER_PORT:8081}

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

send:
  file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:512}

environment:
  # Название окружения
  name: ${ENVIRONMENT_NAME:test}

data-storage:
  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

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}

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}

auth:
  secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
  enabled: ${AUTH_ENABLED:true}
  access-list-path: rest-uploader/ids

metrics:
  port: ${METRICS_PORT:9837}

scheduler:
  redis-check-request-timeout: ${REDIS_CHECK_REQUEST_TIMEOUT:60}

# Настройки парсера 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}
  # опция позволяет парсить мультистроковые значения
  multiline-limit: 0

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}

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

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

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

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

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

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

  • data-storage - директория хранения файлов для типа dir;

  • conditions - включение форматно-логического контроля и поведение при обнаружении ошибок;

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

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

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

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

  • auth- указывается секрет для валидации токенов;

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

  • scheduler - настройка таймаута отправки запроса в Redis;

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

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

3.1. Секция http-server

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

Например:

http-server:
  port: ${SERVER_PORT:8081}

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

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

3.2. Секция executor

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

Например:

executor:
  reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}

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

  • reader-pool-size - Размер пула для запросов, например EXECUTOR_READER_POOL_SIZE:20

3.3. Секция send

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

Например:

send:
  file-size-restriction: ${SEND_FILE_SIZE_RESTRICTION:512}

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

  • file-size-restriction - ограничение на размер загружаемого файла, например SEND_FILE_SIZE_RESTRICTION:512.

3.4. Секция environment

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

Например:

environment:
  name: ${ENVIRONMENT_NAME:test}

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

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

3.5. Секция data-storage

В секции data-storage указывается директория хранения файлов для типа dir.

Например:

data-storage:
  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

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

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

3.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;

3.6.1. Режимы настройки mode

Для настройки 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 Журнал по группе файлов.

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

3.8. Секция 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.

3.9. Секция 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}

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

  • type - тип подключения к Redis (STANDALONE/CLUSTER);

  • connection-string - указывается список серверов для подключения (перечисление через запятую);

  • password - пароль для подключения;

  • max-pool-size - устанавливается максимальный размер пула;

  • max-pool-waiting - устанавливается максимальный размер пула ожидающих команд;

  • max-waiting-handlers - устанавливается максимальный размер ожидающих обработчиков.

3.10. Секция auth

Секция auth служит для хранения секрета валидации токена.

Например:

auth:
  secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
  enabled: ${AUTH_ENABLED:true}

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

  • secret - cекрет для валидации токенов, например AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C;

  • enabled - включение/отключение аутентификации, например AUTH_ENABLED:true.

3.11. Секция metrics

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

Например:

metrics:
  port: ${METRICS_PORT:9837}

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

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

3.12. Секция scheduler

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

Например:

scheduler:
  redis-check-request-timeout: ${REDIS_CHECK_REQUEST_TIMEOUT:60}

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

  • redis-check-request-timeout - таймаут отправки запроса в Redis, например REDIS_CHECK_REQUEST_TIMEOUT:60.

3.13. Секция 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 - параметры парсинга мультистроковых значений.

Внимание

Парсер может зависать если в данных встречаются вложенные неэкранированные кавычки.

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

  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»].

3.14. Секция 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}.