8. Конфигурация BLOB-адаптера (application.yml)

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

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

  • настройка подключения к СМЭВ3-адаптеру, СМЭВ4-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля.

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

blob:
  default-request-timeout: 60s
  storage:
    client: awssdk # 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}

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

# Настройки модуля сбора информации о компонентах витрины
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:
    - blob.storage.auth.user
    - blob.storage.auth.password
    - blob.storage.auth.token
    - blob.storage.auth.authorization-server.client-secret
    - blob.storage.auth.access-token
    - blob.storage.auth.secret-token

metrics:
  port: ${METRICS_PORT:9837}

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

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

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

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

  • vertx - настраиваются значения вертиклов;

  • blob - настраивается подключение к Хранилищу BLOB-объектов;

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

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

  • component-info- настройки модуля сбора информации о компонентах витрины;

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

9.1. Секция http-server

Секция http-server позволяет настраивать взаимодействие с BLOB-объектами через модуль СМЭВ3-адаптер по протоколу HTTP/HTTPS и задавать порт, на котором будет открыт доступ к серверу.

Например:

http-server:
  enabled: ${SERVER_ENABLED:true}
  port: ${SERVER_PORT:8081}
  • enabled - флаг активации работы с сервером;

  • port - порт, на котором будет открыт доступ к серверу.

9.2. Секция executor

Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.

Например:

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

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

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

9.3. Секция vertx

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

vertx:
  web-client:
    max-pool-size: 20

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

  • max-pool-size - максимальное значение для веб-клиента.

9.4. Секция blob

Секция blob предназначена для настройки:

  • размера выгружаемого чанка BLOB;

  • пути к Хранилищу BLOB-объектов (GET-запрос);

  • метода аутентификации для модуля BLOB-адаптера;

  • получения токена;

  • повторной аутентификаций при истечении времени жизни токена.

Например:

blob:
  default-request-timeout: 60s
  storage:
    client: awssdk # 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:}

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

  • default-request-timeout - значение в секундах таймаута запроса;

  • client - клиент сервера хранилища BLOB-объектов, например BLOB_STORAGE_CLIENT:awssdk;

  • 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

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

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

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

Например:

prostore-rest-client:
  host: ${PS_HOST:localhost}
  port: ${PS_PORT:9095}
  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;

9.7. Секция component-info

В секции component-info хранятся настройки компонента сбора информации о компонентах витрины.

Например:

# Настройки модуля сбора информации о компонентах витрины
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:
    - blob.storage.auth.user
    - blob.storage.auth.password
    - blob.storage.auth.token
    - blob.storage.auth.authorization-server.client-secret
    - blob.storage.auth.access-token
    - blob.storage.auth.secret-token

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

  • enabled - статус подключения компонента, указывается булево значение;

  • datasource - датасорс Prostore;

  • datamart - схема Prostore;

  • table-name - имя таблицы для записи информации о компоненте;

  • create-table-period - период попыток создания схемы, при неуспехе, указывается в секундах;

  • publish-period - период публикации health-check, указывается в секундах;

  • timeout-active - период, после которого компонент считается неактивным при отсутствии health-check, указывается в секундах;

  • secrets - список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.

9.8. Секция metrics

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

Например:

metrics:
  port: ${METRICS_PORT:9837}

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

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