NAV
json

Classification: сервис классификации объектов сущностей

Сервис позволяет классифицировать объекты различных сущностей по полям этих объектов. Команды могут приходить как по HTTP, так и через Kafka в топик classification_commands.

В сервисе реализованы следующие команды:

Optimistic Lock

У нескольких команд реализован механизм оптимистичных блокировок. Для этого в данных присутствует поле version. Задача оптимистичных блокировок - предотвратить одновременное редактирование объекта из двух открытых форм. Сначала фронтэнд запрашивает данные объекта и получает в ответе версию данных - поле version. Он прикладывает эту версию в ответе. Если на бэкэнде она совпадает с исходной (не было других модификаций), тогда данные сохраняются, а версия поднимается. Иначе сохранения не происходит, данные не перетираются.

Сервис разбит на несколько модулей, в виде sbt проектов:

Информация по добавлению команд можно прочитать в описании шаблона

Конфигурирование Classification

Требования к запуску Classification

Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm.

Для корректной минимальной работы сервиса требуется обязательное подключение к PostgreSQL, Kafka, Consul. Для настройки подключения к ним нужно заполнить обязательные переменные окружения из раздела ниже.

Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus, ApiGateway. В этом случае нужно уделить внимание настройкам, связанным с ServiceDiscovery и CommandDiscovery.

Запуск Classification из консоли с помощью SBT

CLASSIFICATION_DB_HOST=localhost CLASSIFICATION_DB_PORT=5432 CLASSIFICATION_DB_NAME=classification_db CLASSIFICATION_DB_USER=postgres CLASSIFICATION_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения Classification

Все доступные переменные окружения для настройки сервиса.

Переменная Тип Обязательная Значение по умолчанию Описание
CLASSIFICATION_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
CLASSIFICATION_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
CLASSIFICATION_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
CLASSIFICATION_KAFKA_TOPIC string нет "classification_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
CLASSIFICATION_KAFKA_CONSUMER_GROUP string нет "classification_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
CLASSIFICATION_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
CLASSIFICATION_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
CLASSIFICATION_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
CLASSIFICATION_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
CLASSIFICATION_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
CLASSIFICATION_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
CLASSIFICATION_KAFKA_AUTH_PRINCIPAL string нет "" Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos).
CLASSIFICATION_KAFKA_AUTH_KEYTAB_PATH string нет "" Путь до keytab-файла(в случае соединения с kafka через Kerberos).
CLASSIFICATION_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет.
CLASSIFICATION_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
CLASSIFICATION_KAFKA_AUTH_MODE string нет "static" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
CLASSIFICATION_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings.
CLASSIFICATION_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
CLASSIFICATION_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
CLASSIFICATION_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
CLASSIFICATION_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
CLASSIFICATION_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
CLASSIFICATION_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
CLASSIFICATION_DISCOVERABLE_ID string нет "another_CLASSIFICATION_service_instance" ID сервиса в ServiceDiscovery
CLASSIFICATION_DISCOVERABLE_NAME string нет "classification" Имя сервиса в ServiceDiscovery
CLASSIFICATION_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
CLASSIFICATION_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
CLASSIFICATION_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
CLASSIFICATION_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
CLASSIFICATION_SERVICE_TITLE string нет "Classification" Название сервиса для отображения
CLASSIFICATION_SERVICE_DESCRIPTION string нет "Сервис аналитики" Описание сервиса для отображения
CLASSIFICATION_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
CLASSIFICATION_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
CLASSIFICATION_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
CLASSIFICATION_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
CLASSIFICATION_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
CLASSIFICATION_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
CLASSIFICATION_DB_HOST string да Хост БД
CLASSIFICATION_DB_PORT int да Порт БД
CLASSIFICATION_DB_NAME string да Имя базы в БД
CLASSIFICATION_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
CLASSIFICATION_DB_USER string да Пользователь БД
CLASSIFICATION_DB_PASSWORD string да Пароль пользователя БД
CLASSIFICATION_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
CLASSIFICATION_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
CLASSIFICATION_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
CLASSIFICATION_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
CLASSIFICATION_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
CLASSIFICATION_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
CLASSIFICATION_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
CLASSIFICATION_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
CLASSIFICATION_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
CLASSIFICATION_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
CLASSIFICATION_DB_INITIALIZATION_FAIL_FAST string нет false Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
CLASSIFICATION_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
CLASSIFICATION_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
CLASSIFICATION_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
CLASSIFICATION_FS_URI string да http://localhost:9000/ Адрес файлового хранилища
CLASSIFICATION_FS_ACCESS_KEY_ID string да minioadmin Имя пользователя файлового хранилища
CLASSIFICATION_FS_SECRET_ACCESS_KEY string да minioadmin Пароль пользователя файлового хранилища
CLASSIFICATION_FS_UPLOAD_PARALLELISM int нет 4 Параллелизм для загрузки файлов
CLASSIFICATION_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
CLASSIFICATION_FS_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
CLASSIFICATION_FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
CLASSIFICATION_FS_CACHE_TTL duration string нет Время жизни клиента в кеше
CLASSIFICATION_AUTHZFORCE_ADDR string нет "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
CLASSIFICATION_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в AuthZforce server
CLASSIFICATION_AUTHZFORCE_CONNECT_TIMEOUT string нет 10 seconds Таймаут на подключение к AuthZforce server
CLASSIFICATION_EXTERNAL_MIGRATIONS_RETRY_DELAY duration string нет 15 seconds Задержка между повторными попытками запуска внешних миграций
CLASSIFICATION_EXTERNAL_MIGRATIONS_RETRY_ATTEMPTS int нет 5 Максимальное количество попыток запуска внешних миграций
CLASSIFICATION_DM_SCHEMA_CACHE_SIZE int нет 128 Максимальный размер кэша для json schema
CLASSIFICATION_DM_SCHEMA_CACHE_TTL duration string нет 5 minute Время жизни элементов в кэше для json schema
CLASSIFICATION_LAMP_FILE_CACHE_SIZE int нет 64 Максимальный размер кэша для файлов из lamp
CLASSIFICATION_LAMP_FILE_CACHE_TTL duration string нет 30 minute Время жизни элементов в кэше для файлов из lamp
CLASSIFICATION_FTS_MAPPING_CACHE_SIZE int нет 64 Максимальный размер кэша для маппингов в полнотекстовом поиске
CLASSIFICATION_FTS_MAPPING_CACHE_TTL duration string нет 5 minute Время жизни элементов в кэше для маппингов в полнотекстовом поиске
CLASSIFICATION_DM_OBJECT_PAGE_SIZE int нет 100 Размер страницы при выборке объектов из data-model
CLASSIFICATION_AUTHORIZER_KIND string нет "authzforce" Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию.
CLASSIFICATION_SENDERLIB_COMMANDS_HTTP_RETRY_ATTEMPTS int нет 5 Поле attempts из RetrySettings
CLASSIFICATION_SENDERLIB_COMMANDS_HTTP_RETRY_DELAY duration string нет "5 seconds" Поле delay из RetrySettings
CLASSIFICATION_SENDERLIB_COMMANDS_HTTP_RETRY_KIND string нет "OnSomeExceptions(ConnectException)" CommandResultRetryConditionKind
CLASSIFICATION_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
CLASSIFICATION_JOURNAL_TOPIC string да, если переменная CLASSIFICATION_JOURNAL_MODE = WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.

Список команд сервиса Classification

Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.

Название команды EntityType Actions
classification_ListEntityClassHierarchy EntityClass ListEntityClassHierarchy
classification_ListEntityClassParents EntityClass GetEntityClass
classification_EntityTypeClassCount EntityClass GetEntityClass
classification_GetEntityClass EntityClass GetEntityClass
classification_ClassifyObject EntityClass ClassifyObject
classification_CalculateManagedFields EntityClass CalculateManagedFields
classification_CreateEntityClass EntityClass CreateEntityClass
classification_UpdateEntityClass EntityClass UpdateEntityClass
classification_DeleteEntityClass EntityClass DeleteEntityClass
classification_updateObjectWithReclassification Произвольный EntityType из ObjectStorage DataModel_UpdateObject
classification_EntityClassesByValueGenerationRules EntityClass ClassifyObject
classification_UpdateValueGenerationRuleEntityClasses EntityClass UpdateEntityClass

В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

ListEntityClassHierarchy (classification)

Payload для команды

"Tag"

Результат выполнения команды

[
  {
    "entityClass": {
      "id": "0becc650-2909-4769-869d-2521c3e452e1",
      "parentId": null,
      "entityType": "Tag",
      "title": "Арматура",
      "controlFieldCode": "tagType",
      "controlFieldValue": "763a967d-625f-44be-ad7c-d8ccd9e3af19",
      "managedFields": [
        {
          "fieldCode": "istochnik_dannyх",
          "isMandatory": false
        },
        {
          "fieldCode": "klapan",
          "isMandatory": true
        },
        {
          "fieldCode": "diametr",
          "isMandatory": false
        }
      ],
      "valueGenerationRuleIds": [
        "5f80e530-1ccc-41e3-a088-03d719ba3f23"
      ],
      "created": 1719594386281,
      "createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
      "modified": 1722498718415,
      "modifiedBy": "00000000-0000-0000-0000-000000000000",
      "version": 9
    },
    "subclasses": []
  }
]

Возвращает дерево сущностей классов

Команда Путь
classification_ListEntityClassHierarchy HTTP POST "v1/entityClass/listHierarchy"

ListEntityClassParents (classification)

Payload для команды

{
  "entityType": "mechanism",
  "entityId": "23792ab1-0f47-4dd6-b186-9502931c67fb"
}

Результат выполнения команды

[
  {
    "id": "dd82aa1e-24a7-4d90-b49a-b53dbeb3f4ec",
    "parentId": null,
    "entityType": "mechanism",
    "title": "Очень длинное наименование класса Очень длинное наименование класса Очень длинное наименование класса",
    "controlFieldCode": "mechanism_catalog",
    "controlFieldValue": "cdb6eb0f-7316-4f45-863b-74b08e70e759",
    "managedFields": [
      {
        "fieldCode": "optional_field",
        "isMandatory": true
      }
    ],
    "valueGenerationRuleIds": [
      "5f80e530-1ccc-41e3-a088-03d719ba3f23"
    ],
    "created": 1718887945200,
    "createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
    "modified": 1719380902380,
    "modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
    "version": 6
  }
]

Возвращает всех родителей сущности класса, в порядке от ближайшего до самого дальнего

Команда Путь
classification_ListEntityClassHierarchy HTTP POST "v1/entityClass/listEntityClassParents"

EntityTypeClassCount (classification)

Payload для команды

[
  "Tag",
  "Document",
  "AnotherEntity"
]

Результат выполнения команды

{
  "Tag": 110,
  "Document": 6,
  "AnotherEntity": 25
}

Считает количество классов с указанными сущностями

Команда Путь
classification_EntityTypeClassCount HTTP POST "v1/entityClass/entityTypeClassCount"

GetEntityClass (classification)

Payload для команды

"23792ab1-0f47-4dd6-b186-9502931c67fb"

Результат выполнения команды

{
  "id": "23792ab1-0f47-4dd6-b186-9502931c67fb",
  "parentId": "dd82aa1e-24a7-4d90-b49a-b53dbeb3f4ec",
  "entityType": "mechanism",
  "title": "Заводной механизм",
  "controlFieldCode": "mechanism_catalog",
  "controlFieldValue": "adf7af2f-e5e3-4a08-bf1c-4ea792358bab",
  "managedFields": [],
  "valueGenerationRuleIds": [],
  "created": 1719379649875,
  "createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
  "modified": 1719379649875,
  "modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
  "version": 1
}

Получить сущность класса по её идентификатору

Команда Путь
classification_GetEntityClass HTTP POST "v1/entityClass/getEntityClass"

ListEntityClasses (classification)

Payload для команды

{
    "query": "",
    "context": {},
    "sorting": {
        "fieldName": "title",
        "order": "desc"
    },
    "paging": {
        "page": 1,
        "count": 10
    }
}

Результат выполнения команды

{
    "items": [
        {
            "id": "23792ab1-0f47-4dd6-b186-9502931c67fb",
            "parentId": "dd82aa1e-24a7-4d90-b49a-b53dbeb3f4ec",
            "entityType": "mechanism",
            "title": "Заводной механизм",
            "controlFieldCode": "mechanism_catalog",
            "controlFieldValue": "adf7af2f-e5e3-4a08-bf1c-4ea792358bab",
            "managedFields": [],
            "valueGenerationRuleIds": [],
            "created": 1719379649875,
            "createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
            "modified": 1719379649875,
            "modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
            "version": 1
        }
    ],
    "total": 1
}

Получить список сущностей класса

Команда Путь
classification_ListEntityClasses HTTP POST "v1/entityClass/list"

ClassifyObject (classification)

Payload для команды

{
  "entityType": "Tag",
  "attributes": {
    "complex": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
    "<другие поля производные от объектов иерархии>": "...",
    "tagType": "763a967d-625f-44be-ad7c-d8ccd9e3af19"
  }
}

Результат выполнения команды

[
  {
    "entityClass": {
      "id": "d6bfc896-2dcb-45ca-94be-1654f10ae79d",
      "parentId": null,
      "entityType": "Tag",
      "title": "Арматура 30мм",
      "controlFieldCode": "parentTag",
      "controlFieldValue": "5639bae9-e313-44b4-a3b7-8fd06c8ef7ad",
      "managedFields": [
        {
          "fieldCode": "code",
          "isMandatory": true
        },
        {
          "fieldCode": "diametr",
          "isMandatory": true
        }
      ],
      "valueGenerationRuleIds": [
        "5f80e530-1ccc-41e3-a088-03d719ba3f23"
      ],
      "created": 1718885396389,
      "createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
      "modified": 1718885396389,
      "modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
      "version": 1
    },
    "subclasses": [
      {
        "entityClass": {
          "id": "e5bfc896-2dcb-45ca-94be-1654f10ae431",
          "parentId": "d6bfc896-2dcb-45ca-94be-1654f10ae79d",
          "<другие поля EntityClass модели>": "..."
        }
      }
    ]
  }
]

Классификация типа сущности.

Команда Путь
classification_ClassifyObject HTTP POST "v1/entityClass/classifyObject"

CalculateManagedFields (classification)

Payload для команды

{
  "entityType": "Tag",
  "attributes": {
    "complex": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
    "<другие поля производные от объектов иерархии>": "...",
    "tagType": "763a967d-625f-44be-ad7c-d8ccd9e3af19"
  }
}

Результат выполнения команды

[
  {
    "fieldCode": "code",
    "isMandatory": true
  },
  {
    "fieldCode": "diametr",
    "isMandatory": true
  }
]

Получить список полей объекта для классифицированного типа.

Команда Путь
classification_CalculateManagedFields HTTP POST "v1/entityClass/calculateManagedFields"

CreateEntityClass (classification)

Payload для команды

{
  "parentId": null,
  "entityType": "Tag",
  "title": "Арматура 30мм",
  "controlFieldCode": "parentTag",
  "controlFieldValue": "5639bae9-e313-44b4-a3b7-8fd06c8ef7ad",
  "managedFields": [
    {
      "fieldCode": "code",
      "isMandatory": true
    },
    {
      "fieldCode": "diametr",
      "isMandatory": true
    }
  ],
  "valueGenerationRuleIds": [
    "5f80e530-1ccc-41e3-a088-03d719ba3f23"
  ]
}

Результат выполнения команды

"00001111-2222-3333-4444-555566667777"

Добавление нового класса сущности.

Команда Путь
classification_CreateEntityClass Kafka Topic "classification_commands"

UpdateEntityClass (classification)

Результат выполнения команды

{
  "id": "d6bfc896-2dcb-45ca-94be-1654f10ae79d",
  "title": "Арматура 30мм",
  "controlFieldCode": "parentTag",
  "controlFieldValue": "5639bae9-e313-44b4-a3b7-8fd06c8ef7ad",
  "managedFields": [
    {
      "fieldCode": "code",
      "isMandatory": true
    },
    {
      "fieldCode": "diametr",
      "isMandatory": true
    }
  ],
  "valueGenerationRuleIds": [
    "5f80e530-1ccc-41e3-a088-03d719ba3f23"
  ],
  "version": 1
}

Результат выполнения команды

true

Обновление класса сущности.

Команда Путь
classification_UpdateEntityClass Kafka Topic "classification_commands"

DeleteEntityClass (classification)

Payload для команды

"00001111-2222-3333-4444-555566667777"

Результат выполнения команды

true

Удаление класса сущности.

Команда Путь
classification_DeleteEntityClass Kafka Topic "classification_commands"

updateObjectWithReclassification

Payload для команды

{
  "entityType": "Order",
  "objectId": "18b1011b-9db3-4186-a53c-971016030068",
  "version": 2,
  "attributes": {
    "date": 1577869200,
    "number": 514
  }
}

Результат выполнения команды

true

Или ошибка, если объект не существует

{
  "businessError": null,
  "message": "ERROR: Entity object not found",
  "stackTrace": null,
  "data": null
}

Или ошибка, если объект был обновлен из другого места

{
  "businessError": null,
  "message": "ERROR: object version is not actual (Optimistic Lock)",
  "stackTrace": null,
  "data": null
}

Изменение объекта сущности. Использует оптимистичную блокировку. Если изменяемый объект был изменен параллельно (например, из другой формы другим пользователем), тогда вернется ошибка ERROR: object version is not actual (Optimistic Lock), показывающая, что не произошло обновления из-за некорректной версии.

Поддерживается асинхронный и синхронный вызов. Результат выполнения команды журналируется.

Команда Путь
classification_updateObjectWithReclassification Kafka Topic "classification_commands"

EntityClassesByValueGenerationRules

Payload для команды

{
  "valueGenerationRuleIds": [
    "5f80e530-1ccc-41e3-a088-03d719ba3f23"
  ]
}

Результат выполнения команды

[
  {
    "valueGenerationRuleId": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
    "entityClasses": [
      {
        "id": "e718335f-8ea9-45c3-ab66-164965e2bbb9",
        "parentId": null,
        "entityType": "testEntity3",
        "title": "Новый тестовый 123",
        "controlFieldCode": "testEntity",
        "controlFieldValue": "9af6310c-dbf4-4907-9cda-8f8657e98d8d",
        "managedFields": [],
        "valueGenerationRuleIds": [
          "4f80e530-1ccc-41e3-a088-03d719ba3f23",
          "5f80e530-1ccc-41e3-a088-03d719ba3f23"
        ],
        "created": 1718799645926,
        "createdBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
        "modified": 1718799645926,
        "modifiedBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
        "version": 1
      },
      {
        "id": "814f6890-e030-4b3e-a652-5e2986466aab",
        "parentId": null,
        "entityType": "construction",
        "title": "Деревянные конструкции",
        "controlFieldCode": "construction_type",
        "controlFieldValue": "eb299170-0f60-42e6-8756-ee793b885e69",
        "managedFields": [
          {
            "fieldCode": "construction_foreign",
            "isMandatory": true
          },
          {
            "fieldCode": "construction_type",
            "isMandatory": false
          }
        ],
        "valueGenerationRuleIds": [
          "5f80e530-1ccc-41e3-a088-03d719ba3f23"
        ],
        "created": 1718716494252,
        "createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
        "modified": 1718716494252,
        "modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
        "version": 1
      }
    ]
  }
]

Получить список классов содержащих переданные идентификаторы правила, и сгруппированные по ним. Классы могут дублироваться в категориях

Поддерживается только синхронный вызов. Результат выполнения команды не журналируется.

Команда Путь
classification_EntityClassesByValueGenerationRules Kafka Topic "classification_commands"

UpdateValueGenerationRuleEntityClasses

Payload для команды

{
  "valueGenerationRuleId": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
  "entityClassIds": [
    "41bc3c4c-44fa-43cc-8e07-3d2207cf033c"
  ],
  "clearOtherClasses": true
}

Результат выполнения команды

[
  {
    "id": "41bc3c4c-44fa-43cc-8e07-3d2207cf033c",
    "parentId": null,
    "entityType": "testEntity3",
    "title": "подкласс",
    "controlFieldCode": "testEntity",
    "controlFieldValue": "be231b97-6d37-4821-b78b-4c2ce8c1dea0",
    "managedFields": [],
    "valueGenerationRuleIds": [
      "5f80e530-1ccc-41e3-a088-03d719ba3f23",
      "3f80e530-1ccc-41e3-a088-03d719ba3f23"
    ],
    "created": 1718804181037,
    "createdBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
    "modified": 1718804181037,
    "modifiedBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
    "version": 2
  }
]

Добавить новое правило генерации значений к классам. С возможностью исключения правила из классов, идентификаторы которых не указаны

Поддерживается асинхронный и синхронный вызов. Результат выполнения команды не журналируется.

Команда Путь
classification_UpdateValueGenerationRuleEntityClasses Kafka Topic "classification_commands"

Объекты сервиса classification

ClassifyObjectDto

Входные данные классификации

Поле Тип Обязательное Описание
entityType String да Код типа
attributes JSON Object да Атрибуты объекта, поля указывающее на связи с родителями и их идентификаторы (строка:строка или строка:массив)

ListEntityClassParentsDTO

Входные данные классификации

Поле Тип Обязательное Описание
entityType EntityTypeId (String) да Код типа
entityId EntityClassId (UUID) да Json c атрибутами объекта, поля указывающее на связи с родителями и их идентификаторы (строка:строка или строка:массив)

EntityClassHierarchyDTO

Дерево сущностей класса

Поле Тип Обязательное Описание
entityClass EntityClass да Сущность класса
subclasses EntityClassHierarchyDTO[] да Дочерние сущности класса

EntityClass

Сущность класса

Поле Тип Обязательное Описание
id EntityClassId (UUID) да Идентификатор сущности класса
entityType EntityTypeId (String) да Код типа
parentId EntityClassId (UUID) нет Идентификатор родительской сущности класса
title String да Наименование сущности класса
controlFieldCode String да Название поля указывающее на принадлежность родителю согласно системы справочников
controlFieldValue JSON String / JSON Array да Внешний/-ие идентификатор/-ы родителя из системы справочников
managedFields ManagedField[] да Отображаемые поля для этой сущности класса
valueGenerationRuleIds UUID[] да Идентификаторы правил генерации значения
context String нет Код проекта к которому относится объект
created TimeStamp да Дата создания
createdBy UUID да Идентификатор пользователя который создал сущность
modified TimeStamp да Дата изменения
modifiedBy UUID да Идентификатор пользователя который изменил сущность
version Int да Версия (optimistic lock)

CreateEntityClassDTO

Объект создания сущности класса

Поле Тип Обязательное Описание
entityType EntityTypeId (String) да Код типа
parentId EntityClassId (UUID) нет Идентификатор родительской сущности класса
title String да Наименование сущности класса
controlFieldCode String да Название поля указывающее на принадлежность родителю согласно системы справочников
controlFieldValue JSON String / JSON Array да Внешний/-ие идентификатор/-ы родителя из системы справочников
managedFields ManagedField[] да Отображаемые поля для этой сущности класса
valueGenerationRuleIds UUID[] да Идентификаторы правил генерации значения

UpdateEntityClassDTO

Объект обновления сущности класса

Поле Тип Обязательное Описание
id EntityClassId (UUID) да Идентификатор сущности класса
title String да Наименование сущности класса
controlFieldCode String да Название поля указывающее на принадлежность родителю согласно системы справочников
controlFieldValue JSON String / JSON Array да Внешний/-ие идентификатор/-ы родителя из системы справочников
managedFields ManagedField[] да Отображаемые поля для этой сущности класса
valueGenerationRuleIds UUID[] да Идентификаторы правил генерации значения
version Int да Версия (optimistic lock)

ManagedField

Управляемое поле

Поле Тип Обязательное Описание
fieldCode String да Название поля
isMandatory Boolean да Является ли обязательным

UpdateEntityObject

Изменение объекта сущности

Поле Тип Обязательное Описание
entityType EntityTypeId (String) да Строковый код типа сущности
objectId UUID да ID объекта
version Int да Версия объекта. Нужна для оптимистичных блокировок
attributes JSON Object да Json с полями объекта. Должен содержать все поля объекта.

EntityClassesByValueGenerationRulesInput

Поле Тип Обязательное Описание
valueGenerationRuleIds UUID[] да Идентификаторы правил генерации значения

EntityClassesByValueGenerationRulesOutput

Поле Тип Обязательное Описание
valueGenerationRuleId UUID да Идентификатор правила генерации значения
entityClasses EntityClass[] да Сущности класса содержащие это правило

UpdateValueGenerationRuleEntityClassesInput

Поле Тип Обязательное Описание
valueGenerationRuleId UUID да Идентификатор правила генерации значения
entityClassIds EntityClassId[] да Идентификаторы классов для обновления
clearOtherClasses Boolean нет Очищать ли текущие правила генерации значения, у классов не вошедших в выборку

Exporter: сервис для экспорта данных

Сервис принимает команды для работы с игроками и командами. Состояние хранится в PostgreSQL. Команды могут приходить как по HTTP, так и через Kafka в топик exporter_commands.

Сервис разбит на несколько модулей, в виде sbt проектов:

Информация по добавлению команд можно прочитать в описании шаблона

Локальный запуск

При запуске сервиса ожидается, что уже развернута необходимая инфраструктура:

Запуск из консоли с помощью SBT

EXPORTER_DB_HOST=localhost EXPORTER_DB_PORT=5432 EXPORTER_DB_NAME=exporter_db EXPORTER_DB_USER=postgres EXPORTER_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения сервиса Exporter

Все доступные переменные окружения для настройки сервиса.

Переменная Тип Обязательная Значение по умолчанию Описание
EXPORTER_HTTP_HOST string нет 0.0.0.0 Хост, на котором слушает HTTP-сервер
EXPORTER_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
EXPORTER_KAFKA_SERVERS string да localhost:9092 Адрес Kafka
EXPORTER_KAFKA_TOPIC string нет exporter_commands Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
EXPORTER_KAFKA_CONSUMER_GROUP string нет exporter_consumer_group Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
EXPORTER_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
EXPORTER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
EXPORTER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
EXPORTER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
EXPORTER_KAFKA_COMMANDEVENT_TOPIC string да commandevents Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
EXPORTER_KAFKA_AUTH_USER string нет Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
EXPORTER_KAFKA_AUTH_PASSWORD string нет Пароль учетной записи Kafka.
EXPORTER_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
EXPORTER_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет Пароль к харнилищу сертификатов.
EXPORTER_CONSUL_ADDR url string нет http://localhost:8500 Адрес Сonsul.
EXPORTER_CONSUL_AUTH_USER string нет Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
EXPORTER_CONSUL_AUTH_PASSWORD string нет Пароль учетной записи Сonsul.
EXPORTER_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
EXPORTER_DISCOVERABLE_ID string нет another_EXPORTER_service_instance ID сервиса в ServiceDiscovery
EXPORTER_DISCOVERABLE_NAME string нет exporter Имя сервиса в ServiceDiscovery
EXPORTER_DISCOVERABLE_HOST string да localhost Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
EXPORTER_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
EXPORTER_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
EXPORTER_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
EXPORTER_SERVICE_TITLE string нет Exporter Название сервиса для отображения
EXPORTER_SERVICE_DESCRIPTION string нет Service EXPORTER Описание сервиса для отображения
EXPORTER_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
EXPORTER_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
EXPORTER_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
EXPORTER_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
EXPORTER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
EXPORTER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
EXPORTER_DB_HOST string да Хост БД
EXPORTER_DB_PORT int да Порт БД
EXPORTER_DB_NAME string да Имя базы в БД
EXPORTER_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
EXPORTER_DB_USER string да Пользователь БД
EXPORTER_DB_PASSWORD string да Пароль пользователя БД
EXPORTER_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
EXPORTER_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
EXPORTER_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
EXPORTER_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
EXPORTER_DB_ISOLATION string нет READ_COMMITTED Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
EXPORTER_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
EXPORTER_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
EXPORTER_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
EXPORTER_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
EXPORTER_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
EXPORTER_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
EXPORTER_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
EXPORTER_DB_CONNECTION_TEST_QUERY string нет SELECT 1 Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
EXPORTER_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
EXPORTER_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
EXPORTER_DB_SCHEMA string нет public Устанавливает schema по умолчанию
EXPORTER_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
EXPORTER_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
EXPORTER_AUTHZFORCE_ADDR string нет http://localhost:8080/authzforce-ce Адрес AuthZforce server
EXPORTER_AUTHZFORCE_DOMAIN string нет Доступный DomainID в AuthZforce server
EXPORTER_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
EXPORTER_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
EXPORTER_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
EXPORTER_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
EXPORTER_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
EXPORTER_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
EXPORTER_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
EXPORTER_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
EXPORTER_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
EXPORTER_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
EXPORTER_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
EXPORTER_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
EXPORTER_REPORT_BUCKET string да exporter Название ведра для отчётов экспорта в S3-подобном файлом хранилище
EXPORTER_REPORT_PATH string да report Префикс для названия отчётов экспорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3)
EXPORTER_EXPORT_BUCKET string да exporter Название ведра для пользовательских файлов экспорта в S3-подобном файлом хранилище
EXPORTER_EXPORT_PATH string да export Префикс для названия пользовательских файлов экспорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3)
EXPORTER_FILL_WARNINGS boolean да false Флаг для включения возможности добавлять предупреждения при получении данных для экспорта в модель данных
EXPORTER_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
EXPORTER_JOURNAL_TOPIC string да, если переменная EXPORTER_JOURNAL_MODE = WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.

Список команд сервиса Exporter

Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.

Название команды EntityType Actions
Список всех заданий экспорта ExportProcess ListExportProcess
Получить задание экспорта по ID ExportProcess GetExportProcess
Создать задание экспорта ExportProcess CreateExportProcess
Отредактировать задание экспорта ExportProcess UpdateExportProcess
Удалить задание экспорта ExportProcess DeleteExportProcess
Запуск процесса экспорта данных ExportProcess ExecuteExportProcess
Остановка процесса экспорта данных ExportProcess ExecuteExportProcess
Получить прогресс процесса экспорта данных ExportProcess GetExportProgress
Создание и запуск процесса экспорта данных ExportProcess CreateExportProcess, ExecuteExportProcess
Список всех шаблонов заданий экспорта ExportTemplate ListExportTemplate
Получить щаблон задания экспорта по ID ExportTemplate GetExportTemplate
Создать шаблон задания экспорта ExportTemplate CreateExportTemplate
Отредактировать шаблон задания экспорта ExportTemplate UpdateExportTemplate
Удалить шаблон задания экспорта ExportTemplate DeleteExportTemplate

В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

ListExportProcess

Payload для команды

 {
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "entityType",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
      "entityType": "abc",
      "status": "DRAFT",
      "exportConfig": {
        "title": "Sample Project Title"
      },
      "exportFile": "some file",
      "resultFile": null,
      "info": {},
      "created": 1723809067603,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1723809067603,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "executed": null,
      "executedBy": null,
      "version": 1
    }
  ],
  "total": 1
}

Возвращает список всех задач экспорта.

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

Команда Путь
exporter_ListExportProcess HTTP POST "/v1/exportProcess/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
entityType InSetQuery, LikeQuery, TsQuery
status InSetQuery
created RangeQuery
createdBy InSetQuery
modified RangeQuery
modifiedBy InSetQuery
executed RangeQuery
executedBy InSetQuery

Доступные поля для сортировки:

Поле
entityType
status
created
modified
executed

GetExportProcess

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

{
  "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
  "entityType": "abc",
  "status": "DRAFT",
  "exportConfig": {
    "title": "Sample Project Title"
  },
  "exportFile": "some file",
  "resultFile": null,
  "info": {},
  "created": 1723809067603,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1723809067603,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "executed": null,
  "executedBy": null,
  "version": 1
}

Поиск задачи экспорта с заданным идентификатором.

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

Команда Путь
exporter_GetExportProcess HTTP POST "/v1/exportProcess/get"

CreateExportProcess

Payload для команды

{
  "entityType": "abc",
  "exportConfig": {
    "title": "Sample Project Title"
  },
  "exportFile": "some file"
}

Результат выполнения команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Добавляет новую задачу экспорта с заданными параметрами. Отправляет событие о создании задачи экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_CreateExportProcess -

UpdateExportProcess

Payload для команды

{
  "id": "f283aac5-88e0-43b5-8dab-56c22d91acc7",
  "entityType": "abc",
  "exportConfig": {
    "startRow": 3,
    "columnMapping": [
      {
        "property": "title",
        "columnLabel": "A"
      }
    ]
  },
  "exportFile": "bucket/file_id",
  "version": 1
}

Результат выполнения команды

true

Обновляет данные задачи экспорта. Отправляет событие об обновлении задачи экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_UpdateExportProcess -

DeleteExportProcess

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

true

Удаляет задачу экспорта с заданным идентификатором. Отправляет событие об удалении задачи экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_DeleteExportProcess -

ExecuteExportProcess

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

true

Запускает задачу экспорта с заданным идентификатором. Отправляет событие о результатах выполнения задачи экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_ExecuteExportProcess -

CancelExportProcess

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

true

Останавливает запущенную задачу экспорта с заданным идентификатором.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_CancelExportProcess -

GetExportProgress

Payload для команды

{
  "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
}

Результат выполнения команды

{
  "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd": {
    "estimateTime": "PT12H54M5.02S",
    "percent": 0.3368487274760384,
    "stats": [
      {
        "name": "?",
        "processed": {
          "succeed": 0,
          "skipped": 1723,
          "total": 1723
        },
        "errors": 0
      }
    ]
  }
}

Прогресс задач экспорта. Можно отфильтровать по идентификатору конкретной задачи. Поддерживается только синхронный вызов.

Команда Путь
exporter_GetExportProgress -

CreateAndExecuteExportProcess

Payload для команды

{
  "entityType": "Tag",
  "exportConfig": {
    "columnMapping": [
      {
        "columnLabel": "C",
        "columnHeader": "Заголовок",
        "attributePath": [
          {
            "fieldCode": "title",
            "fieldType": "string"
          }
        ]
      },
      {
        "columnLabel": "A",
        "columnHeader": "Код",
        "attributePath": [
          {
            "fieldCode": "code",
            "fieldType": "string"
          }
        ]
      },
      {
        "columnLabel": "D",
        "columnHeader": "Диаметр",
        "attributePath": [
          {
            "fieldCode": "diametr",
            "fieldType": "number"
          }
        ]
      },
      {
        "columnLabel": "E",
        "columnHeader": "subType",
        "attributePath": [
          {
            "fieldCode": "subType",
            "fieldType": "catalogItem",
            "catalogCode": "TagSubType"
          },
          {
            "fieldCode": "tagTypeTitle",
            "fieldType": "string"
          }
        ]
      },
      {
        "columnLabel": "F",
        "columnHeader": "complex code",
        "attributePath": [
          {
            "fieldCode": "complex",
            "fieldType": "entityObject",
            "entityType": "complex"
          },
          {
            "fieldCode": "code",
            "fieldType": "string"
          }
        ]
      },
      {
        "columnLabel": "G",
        "columnHeader": "complex title",
        "attributePath": [
          {
            "fieldCode": "complex",
            "fieldType": "entityObject",
            "entityType": "complex"
          },
          {
            "fieldCode": "title",
            "fieldType": "string"
          }
        ]
      }
    ]
  },
  "search": {
    "query": "",
    "context": {
    }
  },
  "hierarchy": []
}

Результат выполнения команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Последовательное выполнение команд CreateExportProcess и ExecuteExportProcess.

Добавляет новую задачу экспорта с заданными параметрами, а затем ее запускает.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_CreateAndExecuteExportProcess -

ListExportTemplate

Payload для команды

 {
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "entityType",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
      "entityType": "abc",
      "title": "Наименование шаблона",
      "description": "Описание которое на которое никто не смотрит",
      "exportConfig": {
        "title": "Sample Project Title"
      },
      "created": 1723809067603,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1723809067603,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "version": 1
    }
  ],
  "total": 1
}

Возвращает список всех шаблонов экспорта.

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

Команда Путь
exporter_ListExportTemplate HTTP POST "/v1/exportTemplate/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
entityType InSetQuery, LikeQuery, TsQuery
createdBy InSetQuery
title LikeQuery
description LikeQuery

Доступные поля для сортировки:

Поле
entityType
created
modified

GetExportTemplate

Payload для команды

"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"

Результат выполнения команды

{
  "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
  "entityType": "abc",
  "title": "Наименование шаблона",
  "description": "Описание которое на которое никто не смотрит",
  "exportConfig": {
    "title": "Sample Project Title"
  },
  "created": 1723809067603,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1723809067603,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "version": 1
}

Поиск задачи экспорта с заданным идентификатором.

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

Команда Путь
exporter_GetExportTemplate HTTP POST "/v1/exportTemplate/get"

CreateExportTemplate

Payload для команды

{
  "entityType": "abc",
  "title": "Шаблон всего",
  "description": "Описание шаблона на которое никто не смотрит",
  "exportConfig": {
    "title": "Sample Project Title"
  }
}

Результат выполнения команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Добавляет новый шаблон экспорта с заданными параметрами. Отправляет событие о создании шаблона экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_CreateExportTemplate -

UpdateExportTemplate

Payload для команды

{
  "id": "f283aac5-88e0-43b5-8dab-56c22d91acc7",
  "entityType": "abc",
  "title": "Шаблон всего",
  "description": "Описание шаблона на которое никто не смотрит",
  "exportConfig": {
    "startRow": 3,
    "columnMapping": [
      {
        "property": "title",
        "columnLabel": "A"
      }
    ]
  },
  "version": 1
}

Результат выполнения команды

true

Обновляет данные шаблона экспорта. Отправляет событие об обновлении шаблона экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_UpdateExportTemplate -

DeleteExportTemplate

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

true

Удаляет шаблон экспорта с заданным идентификатором. Отправляет событие об удалении шаблона экспорта.

Поддерживается асинхронный и синхронный вызов.

Команда Путь
exporter_DeleteExportTemplate -

Модели сервиса Exporter

ExportProcessCreateDto

Поле Тип Обязательное Описание
entityType EntityTypeId (String) Да Тип экспортируемой сущности
exportTemplateId ExportTemplateId (UUID) Нет Уникальный идентификатор шаблона
exportConfig ExportConfig Нет Конфигурация экспорта
search Search Нет Параметры поиска для выбора элементов
hierarchyId HierarchyId (UUID) Нет Уникальный идентификатор иерархии
hierarchy Json (Object) Нет Параметры иерархической структуры выгрузки файлов
processFileFields Boolean Да Флаг при снятии которого процесс выгрузки не должен выгружать связанные файлы, даже если в конфиге указано поле с файлом
processHierarchy Boolean Да Флаг при снятии которого процесс выгрузки не должен выгружать файлы в иерархическом порядке, даже если прокинута иерархия
preserveEmptyFolders Boolean Да Флаг, указывающий на то надо ли добавлять в иерархию пустые папки (без выгружаемых файлов)

ExportProcessUpdateDto

Поле Тип Обязательное Описание
id ExportProcessId (UUID) Да Уникальный идентификатор задачи
entityType EntityTypeId (String) Да Тип экспортируемой сущности
exportConfig ExportConfig Да Конфигурация экспорта
search Search Нет Параметры поиска для выбора элементов
hierarchy Json (Object) Нет Параметры иерархической структуры выгрузки файлов
version Int Да Индекс оптимистической блокировки

ExportProcess

Поле Тип Обязательное Описание
id ExportProcessId (UUID) Да Уникальный идентификатор задачи
entityType EntityTypeId (String) Да Тип экспортируемой сущности
status ExportProcessStatus (String) Да Состояние задачи (DRAFT, IN PROGRESS, IN PROGRESS ARCHIVE, SUCCESS, ERROR, CANCELED)
exportConfig ExportConfig Да Конфигурация экспорта
exportFile ExportFileInformation[] Да URI и имя файла
info ExportInfo Да Статистика по экспорту (summary)
search Search Нет Параметры поиска для выбора элементов
hierarchy Json (Object) Нет Параметры иерархической структуры выгрузки файлов
processFileFields Boolean Да Флаг при снятии которого процесс выгрузки не должен выгружать связанные файлы, даже если в конфиге указано поле с файлом
processHierarchy Boolean Да Флаг при снятии которого процесс выгрузки не должен выгружать файлы в иерархическом порядке, даже если прокинута иерархия
preserveEmptyFolders Boolean Да Флаг, указывающий на то надо ли добавлять в иерархию пустые папки (без выгружаемых файлов)
created Timestamp (Long) Да Дата создания записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modified Timestamp (Long) Да Дата изменения записи
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
executed Timestamp (Long) Нет Дата запуска экспорта
executedBy UserId (UUID) Нет ID пользователя запустившего экспорт
version Int Да Индекс оптимистической блокировки

ExportTemplateCreateDto

Поле Тип Обязательное Описание
entityType EntityTypeId (String) Да Тип экспортируемой сущности
title Title (String) Да Наименование шаблона
description String Нет Описание шаблона
exportConfig ExportConfig Да Конфигурация экспорта

ExportTemplateUpdateDto

Поле Тип Обязательное Описание
id ExportTemplateId (UUID) Да Уникальный идентификатор шаблона
entityType EntityTypeId (String) Да Тип экспортируемой сущности
title Title (String) Да Наименование шаблона
description String Нет Описание шаблона
exportConfig ExportConfig Да Конфигурация экспорта
version Int Да Индекс оптимистической блокировки

ExportTemplate

Поле Тип Обязательное Описание
id ExportTemplateId (UUID) Да Уникальный идентификатор шаблона
entityType EntityTypeId (String) Да Тип экспортируемой сущности
title Title (String) Да Наименование шаблона
description String Нет Описание шаблона
exportConfig ExportConfig Да Конфигурация экспорта
created Timestamp (Long) Да Дата создания записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modified Timestamp (Long) Да Дата изменения записи
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
version Int Да Индекс оптимистической блокировки

ExportConfig

Поле Тип Обязательное Описание
columnMapping ColumnMapping[] Да Информация о сопоставлении столбцов из файла и данных сущности

ColumnMapping

Поле Тип Обязательное Описание
columnLabel String Да Наименование колонки для экспорта данных
columnHeader String Да Название колонки
attributePath FieldAttribute[] Да Описание пути для получения данных поля

FieldAttribute

Поле Тип Обязательное Описание
fieldType String Да Тип ожидаемых данных (допустимые значения: string, number, entityObject, catalogItem, file)
fieldCode String Да Поле из которого берутся данные
entityType String Нет Тип сущности по которое происходит переход для типа данных entityObject
catalogCode String Нет Каталог по которому происходит переход для типа данных catalogItem

ExportFileInformation

Поле Тип Обязательное Описание
fileName String Да Имя файла загруженного для экспорта
url String Да URI файла экспорта (стандартная FS загрузка)

ExportInfo

Поле Тип Обязательное Описание
progress ProgressInfo Да Статистика процесса обработки
error String Нет Ошибка, если был неуспешный запуск
warnings List[(Int, String)] Нет Предупреждения загрузки данных

ProgressInfo

Поле Тип Обязательное Описание
percent Double Да Процент выполненного прогресса загрузки (от 0.0 до 100.0)
progress Int Нет Кол-во выполненных шагов
total Int Нет Общее кол-во шагов

GetExportProgressDto

Поле Тип Обязательное Описание
id ExportProcessId (UUID) Нет Получить статистику только для указанной задачи

EstimateProgressStats

Поле Тип Обязательное Описание
estimateTime Duration ISO8601 Да Время до конца в таком формате PT12H54M5.02S
percent Double Да Процент выполнения (уже рассчитанные цифры из stats)
stats SheetExportTotalStatistic[] Да Числа статистики по листам

SheetExportTotalStatistic

Поле Тип Обязательное Описание
name String Да Название листа
processed StatFraction Да Количество обработанных строк
errors Int Да Количество ошибок

StatFraction

Поле Тип Обязательное Описание
succeed Int Да Успешно обработано
skipped Int Нет Пропущено
total Int Да Всего операций

Importer: сервис для примера

Сервис принимает команды для работы с игроками и командами. Состояние хранится в PostgreSQL. Команды могут приходить как по HTTP, так и через Kafka в топик importer_commands.

Сервис разбит на несколько модулей, в виде sbt проектов:

Информация по добавлению команд можно прочитать в описании шаблона

Локальный запуск

При запуске сервиса ожидается, что уже развернута необходимая инфраструктура:

Запуск из консоли с помощью SBT

IMPORTER_DB_HOST=localhost IMPORTER_DB_PORT=5432 IMPORTER_DB_NAME=importer_db IMPORTER_DB_USER=postgres IMPORTER_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения сервиса Importer

Все доступные переменные окружения для настройки сервиса.

Переменная Тип Обязательная Значение по умолчанию Описание
IMPORTER_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
IMPORTER_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
IMPORTER_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
IMPORTER_KAFKA_TOPIC string нет "importer_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
IMPORTER_KAFKA_CONSUMER_GROUP string нет "importer_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
IMPORTER_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
IMPORTER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
IMPORTER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
IMPORTER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
IMPORTER_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
IMPORTER_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
IMPORTER_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
IMPORTER_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
IMPORTER_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к харнилищу сертификатов.
IMPORTER_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
IMPORTER_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
IMPORTER_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
IMPORTER_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
IMPORTER_DISCOVERABLE_ID string нет "another_IMPORTER_service_instance" ID сервиса в ServiceDiscovery
IMPORTER_DISCOVERABLE_NAME string нет "importer" Имя сервиса в ServiceDiscovery
IMPORTER_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
IMPORTER_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
IMPORTER_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
IMPORTER_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
IMPORTER_SERVICE_TITLE string нет "Importer" Название сервиса для отображения
IMPORTER_SERVICE_DESCRIPTION string нет "Service IMPORTER" Описание сервиса для отображения
IMPORTER_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
IMPORTER_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
IMPORTER_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
IMPORTER_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
IMPORTER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
IMPORTER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
IMPORTER_DB_HOST string да Хост БД
IMPORTER_DB_PORT int да Порт БД
IMPORTER_DB_NAME string да Имя базы в БД
IMPORTER_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
IMPORTER_DB_USER string да Пользователь БД
IMPORTER_DB_PASSWORD string да Пароль пользователя БД
IMPORTER_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
IMPORTER_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
IMPORTER_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
IMPORTER_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
IMPORTER_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
IMPORTER_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
IMPORTER_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
IMPORTER_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
IMPORTER_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
IMPORTER_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
IMPORTER_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
IMPORTER_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
IMPORTER_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
IMPORTER_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
IMPORTER_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
IMPORTER_DB_SCHEMA string нет "public" Устанавливает schema по умолчанию
IMPORTER_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
IMPORTER_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
IMPORTER_AUTHZFORCE_ADDR string нет "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
IMPORTER_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в AuthZforce server
IMPORTER_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
IMPORTER_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
IMPORTER_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
IMPORTER_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
IMPORTER_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
IMPORTER_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
IMPORTER_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
IMPORTER_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
IMPORTER_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
IMPORTER_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
IMPORTER_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
IMPORTER_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
IMPORTER_REPORT_BUCKET string да importer Название ведра для отчётов импорта в S3-подобном файлом хранилище
IMPORTER_REPORT_PATH string да report Префикс для названия отчётов импорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3)
IMPORTER_IMPORT_BUCKET string да importer Название ведра для пользовательских файлов импорта в S3-подобном файлом хранилище
IMPORTER_IMPORT_PATH string да import Префикс для названия пользовательских файлов импорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3)
IMPORTER_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
IMPORTER_JOURNAL_TOPIC string да, если переменная IMPORTER_JOURNAL_MODE = WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.

Список команд сервиса Importer

Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.

Название команды EntityType Actions
Список всех заданий импорта ImportProcess ListImportProcess
Получить задание импорта по ID ImportProcess GetImportProcess
Создать задание импорта ImportProcess CreateImportProcess
Отредактировать задание импорта ImportProcess UpdateImportProcess
Удалить задание импорта ImportProcess DeleteImportProcess
Запуск задания импорта по ID ImportProcess ExecuteImportProcess
Отмена задания импорта по ID ImportProcess ExecuteImportProcess
Получить прогресс задачи импорта ImportProcess ListImportProcess

В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

ListImportProcess

Payload для команды

 {
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "entityType",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
      "entityType": "abc",
      "status": "DRAFT",
      "importConfig": {
        "title": "Sample Project Title"
      },
      "importFile": "some file",
      "resultFile": null,
      "info": {},
      "created": 1723809067603,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1723809067603,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "executed": null,
      "executedBy": null,
      "version": 1
    }
  ],
  "total": 1
}

Возвращает список всех задач импорта. Поддерживается только синхронный вызов.

Команда Путь
importer_ListImportProcess HTTP POST "/v1/importProcess/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
entityType InSetQuery, LikeQuery, TsQuery
status InSetQuery

Доступные поля для сортировки:

Поле
entityType
status
created
modified
executed

GetImportProcess

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

{
  "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
  "entityType": "abc",
  "status": "DRAFT",
  "importConfig": {
    "title": "Sample Project Title"
  },
  "importFile": "some file",
  "resultFile": null,
  "info": {},
  "created": 1723809067603,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1723809067603,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "executed": null,
  "executedBy": null,
  "version": 1
}

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

Команда Путь
importer_GetImportProcess HTTP POST "/v1/importProcess/get"

CreateImportProcess

Payload для команды

{
  "entityType": "abc",
  "importConfig": {
    "title": "Sample Project Title"
  },
  "importFile": "some file"
}

Результат выполнения команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Добавляет новую задачу импорта с заданными параметрами. Отправляет событие о создании задачи импорта.

Команда Путь
importer_CreateImportProcess -

UpdateImportProcess

Payload для команды

{
  "id": "f283aac5-88e0-43b5-8dab-56c22d91acc7",
  "entityType": "abc",
  "importConfig": {
    "startRow": 3,
    "columnMapping": [
      {
        "property": "title",
        "columnLabel": "A"
      }
    ]
  },
  "importFile": "bucket/file_id",
  "version": 1
}

Результат выполнения команды

true

Обновляет данные задачи импорта. Отправляет событие об обновлении задачи импорта.

Команда Путь
importer_UpdateImportProcess -

DeleteImportProcess

Payload для команды

"f283aac5-88e0-43b5-8dab-56c22d91acc7"

Результат выполнения команды

true

Удаляет задачу импорта с заданным идентификатором. Отправляет событие об удалении задачи импорта.

Команда Путь
importer_DeleteImportProcess -

ExecuteImportProcess

Payload для команды

"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"

Результат выполнения команды

true

Запускает задачу импорта с заданным идентификатором. Отправляет событие о результатах выполнения задачи импорта.

Команда Путь
importer_ExecuteImportProcess -

CancelImportProcess

Payload для команды

"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"

Результат выполнения команды

true

Остановка задачи импорта с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
importer_CancelImportProcess -

GetImportProgress

Payload для команды

{
  "id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
}

Результат выполнения команды

{
  "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd": {
    "estimateTime": "PT12H54M5.02S",
    "percent": 0.3368487274760384,
    "stats": [
      {
        "name": "Лист1",
        "updates": {
          "succeed": 0,
          "skipped": 1723,
          "total": 1723
        },
        "creates": {
          "succeed": 569,
          "skipped": null,
          "total": 3277
        },
        "deleteRelations": {
          "succeed": 0,
          "skipped": null,
          "total": 0
        },
        "createRelations": {
          "succeed": 1139,
          "skipped": null,
          "total": 6555
        },
        "errors": 2
      }
    ]
  }
}

Прогресс задач импорта. Можно отфильтровать по идентификатору конкретной задачи. Поддерживается только синхронный вызов.

Команда Путь
importer_GetImportProgress -

Модели сервиса Importer

ImportProcessCreateDto

Поле Тип Обязательное Описание
entityType EntityTypeId (String) Да Тип импортируемой сущности
importConfig JSON (Object) Да Конфигурация импорта
importFile String Да URI файла (стандартная FS загрузка)

ImportProcessUpdateDto

Поле Тип Обязательное Описание
id ImportProcessId (UUID) Да Уникальный идентификатор задачи
entityType EntityTypeId (String) Да Тип импортируемой сущности
importConfig JSON (Object) Да Конфигурация импорта
importFile String Да URI файла (стандартная FS загрузка)
version Int Да Индекс оптимистической блокировки

ImportProcess

Поле Тип Обязательное Описание
id ImportProcessId (UUID) Да Уникальный идентификатор задачи
entityType EntityTypeId (String) Да Тип импортируемой сущности
status ImportProcessStatus (String) Да Состояние задачи (DRAFT, IN PROGRESS, SUCCESS, ERROR)
importConfig ImportConfig Да Конфигурация импорта
importFile ImportFileInformation[] Да URI и имя файла
resultFile ReportInformation[] Нет URI файла отчёта, кем и когда запущен, индекс файла импорта
info ImportInfo Да Статистика по импорту (summary)
created Long Да Дата создания записи
modified Long Да Дата изменения записи
executed Long Нет Дата изменения записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
executedBy UserId (UUID) Нет ID пользователя изменившего запись
version Int Да Индекс оптимистической блокировки

GetImportProgressDto

Поле Тип Обязательное Описание
id ImportProcessId (UUID) Нет Получить статистику только для указанной задачи

EstimateProgressStats

Поле Тип Обязательное Описание
estimateTime Duration ISO8601 Да Время до конца в таком формате PT12H54M5.02S
percent Double Да Процент выполнения (уже рассчитанные цифры из stats)
stats SheetImportTotalStatistic[] Да Числа статистики по листам

SheetImportTotalStatistic

Поле Тип Обязательное Описание
name String Да Название листа
updates StatFraction Да Количество обновлений
inserts StatFraction Да Количество созданий
deleteRelations StatFraction Да Количество удаленных связей
createRelations StatFraction Да Количество созданных связей
errors Int Да Количество ошибок

StatFraction

Поле Тип Обязательное Описание
succeed Int Да Успешно обработано
skipped Int Нет Пропущено
total Int Да Всего операций

ImportConfig

Поле Тип Обязательное Описание
startRow Int Нет С какой строки начать импорт
columnMapping ColumnMapping[] Да Информация о сопоставлении столбцов из файла и данных сущности
allowDeleteRelations Boolean Нет Разрешить удалять связи (в том числе при пустых ячейках исходя из конфигурации)
multipleValueSeparator Boolean Нет Разделитель при перечислении у множественных полей

ColumnMapping

Поле Тип Обязательное Описание
columnLabel String Да Название колонки файла, содержащей данные
property String Да Атрибут сущности, в который загружаются данные из колонки
propertyPKField String Нет Опциональное значение, указывающее атрибут связанного объекта или каталога,по которому будет осуществляться поиск соответствующего объекта
isPKProperty Boolean Нет Использовать для загрузки это поле в качестве первичного ключа
isExternalId Boolean Нет Использовать для загрузки это поле в качестве внешнего ID

ImportFileInformation

Поле Тип Обязательное Описание
fileName String Да Имя файла загруженного для импорта
importUrl String Да URI файла импорта (стандартная FS загрузка)

ReportInformation

Поле Тип Обязательное Описание
importFileIdx Int Да Индекс файла из поля importFile (ImportFileInformation[])
reportUrl String Да URI файла отчёта (стандартная FS загрузка)
executedBy UserId (UUID) Да Кем запущен
executed TimeStamp (Long) Да Время завершения импорта (формируется ближе к концу процесса)

ImportInfo

Поле Тип Обязательное Описание
error String Нет Ошибка, если был неуспешный запуск
stats Int SheetImportTotalStatistic Статистика для первого листа

Package-importer: сервис для пакетной загрузки

Локальный запуск

При запуске сервиса ожидается, что уже развернута необходимая инфраструктура:

Запуск из консоли с помощью SBT

PACKAGE_IMPORTER_DB_HOST=localhost PACKAGE_IMPORTER_DB_PORT=5432 PACKAGE_IMPORTER_DB_NAME=importer_db PACKAGE_IMPORTER_DB_USER=postgres PACKAGE_IMPORTER_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения сервиса package-importer

Все доступные переменные окружения для настройки сервиса.

Переменная Тип Обязательная Значение по умолчанию Описание
PACKAGE_IMPORTER_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
PACKAGE_IMPORTER_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
PACKAGE_IMPORTER_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
PACKAGE_IMPORTER_KAFKA_TOPIC string нет "package_importer_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
PACKAGE_IMPORTER_KAFKA_CONSUMER_GROUP string нет "package_importer_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
PACKAGE_IMPORTER_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
PACKAGE_IMPORTER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
PACKAGE_IMPORTER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
PACKAGE_IMPORTER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
PACKAGE_IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
PACKAGE_IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
PACKAGE_IMPORTER_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
PACKAGE_IMPORTER_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
PACKAGE_IMPORTER_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
PACKAGE_IMPORTER_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
PACKAGE_IMPORTER_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к харнилищу сертификатов.
PACKAGE_IMPORTER_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
PACKAGE_IMPORTER_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
PACKAGE_IMPORTER_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
PACKAGE_IMPORTER_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
PACKAGE_IMPORTER_DISCOVERABLE_ID string нет "another__PACKAGE_IMPORTER_service_instance" ID сервиса в ServiceDiscovery
PACKAGE_IMPORTER_DISCOVERABLE_NAME string нет "importer" Имя сервиса в ServiceDiscovery
PACKAGE_IMPORTER_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
PACKAGE_IMPORTER_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
PACKAGE_IMPORTER_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
PACKAGE_IMPORTER_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
PACKAGE_IMPORTER_SERVICE_TITLE string нет "Importer" Название сервиса для отображения
PACKAGE_IMPORTER_SERVICE_DESCRIPTION string нет "Service PACKAGE IMPORTER" Описание сервиса для отображения
PACKAGE_IMPORTER_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
PACKAGE_IMPORTER_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
PACKAGE_IMPORTER_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
PACKAGE_IMPORTER_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
PACKAGE_IMPORTER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
PACKAGE_IMPORTER_IMPORTER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
PACKAGE_IMPORTER_DB_HOST string да Хост БД
PACKAGE_IMPORTER_DB_PORT int да Порт БД
PACKAGE_IMPORTER_DB_NAME string да Имя базы в БД
PACKAGE_IMPORTER_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
PACKAGE_IMPORTER_DB_USER string да Пользователь БД
PACKAGE_IMPORTER_DB_PASSWORD string да Пароль пользователя БД
PACKAGE_IMPORTER_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
PACKAGE_IMPORTER_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
PACKAGE_IMPORTER_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
PACKAGE_IMPORTER_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
PACKAGE_IMPORTER_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
PACKAGE_IMPORTER_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
PACKAGE_IMPORTER_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
PACKAGE_IMPORTER_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
PACKAGE_IMPORTER_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
PACKAGE_IMPORTER_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
PACKAGE_IMPORTER_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
PACKAGE_IMPORTER_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
PACKAGE_IMPORTER_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
PACKAGE_IMPORTER_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
PACKAGE_IMPORTER_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
PACKAGE_IMPORTER_DB_SCHEMA string нет "public" Устанавливает schema по умолчанию
PACKAGE_IMPORTER_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
PACKAGE_IMPORTER_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
PACKAGE_IMPORTER_AUTHZFORCE_ADDR string нет "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
PACKAGE_IMPORTER_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в AuthZforce server
PACKAGE_IMPORTER_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
PACKAGE_IMPORTER_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
PACKAGE_IMPORTER_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
PACKAGE_IMPORTER_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
PACKAGE_IMPORTER_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
PACKAGE_IMPORTER_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
PACKAGE_IMPORTER_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
PACKAGE_IMPORTER_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
PACKAGE_IMPORTER_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
PACKAGE_IMPORTER_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
PACKAGE_IMPORTER_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
PACKAGE_IMPORTER_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
PACKAGE_IMPORTER_REPORT_BUCKET string да package-importer Название ведра для отчётов импорта в S3-подобном файлом хранилище
PACKAGE_IMPORTER_REPORT_PATH string да report Префикс для названия отчётов импорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3)
PACKAGE_IMPORTER_IMPORT_BUCKET string да package-importer Название ведра для пользовательских файлов импорта в S3-подобном файлом хранилище
PACKAGE_IMPORTER_IMPORT_PATH string да import Префикс для названия пользовательских файлов импорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3)
PACKAGE_IMPORTER_KAFKA_PACKAGEIMPORTCONFIGEVENT_TOPIC string да packageImportConfigEvents Топик для событий по конфигам пакетной загрузки
PACKAGE_IMPORTER_KAFKA_PACKAGEIMPORTPROCESSEVENT_TOPIC string да packageImportProcessEvents Топик для событий по процессам пакетной загрузки
PACKAGE_IMPORTER_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
PACKAGE_IMPORTER_JOURNAL_TOPIC string да, если переменная PACKAGE_IMPORTER_JOURNAL_MODE = WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.
PACKAGE_IMPORTER_NOT_LOCATED_DIRECTORY_BUCKET string нет "package-importer-not-located" Место в s3, куда сохраняются нераспределенные файлы
PACKAGE_IMPORTER_PARALLEL_DESTINATIONS int нет 4 Во сколько мест параллельно можно записать файлы при пакетной загрузке
PACKAGE_IMPORTER_PARALLEL_ASYNC_PROCESS int нет 4 Сколько возможно параллельных асихронных процессов пакетной загрузки
PACKAGE_IMPORTER_MAX_SYNC_PROCESS int нет 4 Сколько возможно синхронных процессов пакетной загрузки
PACKAGE_IMPORTER_ENABLE_SCHEDULE bool нет false Включение/выключение работы конфигов по кронам

Список команд сервиса Package Importer

Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.

Название команды EntityType Actions
Список всех конфигов пакетной загрузки PackageImportConfig ListPackageImportConfig
Получение конфига пакетной загрузки по ID PackageImportConfig GetPackageImportConfig
Создать конфиг пакетной загрузки PackageImportConfig CreatePackageImportConfig
Отредактировать конфиг пакетной загрузки PackageImportConfig UpdatePackageImportConfig
Удалить конфиг пакетной загрузки PackageImportConfig DeletePackageImportConfig
Список всех процессов пакетной загрузки PackageImportProcess ListPackageImportProcess
Получение процесса пакетной загрузки по ID PackageImportConfig GetPackageImportProcess
Удалить процесс пакетной загрузки PackageImportProcess DeletePackageImportProcess
Список всех файлов пакетной загрузки PackageImportFile ListPackageImportFile
Список всех not located файлов пакетной загрузки PackageImportFile ListNotLocatedPackageImportFile
Массовое дораспределение файлов пакетной загрузки PackageImportFile ProcessPackageImportFile
Получение файла пакетной загрузки по ID PackageImportFile GetPackageImportFile
Удалить журналирование файла пакетной загрузки PackageImportConfig DeletePackageImportFile
Удалить журналирование файлов пакетной загрузки PackageImportConfig DeletePackageImportFileSearch
Запустить пакетную загрузку PackageImportConfig ExecutePackageImport
Запустить локальную пакетную загрузку PackageImportConfig ExecuteLocalPackageImport
Проверить сетевую папку PackageImportConfig CheckNetworkFolder

DeletePackageImportFile В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

ListPackageImportConfig

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "title": "title",
      "description": "Some testable package import config",
      "config": {},
      "created": 1723553566671,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1723553569099,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "version": 1
    }
  ],
  "total": 1
}

Возвращает список всех конфигов пакетной загрузки. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_ListPackageImportConfig HTTP POST "/v1/packageImportConfig/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
title LikeQuery
description LikeQuery
createdBy InSetQuery

Доступные поля для сортировки:

Поле
title
created
modified
createdBy
modifiedBy

GetPackageImportConfig

Payload для команды

  "some-id"

Результат выполнения команды


{
  "id": "some-id",
  "title": "title",
  "description": "Some testable package import config",
  "config": {},
  "created": 1723553566671,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1723553569099,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "version": 1
}

Поиск конфига пакетной загрузки с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_GetPackageImportConfig HTTP POST "/v1/packageImportConfig/get"

CreatePackageImportConfig

Payload для команды

{
  "title": "title",
  "description": "Some testable package import config",
  "config": {}
}

Результат выполнения команды

"some-id"

Добавляет новый конфиг пакетной загрузки. Отправляет событие о создании конфига.

Команда Путь
packageImporter_CreatePackageImportConfig -

UpdatePackageImportConfig

Payload для команды

{
  "id": "some-id",
  "title": "title",
  "description": "Some VERY testable package import config (new description)",
  "config": {}
}

Результат выполнения команды

true

Обновляет данные о конфиге пакетной загрузки. Отправляет событие об обновлении конфига.

Команда Путь
packageImporter_UpdatePackageImportConfig -

DeletePackageImportConfig

Payload для команды

"some-id"

Результат выполнения команды

true

Удаляет конфиг пакетной загрузки с заданным идентификатором. Отправляет событие об удалении конфига.

Команда Путь
packageImporter_DeletePackageImportConfig -

ListPackageImportProcess

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "status",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "packageImportConfigId": "some-config-id",
      "status": "IN PROGRESS",
      "config": {},
      "info": {},
      "sourceType": "NetworkFolder",
      "executionType": "Manual",
      "executed": "1723553569099",
      "executedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282"
    }
  ],
  "total": 1
}

Возвращает список всех процессов пакетной загрузки. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_ListPackageImportProcess HTTP POST "/v1/packageImportProcess/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
executedBy InSetQuery
sourceType InSetQuery
executionType InSetQuery
packageImportConfigId InSetQuery
status InSetQuery
executed RangeQuery

Доступные поля для сортировки:

Поле
packageImportConfigId
status
executed
sourceType
executionType

GetPackageImportProcess

Payload для команды

  "some-id"

Результат выполнения команды

{
  "id": "some-id",
  "packageImportConfigId": "some-config-id",
  "status": "IN PROGRESS",
  "config": {},
  "info": {},
  "sourceType": "NetworkFolder",
  "executionType": "Manual",
  "executed": "1723553569099",
  "executedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282"
}

Поиск процесса пакетной загрузки с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_GetPackageImportProcess HTTP POST "/v1/packageImportProcess/get"

DeletePackageImportProcess

Payload для команды

"some-id"

Результат выполнения команды

true

Удаляет процесс пакетной загрузки с заданным идентификатором. Отправляет событие об удалении процесса.

Команда Путь
packageImporter_DeletePackageImportProcess -

ListPackageImportFile

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "status",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "packageImportProcessId": "some-process-id",
      "fileName": "some.json",
      "status": "IN PROGRESS",
      "sourceFilePath": "folder/some.json",
      "processedFilePath": "",
      "info": {},
      "executed": "1723553569099"
    }
  ],
  "total": 1
}

Возвращает список всех файлов пакетной загрузки. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_ListNotLocatedPackageImportFile HTTP POST "/v1/packageImportFile/listNotLocated"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
sourceFilePath LikeQuery, InSetQuery
packageImportProcessId InSetQuery
status InSetQuery
fileName LikeQuery, InSetQuery

Доступные поля для сортировки:

Поле
packageImportProcessId
sourceFilePath
status
executed
fileName

ListNotLocatedPackageImportFile

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "status",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

[
  {
    "fileName": "LKMN-0D33-RD-VNPR-WHPT-005-0040-FF-BOM-01168-01-AFU.json",
    "sourceFilePath": "smb://10.168.22.228/Data/LKMN-0D33-RD-VNPR-WHPT-005-0040-FF-BOM-01168-01-AFU.json",
    "journaledRows": [
      {
        "id": "82a20d47-e9e4-4baa-be4b-939ad55668af",
        "packageImportProcessId": "76333294-e37a-4db9-aa4e-fe80db8fdb7c",
        "status": "NOT LOCATED",
        "processedFilePath": "package-importer-not-located\\036bf9b0-97fe-4fab-b878-1b2fc61dbe3c",
        "info": {},
        "executed": 1744880455236
      },
      {
        "id": "73b6f35f-bbe5-4744-bafd-19a716200dde",
        "packageImportProcessId": "79cc58e1-2e38-49be-915c-a19e894ebc46",
        "status": "NOT LOCATED",
        "processedFilePath": "package-importer-not-located\\7442c4be-e20c-4d70-a90f-e51dd839b295",
        "info": {},
        "executed": 1744887090266
      }
    ]
  }
]

Возвращает сгруппированный список файлов пакетной загрузки по полям fileName и sourceFilePath, у которых НЕТ И НЕ БЫЛО ДРУГОГО СТАТУСА кроме NOT LOCATED.

Наши варианты:

  1. Файл обрабатывался один раз и с первого раза попал в карточку. Запись в таблице у него одна и она в состоянии Success
  2. Файл обрабатывался много раз но до сих пор не попал в карточку. Записей в таблице у него несколько и они все NonLocated
  3. Файл обрабатывался много раз, и первые несколько раз ему не удалось подобрать карточку, но в последний раз удалось. У него несколько записей в таблице - несколько NonLocated и одна Success

Роут возвращает то, что описано во втором пункте.

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

Команда Путь
packageImporter_ListNotLocatedPackageImportFile HTTP POST "/v1/packageImportFile/listNotLocated"

Доступные поля для фильтрации и виды фильтров по ним как в роуте ListPackageImportFile

Доступные поля для сортировки:

Поле
sourceFilePath
fileName

ReprocessPackageImportFile

Payload для команды

[
  {
    "fileName": "имя файла",
    "sourceFilePath": "Источник файла",
    "journaledIds": [
      "uuid-asdfasdff",
      "uuid-asdfasdff2",
      "uuid-asdfasdff3"
    ]
  }
] 

Результат выполнения команды

""

Дораспределяет файлы, которые находятся в статусе NOT LOCATED. Создает hidden процессы до тех пор, пока есть нераспределенные файлы. Если команды выполняется синхронно, то она выполняется до тех пор пока не выполнится логика. Предполагается, что бужет использоваться как асинхронная команда через send/async.

Если файлы не в состоянии NOT LOCATED, выдаст ошибку, какие именно файлы не в нужном статусе.

После успешного распределения файлов предыдущие записи в PackageImportProcess со статусами NOT LOCATED, ERROR станут в статус SUCCESS LATER. Update происходит по полям fileName и processedFilePath.

ВАЖНО: при журналировании файлов процесса дораспределения в sourceFilePath пишется то, что мы получили в processedFilePath, потому что мы не загружаем еще раз в s3, а просто пытаемся перетащить из бакета not located в бакет temp, а потом выполняем команду datamodel.

Команда Путь
packageImporter_ReprocessPackageImportFiles -

GetPackageImportFile

Payload для команды

  "some-id"

Результат выполнения команды

{
  "id": "some-id",
  "packageImportProcessId": "some-process-id",
  "fileName": "some.json",
  "status": "IN PROGRESS",
  "sourceFilePath": "folder/some.json",
  "processedFilePath": "",
  "info": {},
  "executed": "1723553569099"
}

Поиск файла пакетной загрузки с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_GetPackageImportFile HTTP POST "/v1/packageImportFile/get"

DeletePackageImportFile

Payload для команды

  "some-id"

Результат выполнения команды

true

Удаление файла пакетной загрузки с заданным идентификатором. Если файл со статусом NOT LOCATED, пройзойдет попытка удаления файла из s3 по тому пути, который описан в processedFilePath. Если нет пути - не удалит, но удалит из бд. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_DeletePackageImportFile

DeletePackageImportFileSearch

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": null,
  "paging": null
}

Результат выполнения команды

true

Удаление файлов пакетной загрузки с заданным идентификатором. Аналогичное удаление как и в DeletePackageImportFile, но передается Search вместо id. Возможна ошибка EntityNotFound, если нет таких файлов в бд. Поля sort и paging при удалении не учитываются. Поддерживается только синхронный вызов.

Команда Путь
packageImporter_DeletePackageImportFileSearch

ExecutePackageImport

Payload для команды

  "some-config-id"

Результат выполнения команды

  "some-process-id"

Запуск процесса пакетной загрузки в бекграунде и возвращение id запущенного процесса.

Процесс загружает файлы, найденные в папке networkFolders, в destinationFields.fieldName - поле, куда добавляем файлы. Информация для процесса берется из поля info PackageImportConfig.

Файлы должны быть с названием в виде {шифр}{постфикс}.{расширение}. По расширению также можно отфильтровать в info конфига, чтобы импортились с определенным расширением.

Процесс импорта может завершиться 3 статусами. Вначале ему присваивается статус IN PROGRESS. После импорта - SUCCESS ( если хотя бы один файл загружен), ERROR (если ошибка загрузки или ошибка доступа к папкам), NOT LOCATED (если сохранили в бакет not-located, то есть нет объектов, куда можно добавить в поле - которые ищем по шифру файла).

У каждого файла такие же статусы. Вначале присвается IN PROGRESS, завершается SUCCESS - если все ок, ERROR - если не вышло загрузить, NOT LOCATED - если загрузили в бакет not-located.

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

Команда Путь
packageImporter_ExecutePackageImport HTTP POST "/v1/packageImport/execute"

ExecuteLocalPackageImport

Payload для команды

{
  "configId": "a44296bc-f09c-4248-b279-061f8f363356",
  "files": [
    {
      "fileName": "LKMN-0D33-RD-VNPR-WHPT-005-0040-FF-BOM-01168-01-AFU.json",
      "url": "temp/10126f32-5b6a-418b-98ea-9d5e55ec65bb",
      "fileId": "10126f32-5b6a-418b-98ea-9d5e55ec65bb"
    }
  ]
}

Результат выполнения команды

  "some-process-id"

Команда с аналогичной логикой как в ExecutePackageImport. Разница лишь в том, что файлы берутся не из папки, а из payload, предполагая что они уже скачаны в s3.

Также запускается процесс в бекграунде и как можно быстрее возвращаем processId.

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

Команда Путь
packageImporter_ExecuteLocalPackageImport HTTP POST "/v1/packageImport/executeLocal"

CheckNetworkFolder

{
  "networkFolder": "smb://192.168.1.99//networkFolder/",
  "user": "user",
  "password": "password"
}

Результат выполнения команды

{
  "result": "SUCCESS",
  "errorMessage": null
}

Роут для проверки сетевой папки. Возвращает boolean - результат проверки, папка ли это. Поддерживается только синхронный вызов.

В networkFolder может быть либо виндовый UNC-путь (тогда user и password не используются), либо путь через протокол smb, где user и password - credentials для профиля подключенного по сети пк. Можно расшарить папку и дать все доступы, тогда credentials для smb не будут нужны.

Примеры путей:

smb -> "smb://192.168.1.99//networkFolder/"

unc -> "\\192.168.1.99\networkFolder"

Варианты ответов:

SUCCESS - мы подключаемся к папке

AUTH - неверный логин пароль подключения

TIMEOUT - таймаут выполения подключения к папке (5 секунд)

PATH - неверный путь (либо мы смогли подключиться, но это не папка)

FAILURE - все остальные падения

Во всех случаях статус ответа - 200

Команда Путь
packageImporter_CheckNetworkFolder HTTP POST "/v1/packageImport/checkNetworkFolder"

Модели сервиса package-importer

PackageImportConfig

Поле Тип Обязательное Описание
id ProjectConfigId (String) Да Уникальный идентификатор - строковый код
title String Да Наименование шаблона
description String Нет Описание
config jsonb Да Конфигурация пакетной загрузки
created Long Да Время создания
createdBy UserId (UUID) Да Uuid пользователя создавшего запись
modified Long Да Время изменения
modifiedBy UserId (UUID) Да Uuid пользователя изменившего запись
version Int Да Версия для оптимистической блокировки

PackageImportConfigCreateDto

Поле Тип Обязательное Описание
title String Да Наименование шаблона
description String Нет Описание
config jsonb Да Конфигурация пакетной загрузки

PackageImportConfigUpdateDto

Поле Тип Обязательное Описание
id ProjectConfigId (String) Да Уникальный идентификатор - строковый код
title String Да Наименование шаблона
description String Нет Описание
config jsonb Да Конфигурация пакетной загрузки
version Int Да Индекс оптимистической блокировки

ExecuteLocalPackageImportDto

Поле Тип Обязательное Описание
configId ProjectConfigId (String) Да Ид конфига пакетной загрузки
files SeqLocalPackageImportFile Да Уже загруженные в бакет tmp файлы

LocalPackageImportFile

Поле Тип Обязательное Описание
fileId String Да Id файла в s3
url String Да Полный путь к файлу в s3
fileName String Да Имя файла с расширением

CheckNetworkFolderDto

Поле Тип Обязательное Описание
networkFolder String Да Полный путь до сетевой папки
user String Нет Имя пользователя для доступа к сетевой папке
password String Нет Пароль для доступа к сетевой папке

CheckNetworkFolderResponse

Поле Тип Обязательное Описание
result CheckNetworkFolderString (String) Да Результат проверки доступа к сетевой папке и проверка на папку
errorMessage String Нет Ошибка, если не смогли проверить доступность папки

PackageImportFileNotLocatedResponse

Поле Тип Обязательное Описание
fileName String Да Имя файла
sourceFilePath String Да Источник файла
journaledRows SeqPackageImportFileGrouped Да Список файлов, которые находятся в статусе NOT LOCATED

PackageImportFileGrouped

Поле Тип Обязательное Описание
id PackageImportFileId (UUID) Да Уникальный идентификатор записи - автогенерируемый UUID
packageImportProcessId PackageImportProcessId (UUID) Да Ссылка на процесс в котором происходит импорт файла
status PackageImportProcessStatus (String) Да Состояние процесса импорта (IN PROGRESS, SUCCESS, ERROR)
processedFilePath String Нет Полный путь до файла, после процессинга (в нашей S3)
info JSON (Object) Да Дополнительная произвольняа метаинформация о том что случилось в процессе импорта файла (ссылки на документ, причины ошибок)
executed Long Нет Дата изменения записи

PackageImportFileReprocess

Поле Тип Обязательное Описание
fileName String Да Имя файла
sourceFilePath String Да Источник файла
journaledIds Seq[PackageImportFileId (UUID)] Да Id файлов, которые хотим распределить и которые находятся в статусе NOT LOCATED

PackageImportProcess

Поле Тип Обязательное Описание
id PackageImportProcessId (UUID) Да Уникальный идентификатор процесса
packageImportConfigId PackageImportConfigId (UUID) Да Ссылка на конфиг по которому запущен процесс
status PackageImportProcessStatus (String) Да Состояние процесса (IN PROGRESS, SUCCESS, ERROR)
config JSON (Object) Да Конфигурация пакетной загрузки - сюда мы запоминаем содержимое конфига на момент старта
info JSON (Object) Да Дополнительная произвольняа метаинформация о процессе импорта
sourceType SourceType (String) Да Источник запуска: LocalFiles, NetworkFolder
executionType ExecutionType (String) Да Тип запуска: Manual, Automatic
executed Long Да дата/время запуска импорта
executedBy UserId (UUID) Нет ID пользователя изменившего запись
hidden Boolean Да Флаг скрытого процесса

PackageImportFile

Поле Тип Обязательное Описание
id PackageImportFileId (UUID) Да Уникальный идентификатор записи - автогенерируемый UUID
packageImportProcessId PackageImportProcessId (UUID) Да Ссылка на процесс в котором происходит импорт файла
fileName String Да Имя файла
status PackageImportProcessStatus (String) Да Состояние процесса импорта (IN PROGRESS, SUCCESS, ERROR)
sourceFilePath String Да Полный путь до файла, который мы загружаем (в исходной папке)
processedFilePath String Нет Полный путь до файла, после процессинга (в нашей S3)
info JSON (Object) Да Дополнительная произвольняа метаинформация о том что случилось в процессе импорта файла (ссылки на документ, причины ошибок)
executed Long Нет Дата изменения записи

project-copy: сервис копирования проектов

Команды могут приходить как по HTTP, так и через Kafka в топик project_copy_commands.

Сервис разбит на несколько модулей, в виде sbt проектов:

Информация по добавлению команд можно прочитать в описании шаблона

Локальный запуск

При запуске сервиса ожидается, что уже развернута необходимая инфраструктура:

Запуск из консоли с помощью SBT

PROJECT_COPY_DB_HOST=localhost PROJECT_COPY_DB_PORT=5432 PROJECT_COPY_DB_NAME=projectcopy_db PROJECT_COPY_DB_USER=postgres PROJECT_COPY_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения сервиса project-copy

Все доступные переменные окружения для настройки сервиса.

Переменная Тип Обязательная Значение по умолчанию Описание
PROJECT_COPY_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
PROJECT_COPY_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
PROJECT_COPY_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
PROJECT_COPY_KAFKA_TOPIC string нет "project_copy_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
PROJECT_COPY_KAFKA_CONSUMER_GROUP string нет "project_copy_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
PROJECT_COPY_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
PROJECT_COPY_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
PROJECT_COPY_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
PROJECT_COPY_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
PROJECT_COPY_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах PROJECT_COPY_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
PROJECT_COPY_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который PROJECT_COPY_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
PROJECT_COPY_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
PROJECT_COPY_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
PROJECT_COPY_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
PROJECT_COPY_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
PROJECT_COPY_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
PROJECT_COPY_KAFKA_AUTH_MODE string нет "" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
PROJECT_COPY_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]
PROJECT_COPY_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
PROJECT_COPY_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
PROJECT_COPY_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL duration string нет 4 minutes Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом.
PROJECT_COPY_KAFKA_CONNECTION_CHECK_INTERVAL duration string нет 60 seconds Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений.
PROJECT_COPY_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL duration string нет 5 minutes Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным.
PROJECT_COPY_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
PROJECT_COPY_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
PROJECT_COPY_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
PROJECT_COPY_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
PROJECT_COPY_DISCOVERABLE_ID string нет "another_PROJECT_COPY_service_instance" ID сервиса в ServiceDiscovery
PROJECT_COPY_DISCOVERABLE_NAME string нет "projectcopy" Имя сервиса в ServiceDiscovery
PROJECT_COPY_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
PROJECT_COPY_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
PROJECT_COPY_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
PROJECT_COPY_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
PROJECT_COPY_SERVICE_TITLE string нет "project-copy" Название сервиса для отображения
PROJECT_COPY_SERVICE_DESCRIPTION string нет "Service PROJECT_COPY" Описание сервиса для отображения
PROJECT_COPY_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
PROJECT_COPY_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
PROJECT_COPY_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
PROJECT_COPY_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
PROJECT_COPY_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
PROJECT_COPY_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
PROJECT_COPY_DB_HOST string да Хост БД
PROJECT_COPY_DB_PORT int да Порт БД
PROJECT_COPY_DB_NAME string да Имя базы в БД
PROJECT_COPY_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
PROJECT_COPY_DB_USER string да Пользователь БД
PROJECT_COPY_DB_PASSWORD string да Пароль пользователя БД
PROJECT_COPY_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
PROJECT_COPY_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
PROJECT_COPY_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
PROJECT_COPY_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
PROJECT_COPY_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
PROJECT_COPY_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
PROJECT_COPY_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
PROJECT_COPY_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
PROJECT_COPY_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
PROJECT_COPY_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
PROJECT_COPY_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
PROJECT_COPY_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
PROJECT_COPY_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
PROJECT_COPY_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
PROJECT_COPY_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
PROJECT_COPY_DB_SCHEMA string нет "public" Устанавливает schema по умолчанию
PROJECT_COPY_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
PROJECT_COPY_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
PROJECT_COPY_AUTHZFORCE_ADDR string нет "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
PROJECT_COPY_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в AuthZforce server
PROJECT_COPY_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
PROJECT_COPY_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
PROJECT_COPY_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
PROJECT_COPY_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
PROJECT_COPY_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
PROJECT_COPY_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
PROJECT_COPY_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
PROJECT_COPY_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
PROJECT_COPY_LOG_LEVEL_HTTP_SERVER string нет WARN Уровень логирования HTTP-сервера
PROJECT_COPY_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
PROJECT_COPY_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
PROJECT_COPY_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
PROJECT_COPY_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
PROJECT_COPY_LOG_OUTPUT string нет STDOUT Вывод лога
PROJECT_COPY_SYSLOG_TYPE string нет UDP Тип передачи syslog
PROJECT_COPY_LOGGING_SRC_IP string нет для параметра src в логах
PROJECT_COPY_LOGGING_SRC_HOST string нет для параметра shost в логах
PROJECT_COPY_LOGGING_DST_IP string нет для параметра dst в логах
PROJECT_COPY_LOGGING_CEF_VER string нет 0 версия CEF
PROJECT_COPY_PROCESSING_PERSIST_INTERVAL duration string нет 5 seconds Интервал записи результатов выполнения задач копирования в БД
PROJECT_COPY_PROCESSING_PARALLELISM int нет 3 Количество одновременно выполняемых задач копирования
PROJECT_COPY_PROCESSING_PAGE_SIZE int нет 1000 Размер страницы при копировании длинных списков
PROJECT_COPY_PROCESSING_CLEAR_PARALLELISM int нет 5 Количество одновременно выполняемых запросов при очищении проекта

Список команд сервиса project-copy

В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

В сервисе реализованы команды:

GetSnapshot

Возвращает снапшот проекта, указанного в X-Context

Результат выполнения команды

{
  "entities": [
    {
      "code": "entityWithAllFields",
      "title": "Сущность со всеми типами полей",
      "dependencies": [
        {
          "category": "catalogs",
          "code": "mechanismCatalog"
        }
      ]
    }
  ],
  "entitiesData": [],
  "userGroups": [],
  "policies": [],
  "indexations": [],
  "catalogs": [
    {
      "code": "mechanismCatalog",
      "title": "Каталог",
      "dependencies": []
    }
  ],
  "forms": [],
  "entityClasses": [],
  "exportTemplates": [],
  "hierarchies": [],
  "generationRuleSets": [],
  "valueGenerationRules": [],
  "numerationRules": [],
  "ftsMappings": [],
  "relations": [
    {
      "entity1": "documentTest",
      "entity2": "systemTest",
      "field1": "fromDocumentToSystem",
      "field2": "fromSystemToDocument",
      "title1": "Система документа",
      "title2": "Документы Системы"
    }
  ]
}
Команда Путь
projectcopy_GetSnapshot HTTP POST "/v1/snapshot/get"

CreateAndRunPlan

Создает и запускает процесс копирования проекта

Payload для команды

{
  "projectFrom": "project1",
  "projectTo": "project2",
  "title": "Process name",
  "entities": [ 
    "entityWithAllFields" 
  ],
  "entitiesData": [],
  "userGroups": [],
  "policies": [],
  "indexations": [],
  "catalogs": [
    "mechanismCatalog"
  ],
  "forms": [],
  "entityClasses": [],
  "exportTemplates": [],
  "hierarchies": [],
  "generationRuleSets": [],
  "valueGenerationRules": [],
  "numerationRules": [],
  "ftsMappings": [],
  "relations": [
    {
      "entity1": "documentTest",
      "entity2": "systemTest",
      "field1": "fromDocumentToSystem",
      "field2": "fromSystemToDocument"
    }
  ]
}

Результат выполнения команды

"865b7ec2-b6f8-4a71-89fe-fbfa041360f8"

Команда возвращает ID созданного процесса

Команда Путь
projectcopy_CreateAndRunPlan -

ClearProject

Полностью удаляет все данные из проекта

Payload для команды

"92b0e49f-94e8-4e2c-bbf1-abf2d1b033a6"

Команда не возвращает данных

Команда Путь
projectcopy_ClearProject -

Модели сервиса project-copy

PlanCreateDTO

Поле Тип Обязательное Описание
projectFrom string нет ID проекта, из которого произойдет копирование
projectTo string да ID проекта, в который произойдет копирование
clearProject boolean да Очистить проект перед копированием
title string да Название процесса копирования
entities string[] да Коды типов сущностей в сервисе Datamodel
entitiesData string[] да Коды данных типов сущностей в сервисе Datamodel
userGroups string[] да Коды групп пользователей
policies string[] да Коды политик
indexations string[] да Коды индексаций
catalogs string[] да Коды каталогов
forms string[] да Коды форм ui-storage
entityClasses string[] да Коды классов сущностей
exportTemplates string[] да Коды шаблонов экспорта
hierarchies string[] да Коды иерархий
generationRuleSets string[] да Коды правил генерации документа
valueGenerationRules string[] да Коды правил генерации значения поля сущности
numerationRules string[] да Коды правил нумерации
ftsMappings string[] да Коды правил индексации в FTS
relations PlanRelationInfo[]] да Список отношений сущностей Datamodel

SnapshotInfo

Поле Тип Обязательное Описание
entities SnapshotEntityInfo[]] да Информация о типах сущностей в сервисе Datamodel
entitiesData SnapshotEntityInfo[]] да Информация о данных типов сущностей в сервисе Datamodel
userGroups SnapshotEntityInfo[]] да Информация о группах пользователей
policies SnapshotEntityInfo[]] да Информация о политиках
indexations SnapshotEntityInfo[]] да Информация о индексациях
catalogs SnapshotEntityInfo[]] да Информация о каталогах
forms SnapshotEntityInfo[]] да Информация о формах ui-storage
entityClasses SnapshotEntityInfo[]] да Информация о классах сущностей
exportTemplates SnapshotEntityInfo[]] да Информация о шаблонах экспорта
hierarchies SnapshotEntityInfo[]] да Информация об иерархиях
generationRuleSets SnapshotEntityInfo[]] да Информация о правилах генерации документа
valueGenerationRules SnapshotEntityInfo[]] да Информация о правилах генерации значения поля сущности
numerationRules SnapshotEntityInfo[]] да Информация о правилах нумерации
ftsMappings SnapshotEntityInfo[]] да Информация о правилах индексации в FTS
relations SnapshotRelationInfo[]] да Список отношений сущностей Datamodel

SnapshotEntityInfo

Поле Тип Обязательное Описание
code String да Код (ID) сущности
title String да Название сущности
dependencies SnapshotDependency[]] да Зависимости сущности

SnapshotRelationInfo

Поле Тип Обязательное Описание
entity1 String да Код сущности 1
entity2 String да Код сущности 2
field1 String да Код поля в сущности 1
field2 String нет Код поля в сущности 2
title1 String да Наименование поля для сущности 1
title2 String нет Наименование поля для сущности 2

PlanRelationInfo

Поле Тип Обязательное Описание
entity1 String да Код сущности 1
entity2 String да Код сущности 2
field1 String да Код поля в сущности 1
field2 String нет Код поля в сущности 2

SnapshotDependency

Поле Тип Обязательное Описание
category String да Тип сущности. Соответствует полю в SnapshotInfo
code String да Код (ID) сущности

VNP-control: сервис спец команд проекта DYG

Сервис подготавливает данные для построения деревьев ВНП Команды могут приходить как по HTTP, так и через Kafka в топик vnpcontrol_commands.

В сервисе реализованы следующие команды:

Optimistic Lock

У нескольких команд реализован механизм оптимистичных блокировок. Для этого в данных присутствует поле version. Задача оптимистичных блокировок - предотвратить одновременное редактирование объекта из двух открытых форм. Сначала фронтэнд запрашивает данные объекта и получает в ответе версию данных - поле version. Он прикладывает эту версию в ответе. Если на бэкэнде она совпадает с исходной (не было других модификаций), тогда данные сохраняются, а версия поднимается. Иначе сохранения не происходит, данные не перетираются.

Сервис разбит на несколько модулей, в виде sbt проектов:

Информация по добавлению команд можно прочитать в описании шаблона

Конфигурирование

Требования к запуску

Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm.

Для корректной минимальной работы сервиса требуется обязательное подключение к PostgreSQL, Kafka, Consul. Для настройки подключения к ним нужно заполнить обязательные переменные окружения из раздела ниже.

Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus, ApiGateway. В этом случае нужно уделить внимание настройкам, связанным с ServiceDiscovery и CommandDiscovery.

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

Команда Внешние сервисы

Запуск из консоли с помощью SBT

VNPCONTROL_DB_HOST=localhost VNPCONTROL_DB_PORT=5432 VNPCONTROL_DB_NAME=vnpcontrol_db VNPCONTROL_DB_USER=postgres VNPCONTROL_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения

Все доступные переменные окружения для настройки сервиса.

Настройки логеров описаны в общей документации.

Переменная Тип Обязательная Значение по умолчанию Описание
VNPCONTROL_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
VNPCONTROL_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
VNPCONTROL_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
VNPCONTROL_KAFKA_TOPIC string нет "vnpcontrol_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
VNPCONTROL_KAFKA_CONSUMER_GROUP string нет "vnpcontrol_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
VNPCONTROL_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
VNPCONTROL_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
VNPCONTROL_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
VNPCONTROL_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
VNPCONTROL_KAFKA_PROJECTCONFIGEVENT_TOPIC string да "projectConfigEvents" Название кафка-топика для отправки сообщений о событиях изменения конфигураций проекта.
VNPCONTROL_KAFKA_GENERATIONRULESET_TOPIC string да "generationRuleSetEvents" Название кафка-топика для отправки сообщений о событиях изменения правил генерации документа.
VNPCONTROL_KAFKA_NUMERATIONRULE_TOPIC string да "numerationRuleEvents" Название кафка-топика для отправки сообщений о событиях изменения правил нумерации сущности.
VNPCONTROL_KAFKA_VALUEGENERATIONRULE_TOPIC string да "valueGenerationRuleEvents" Название кафка-топика для отправки сообщений о событиях изменения правил заполнения полей сущностей.
VNPCONTROL_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
VNPCONTROL_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
VNPCONTROL_KAFKA_AUTH_PRINCIPAL string нет "" Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos).
VNPCONTROL_KAFKA_AUTH_KEYTAB_PATH string нет "" Путь до keytab-файла(в случае соединения с kafka через Kerberos).
VNPCONTROL_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет.
VNPCONTROL_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
VNPCONTROL_KAFKA_AUTH_MODE string нет "static" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
VNPCONTROL_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings.
VNPCONTROL_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
VNPCONTROL_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
VNPCONTROL_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
VNPCONTROL_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
VNPCONTROL_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
VNPCONTROL_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
VNPCONTROL_DISCOVERABLE_ID string нет "another_VNPCONTROL_service_instance" ID сервиса в ServiceDiscovery
VNPCONTROL_DISCOVERABLE_NAME string нет "vnpcontrol" Имя сервиса в ServiceDiscovery
VNPCONTROL_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
VNPCONTROL_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
VNPCONTROL_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
VNPCONTROL_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
VNPCONTROL_SERVICE_TITLE string нет "Vnpcontrol" Название сервиса для отображения
VNPCONTROL_SERVICE_DESCRIPTION string нет "Сервис аналитики" Описание сервиса для отображения
VNPCONTROL_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
VNPCONTROL_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
VNPCONTROL_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
VNPCONTROL_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
VNPCONTROL_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
VNPCONTROL_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
VNPCONTROL_DB_HOST string да Хост БД
VNPCONTROL_DB_PORT int да Порт БД
VNPCONTROL_DB_NAME string да Имя базы в БД
VNPCONTROL_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
VNPCONTROL_DB_USER string да Пользователь БД
VNPCONTROL_DB_PASSWORD string да Пароль пользователя БД
VNPCONTROL_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
VNPCONTROL_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
VNPCONTROL_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
VNPCONTROL_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
VNPCONTROL_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
VNPCONTROL_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
VNPCONTROL_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
VNPCONTROL_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
VNPCONTROL_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
VNPCONTROL_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
VNPCONTROL_DB_INITIALIZATION_FAIL_FAST string нет false Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
VNPCONTROL_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
VNPCONTROL_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
VNPCONTROL_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
VNPCONTROL_FS_URI string да http://localhost:9000/ Адрес файлового хранилища
VNPCONTROL_FS_ACCESS_KEY_ID string да minioadmin Имя пользователя файлового хранилища
VNPCONTROL_FS_SECRET_ACCESS_KEY string да minioadmin Пароль пользователя файлового хранилища
VNPCONTROL_FS_UPLOAD_PARALLELISM int нет 4 Параллелизм для загрузки файлов
VNPCONTROL_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
VNPCONTROL_FS_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
VNPCONTROL_FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
VNPCONTROL_FS_CACHE_TTL duration string нет Время жизни клиента в кеше
VNPCONTROL_EXTERNAL_MIGRATIONS_RETRY_DELAY duration string нет 15 seconds Задержка между повторными попытками запуска внешних миграций
VNPCONTROL_EXTERNAL_MIGRATIONS_RETRY_ATTEMPTS int нет 5 Максимальное количество попыток запуска внешних миграций
VNPCONTROL_DM_SCHEMA_CACHE_SIZE int нет 128 Максимальный размер кэша для json schema
VNPCONTROL_DM_SCHEMA_CACHE_TTL duration string нет 5 minute Время жизни элементов в кэше для json schema
VNPCONTROL_FTS_MAPPING_CACHE_SIZE int нет 64 Максимальный размер кэша для маппингов в полнотекстовом поиске
VNPCONTROL_FTS_MAPPING_CACHE_TTL duration string нет 5 minute Время жизни элементов в кэше для маппингов в полнотекстовом поиске
VNPCONTROL_DM_OBJECT_PAGE_SIZE int нет 100 Размер страницы при выборке объектов из data-model
VNPCONTROL_AUTHORIZER_KIND string нет "authzforce" Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию.
VNPCONTROL_SENDERLIB_COMMANDS_HTTP_RETRY_ATTEMPTS int нет 5 Поле attempts из RetrySettings
VNPCONTROL_SENDERLIB_COMMANDS_HTTP_RETRY_DELAY duration string нет "5 seconds" Поле delay из RetrySettings
VNPCONTROL_SENDERLIB_COMMANDS_HTTP_RETRY_KIND string нет "OnSomeExceptions(ConnectException)" CommandResultRetryConditionKind
VNPCONTROL_DM_ENTITY_OBJECT_TOPIC string да "entityObjectEvent" Название топика из dataModel для евентов сообщений entityObject
VNPCONTROL_DM_ENTITY_OBJECT_TOPIC_PARTITIONS int да 4 Количество партиций топика из dataModel для евентов сообщений entityObject
VNPCONTROL_DM_ENTITY_OBJECT_CONSUMER_GROUP string да "entity_object_consumer_group" Консумер группа для считывания топика из dataModel для евентов сообщений entityObject
VNPCONTROL_DM_ENTITY_OBJECT_CONSUMER_ENABLED boolean да false Флаг для включения/отключения консумера евентов сообщений entityObject из dataModel
VNPCONTROL_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
VNPCONTROL_JOURNAL_TOPIC string да, если переменная VNPCONTROL_JOURNAL_MODE = WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.

Список команд сервиса VNP-control

Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.

Название команды Resource Actions
Сгенерировать дерево иерархии на основе конфигурации GeneratedHierarchy -
Список всех иерархичных сущностей HierarchyEntity ListHierarchy
Получить иерархичную сущность по ID HierarchyEntity GetHierarchy
Создать иерархичную сущность HierarchyEntity CreateHierarchy
Отредактировать иерархичную сущность HierarchyEntity UpdateHierarchy
Удалить иерархичную сущность HierarchyEntity DeleteHierarchy
Список всех конфигураций проекта ProjectConfig -
Получить конфигурацию проекта по ID ProjectConfig -
Создать конфигурацию проекта ProjectConfig CreateProjectConfig
Отредактировать конфигурацию проекта ProjectConfig UpdateProjectConfig
Удалить конфигурацию проекта ProjectConfig DeleteProjectConfig
Список всех правил генерации документа GenerationRuleSet ListGenerationRuleSet
Получить правило генерации документа по ID GenerationRuleSet GetGenerationRuleSet
Создать правило генерации документа GenerationRuleSet CreateGenerationRuleSet
Отредактировать правило генерации документа GenerationRuleSet UpdateGenerationRuleSet
Удалить правило генерации документа GenerationRuleSet DeleteGenerationRuleSet
List todo GenerateEntitiesItem ListGenerateEntitiesItem
Get todo GenerateEntitiesItem GetGenerateEntitiesItem
Сгенерировать сущности по указанному правилу и объекту GenerateEntitiesItem GenerateEntities
Список всех правил нумерации сущности NumerationRule ListNumerationRule
Получить правило нумерации сущности по ID NumerationRule GetNumerationRule
Создать правило нумерации сущности NumerationRule CreateNumerationRule
Отредактировать правило нумерации сущности NumerationRule UpdateNumerationRule
Удалить правило нумерации сущности NumerationRule DeleteNumerationRule
Пронумеровать сущность по указанному правилу и идентификаторам NumerationRule ExecuteNumeration
Список всех правил формирования значения поля сущности ValueGenerationRule ListValueGenerationRule
Получить правило формирования значения поля сущности по ID ValueGenerationRule GetValueGenerationRule
Создать правило формирования значения поля сущности ValueGenerationRule CreateValueGenerationRule
Отредактировать правило формирования значения поля сущности ValueGenerationRule UpdateValueGenerationRule
Удалить правило формирования значения поля сущности ValueGenerationRule DeleteValueGenerationRule
Сгенерировать шифр по указанному правилу и аттрибутам объекта ValueGenerationRule GenerateValueByAttributes
Сгенерировать дополнительные поля для объектов Data Model согласно их классам ValueGenerationRule GenerateValueByAttributes
Проверить дополнительные поля для объектов Data Model ValueGenerationRule ValidateValueByAttributes
Смена состояния Warning-ов в метаданных сущности ValueGenerationRule ChangeWarningStatus
Получить список событий генерации всех типов GenerationJournal ListGenerationJournal
Получить карточку события генерации всех типов GenerationJournal GetGenerationJournal
Получить прогресс по задачам генерации GenerateEntitiesItem GenerateEntities
Получить список сущностей с маппингами в FTS System ListFtsEntities

В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

ListVnpHierarchyV2

Payload для команды

{
  "hierarchyCode": "TagTree",
  "hierarchySearch": {
    "search": {
      "query": "",
      "context": {},
      "sorting": {
        "fieldName": "title",
        "order": "desc"
      },
      "paging": {
        "page": 1,
        "count": 10
      }
    },
    "expandTree": true
  }
}

Результат выполнения команды

{
  "tree": {
    "items": [
      {
        "entityObject": {
          "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
          "hierarchyEntityId": "HierarchyEntityId",
          "parentId": null,
          "data": {
            "code": "10",
            "title": "Блок кондуктор",
            "nodeType": "entityObject",
            "entityObject": {
              "objectId": "9acdb6e7-18d2-42bd-bbd2-af5d4f98662a",
              "entityType": "Object"
            }
          },
          "externalType": "entityObject",
          "externalEntityType": "Object",
          "externalId": "9acdb6e7-18d2-42bd-bbd2-af5d4f98662a",
          "created": 1664292962695,
          "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
          "modified": 1664292962695,
          "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
          "removed": false,
          "version": 2
        },
        "isMatched": true,
        "childrenCount": 10,
        "entityObjectLowWarningCount": 0,
        "entityObjectCriticalWarningCount": 2,
        "childrenWithLowWarningCount": 5,
        "childrenWithCriticalWarningCount": 6,
        "children": [
          {
            "entityObject": "{ other child entity object }",
            "isMatched": true,
            "other ExtendedDto fields...": "...also with children"
          },
          "next children..."
        ]
      }
    ],
    "total": 1
  },
  "statistic": [
    {
      "nodeType": "entityObject",
      "entityCodeType": "Object",
      "count": 1
    },
    {
      "nodeType": "entityObject",
      "entityCodeType": "complex",
      "count": 19
    },
    {
      "nodeType": "entityObject",
      "entityCodeType": "system",
      "count": 78
    },
    {
      "nodeType": "entityObject",
      "entityCodeType": "TagTypes",
      "count": 9
    },
    {
      "nodeType": "tag",
      "entityCodeType": "Tag",
      "count": 1
    }
  ]
}

Команда отображения полного дерева ВНП. Без предварительной генерации строить дерево по данным [hierarchyEntity -> data]*2.
Не все настройки генерации передаются со входными данными, часть так же указана в поле иерархии data -> HierarchyData.Settings.

  1. Опциональные параметры baseEntityFilterField*. Для фильтрации базовой сущности можно применить атрибут её модели данных и предполагаемое значение. Правила заполнения аналогичны работе с Search, но только по одному атрибуту.
Команда Путь
vnpcontrol_ListVnpHierarchyV2 v1/hierarchy/listVnpHierarchyV2

ListHierarchyEntity

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 5
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "HierarchyEntityId",
      "title": "title",
      "description": "description1",
      "data": {
        "someInfo": {
          "info": "info",
          "numberInfo": 10
        }
      },
      "created": 1736862738971,
      "createdBy": "837068a9-1e9c-4326-a449-5c830c0115fd",
      "modified": 1736930690417,
      "modifiedBy": "837068a9-1e9c-4326-a449-5c830c0115fd",
      "version": 8
    }
  ],
  "total": 1
}

Получение списка иерархичных сущностей с поиском, сортировкой и пагинацией.

Команда Путь
vnpcontrol_listHierarchyEntities HTTP POST "/v1/hierarchyEntity/list"

GetHierarchyEntity

Payload для команды

"HierarchyEntityId"

Результат выполнения команды

{
  "id": "HierarchyEntityId",
  "title": "title",
  "description": "description",
  "data": {
    "someInfo": "info"
  },
  "created": 1664292962695,
  "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
  "modified": 1664292962695,
  "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
  "version": 2
}

Получение иерархичной сущности.

Команда Путь
vnpcontrol_getHierarchyEntity HTTP POST "/v1/hierarchyEntity/get"

CreateHierarchyEntity

Payload для команды

{
  "id": "HierarchyEntityId",
  "title": "title",
  "description": "description",
  "data": {
    "someInfo": "info"
  },
  "externalType": "catalogItem",
  "externalEntityType": "CatalogCode1",
  "externalId": "6d873b43-0913-4fde-827c-968f13ebf778"
}

Результат выполнения команды

"HierarchyEntityId"

Добавление новой иерархичной сущности.

Команда Путь
vnpcontrol_createHierarchyEntity -

UpdateHierarchyEntity

Payload для команды

{
  "id": "HierarchyEntityId",
  "title": "title",
  "description": "description",
  "data": {
    "someInfo": "info"
  },
  "version": 1
}

Результат выполнения команды

true

Обновление иерархичной сущности.

Команда Путь
vnpcontrol_updateHierarchyEntity -

DeleteHierarchyEntity

Payload для команды

"hierarchyEntityId"

Результат выполнения команды

true

Удаление иерархичной сущности.

Команда Путь
vnpcontrol_deleteHierarchyEntity -

ListProjectConfig

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "title": "Sample Project Title 1",
      "tag": "sample-tag 1",
      "documentSettings": [
        {
          "entityType": "document-content 1",
          "documentFilter": {
            "field": "stadia",
            "sections": [
              "09dc7d4c-acc5-466c-9c58-96fd21080600",
              "aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
              "7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
            ],
            "isRelation": false
          }
        }
      ],
      "created": 1723553566671,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1723553569099,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "registry": [
        "a"
      ],
      "additionalData": {
        "b": "c"
      },
      "version": 2
    }
  ],
  "total": 1
}

Возвращает список всех конфигураций проекта. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_ListProjectConfig HTTP POST "/v1/projectConfig/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery, LikeQuery
title InSetQuery, LikeQuery, TsQuery
tag InSetQuery, LikeQuery, TsQuery
document InSetQuery, LikeQuery, TsQuery

Доступные поля для сортировки:

Поле
title
tag
created
modified

GetProjectConfig

Payload для команды

"some-id"

Результат выполнения команды

{
  "id": "some-id",
  "title": "Sample Project Title 1",
  "tag": "sample-tag 1",
  "documentSettings": [
    {
      "entityType": "document-content 1",
      "documentFilter": {
        "field": "stadia",
        "sections": [
          "09dc7d4c-acc5-466c-9c58-96fd21080600",
          "aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
          "7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
        ],
        "isRelation": false
      }
    }
  ],
  "created": 1723553566671,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1723553569099,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "registry": [
    "a"
  ],
  "additionalData": {
    "b": "c"
  },
  "version": 2
}

Поиск конфигурации проекта с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_GetProjectConfig HTTP POST "/v1/projectConfig/get"

CreateProjectConfig

Payload для команды

{
  "id": "some-id",
  "title": "Sample Project Title",
  "tag": "sample-tag",
  "documentSettings": [
    {
      "entityType": "document-content 1",
      "documentFilter": {
        "field": "stadia",
        "sections": [
          "09dc7d4c-acc5-466c-9c58-96fd21080600",
          "aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
          "7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
        ],
        "isRelation": false
      }
    }
  ],
  "registry": [],
  "additionalData": {}
}

Результат выполнения команды

"some-id"

Добавляет новую конфигурацию проекта с заданными параметрами. Отправляет событие о создании конфигурации проекта.

Команда Путь
vnpcontrol_CreateProjectConfig -

UpdateProjectConfig

Payload для команды

{
  "id": "some-id",
  "title": "Sample Project Title 1",
  "tag": "sample-tag 1",
  "documentSettings": [
    {
      "entityType": "document-content 1",
      "documentFilter": {
        "field": "stadia",
        "sections": [
          "09dc7d4c-acc5-466c-9c58-96fd21080600",
          "aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
          "7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
        ],
        "isRelation": false
      }
    }
  ],
  "registry": [
    "a"
  ],
  "additionalData": {
    "b": "c"
  },
  "version": 1
}

Результат выполнения команды

true

Обновляет данные о конфигурации проекта. Отправляет событие об обновлении конфигурации проекта.

Команда Путь
vnpcontrol_UpdateProjectConfig -

DeleteProjectConfig

Payload для команды

"some-id"

Результат выполнения команды

true

Удаляет конфигурацию проекта с заданным идентификатором. Отправляет событие об удалении проекта конфигурации.

Команда Путь
vnpcontrol_DeleteProjectConfig -

ListGenerationRuleSet

Payload для команды

 {
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "title": "Sample GenerationRule Title 2",
      "description": "some description 2",
      "buttonTitle": "trueTitle",
      "action": "action2",
      "rules": [
        "rule2"
      ],
      "created": 1726211900106,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1726211947374,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "version": 2
    }
  ],
  "total": 1
}

Возвращает список всех конфигураций проекта. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_ListGenerationRuleSet HTTP POST "/v1/generationRuleSet/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery, LikeQuery
title InSetQuery, LikeQuery, TsQuery
description InSetQuery, LikeQuery, TsQuery

Доступные поля для сортировки:

Поле
title
description
created
modified

GetGenerationRuleSet

Payload для команды

"some-id"

Результат выполнения команды

{
  "id": "some-id",
  "title": "Sample GenerationRule Title 2",
  "description": "some description 2",
  "buttonTitle": "trueTitle",
  "action": "action2",
  "rules": [
    "rule2"
  ],
  "created": 1726211900106,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1726211947374,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "version": 2
}

Получение набора правил генерации сущностей с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_GetGenerationRuleSet HTTP POST "/v1/generationRuleSet/get"

CreateGenerationRuleSet

Payload для команды

{
  "id": "some-id",
  "title": "Sample GenerationRule Title",
  "description": "some description",
  "buttonTitle": "document-content",
  "action": "action",
  "rules": [
    "rule1"
  ]
}

Результат выполнения команды

"some-id"

Добавляет новый набор правил генерации сущностей с заданными параметрами. Отправляет событие о создании набора правил генерации сущностей.

Команда Путь
vnpcontrol_CreateGenerationRuleSet -

UpdateGenerationRuleSet

Payload для команды

{
  "id": "some-id",
  "title": "Sample GenerationRule Title 2",
  "description": "some description 2",
  "buttonTitle": "trueTitle",
  "action": "action2",
  "rules": [
    "rule2"
  ],
  "version": 1
}

Результат выполнения команды

true

Обновляет данные о наборе правил генерации сущностей. Отправляет событие об обновлении набора правил генерации сущностей.

Команда Путь
vnpcontrol_UpdateGenerationRuleSet -

DeleteGenerationRuleSet

Payload для команды

"some-id"

Результат выполнения команды

true

Удаляет набор правил генерации сущностей с заданным идентификатором. Отправляет событие об удалении набора правил генерации сущностей.

Команда Путь
vnpcontrol_DeleteGenerationRuleSet -

GenerateEntities

Payload для команды

{
  "generationRuleSetId": "some-gen-rule-id-3",
  "numerationRuleId": "19b027c6-50b7-4bae-a8f0-72746d2a25b4",
  "generateValues": "true",
  "entityType": "Object",
  "search": {
    "query": "",
    "context": {},
    "sorting": {
      "fieldName": "title",
      "order": "desc"
    }
  }
}

Результат выполнения команды

"69b027c6-50b7-4bae-a8f0-72746d2a25bd"

Генерирует и создаёт объекты в сервисе DataModel. Возвращает ID записи журнала генерации, он же ID задачи на генерацию (для отмены задачи) и реестра сгенерированных сущностей (пока не поддерживается)

Команда Путь
vnpcontrol_GenerateEntities -

ListNumerationRule

Payload для команды

 {
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "entityType": "Some EntityTypeId",
      "fieldCode": "some fieldCode",
      "title": "Sample NumerationRule Title 2",
      "description": "some description 2",
      "config": {
        "rule2": "attr56"
      },
      "created": 1726211900106,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1726211947374,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "version": 2
    }
  ],
  "total": 1
}

Возвращает список всех правил нумерации сущностей. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_ListNumerationRule HTTP POST "/v1/numerationRule/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery, LikeQuery
entityType InSetQuery
fieldCode InSetQuery
title InSetQuery, LikeQuery, TsQuery
description InSetQuery, LikeQuery, TsQuery

Доступные поля для сортировки:

Поле
title
description
created
modified

GetNumerationRule

Payload для команды

"some-id"

Результат выполнения команды

{
  "id": "some-id",
  "entityType": "Some EntityTypeId",
  "fieldCode": "some fieldCode",
  "title": "Sample NumerationRule Title 2",
  "description": "some description 2",
  "config": {
    "rule2": "attr56"
  },
  "created": 1726211900106,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1726211947374,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "version": 2
}

Получение правила нумерации сущностей с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_GetNumerationRule HTTP POST "/v1/numerationRule/get"

CreateNumerationRule

Payload для команды

{
  "entityType": "Some EntityTypeId",
  "fieldCode": "some fieldCode",
  "title": "Sample NumerationRule Title 2",
  "description": "some description 2",
  "config": {
    "rule2": "attr56"
  }
}

Результат выполнения команды

"some-id"

Добавляет новое правило нумерации сущностей с заданными параметрами. Отправляет событие о создании правила нумерации сущностей.

Команда Путь
vnpcontrol_CreateNumerationRule -

UpdateNumerationRule

Payload для команды

{
  "id": "some-id",
  "entityType": "Some EntityTypeId",
  "fieldCode": "some fieldCode",
  "title": "Sample NumerationRule Title 2",
  "description": "some description 2",
  "config": {
    "rule2": "attr56"
  },
  "version": 1
}

Результат выполнения команды

true

Обновляет данные о правиле нумерации сущностей. Отправляет событие об обновлении правила нумерации сущностей.

Команда Путь
vnpcontrol_UpdateNumerationRule -

DeleteNumerationRule

Payload для команды

"some-id"

Результат выполнения команды

true

Удаляет правило нумерации сущностей с заданным идентификатором. Отправляет событие об удалении правила нумерации сущностей.

Команда Путь
vnpcontrol_DeleteNumerationRule -

ExecuteNumeration

Payload для команды

{
  "numerationRuleId": "19b027c6-50b7-4bae-a8f0-72746d2a25b4",
  "entityType": "SomeEntity",
  "ids": [
    "27c623b0-a253a-4bae-a8f0-72746d250b7",
    "237c623b-a253a-4bae-a8f0-72746d250b4"
  ]
}

Результат выполнения команды

"3b97ba40-e44b-46ce-8644-30dd5958c855"

Запускает процесс нумерации сущностей в сервисе DataModel. Возвращает ID записи журнала генерации, он же ID задачи на генерацию (для отмены задачи)

Команда Путь
vnpcontrol_ExecuteNumeration -

ListValueGenerationRule

Возвращает список всех правил формирования значения атрибута сущностей. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_ListValueGenerationRule HTTP POST "/v1/valueGenerationRule/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery, LikeQuery
ruleType InSetQuery
entityType InSetQuery
fieldCode InSetQuery
title InSetQuery, LikeQuery, TsQuery
description InSetQuery, LikeQuery, TsQuery

Доступные поля для сортировки:

Поле
title
description
created
modified

Payload для команды

 {
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "some-id",
      "entityType": "Some EntityTypeId",
      "fieldCode": "some fieldCode",
      "title": "Sample ValueGenerationRule Title 2",
      "description": "some description 2",
      "config": {
        "rule2": "attr56"
      },
      "created": 1726211900106,
      "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "modified": 1726211947374,
      "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
      "version": 2
    }
  ],
  "total": 1
}

Возвращает список всех правил формирования значения атрибута сущностей. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_ListValueGenerationRule HTTP POST "/v1/valueGenerationRule/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery, LikeQuery
entityType InSetQuery
fieldCode InSetQuery
title InSetQuery, LikeQuery, TsQuery
description InSetQuery, LikeQuery, TsQuery

Доступные поля для сортировки:

Поле
title
description
created
modified

GetValueGenerationRule

Payload для команды

"some-id"

Результат выполнения команды

{
  "id": "some-id",
  "entityType": "Some EntityTypeId",
  "fieldCode": "some fieldCode",
  "title": "Sample ValueGenerationRule Title 2",
  "description": "some description 2",
  "config": {
    "rule2": "attr56"
  },
  "created": 1726211900106,
  "createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "modified": 1726211947374,
  "modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
  "version": 2
}

Получение правила формирования значения атрибута сущностей с заданным идентификатором. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_GetValueGenerationRule HTTP POST "/v1/valueGenerationRule/get"

CreateValueGenerationRule

Payload для команды

{
  "ruleType": "cipher",
  "entityType": "Some EntityTypeId",
  "fieldCode": "some fieldCode",
  "title": "Sample ValueGenerationRule Title 2",
  "description": "some description 2",
  "config": {
    "rule2": "attr56"
  }
}

Результат выполнения команды

"some-id"

Добавляет новое правило формирования значения атрибута сущностей с заданными параметрами. Отправляет событие о создании правила формирования значения атрибута сущностей.

Команда Путь
vnpcontrol_CreateValueGenerationRule -

UpdateValueGenerationRule

Payload для команды

{
  "id": "some-id",
  "ruleType": "cipher",
  "entityType": "Some EntityTypeId",
  "fieldCode": "some fieldCode",
  "title": "Sample ValueGenerationRule Title 2",
  "description": "some description 2",
  "config": {
    "rule2": "attr56"
  },
  "version": 1
}

Результат выполнения команды

true

Обновляет данные о правиле формирования значения атрибута сущностей. Отправляет событие об обновлении правила формирования значения атрибута сущностей.

Команда Путь
vnpcontrol_UpdateValueGenerationRule -

DeleteValueGenerationRule

Payload для команды

"some-id"

Результат выполнения команды

true

Удаляет правило формирования значения атрибута сущностей с заданным идентификатором. Отправляет событие об удалении правила формирования значения атрибута сущностей.

Команда Путь
vnpcontrol_DeleteValueGenerationRule -

GenerateValueByAttributes

Payload для команды

{
  "valueGenerationRuleId": "49b027c6-50b7-3219-a8f0-72746d2a25b7",
  "attributes": {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3"
  }
}

Результат выполнения команды

"value1-value2.value3"

Генерирует строку на основание правила и переданных атрибутов объекта.

Команда Путь
vnpcontrol_GenerateValueByAttributes -

GenerateValueForEntities

Payload для команды

{
  "entityType": "Object",
  "ruleType": "cipher",
  "search": {
    "query": "id",
    "context": {
      "id": "11112222-3333-4444-5555-666677778888"
    }
  },
  "valueGenerationRuleId": "1f2f3b8e-d722-489a-9297-316b0afbc04a"
}

Результат выполнения команды

"3b97ba40-e44b-46ce-8644-30dd5958c855"

Поле valueGenerationRuleId опционально, если передано, используется правило с таким ID, если нет, происходит вычисление правил.

Генерирует атрибуты для объектов Data Model по условию поиска. Учитывая их класс в сервисе Classification, который хранит идентификаторы правил генерации. Возвращает ID записи журнала генерации, он же ID задачи на генерацию (для отмены задачи)

Команда Путь
vnpcontrol_GenerateValueForEntities -

CheckValueGenerationForEntities

Payload для команды

{
  "entityType": "Object",
  "ruleType": "cipher",
  "search": {
    "query": "id",
    "context": {
      "id": "11112222-3333-4444-5555-666677778888"
    }
  }
}

Результат выполнения команды

{
  "successEntities": [
    "3b97ba40-e44b-46ce-8644-30dd5958c855"
  ],
  "failureEntities": []
}

Проверяет атрибуты Data Model по условиям поиска.

Обновляет список предупреждений объекта, список доступных кодов предупреждений: checkValueGenerationTooManyRules, checkValueGenerationSectionCount, checkValueGenerationSectionLength, checkValueGenerationAttributeMismatch, checkValueGenerationAttributeNotExists.

Команда Путь
vnpcontrol_CheckValueGenerationForEntities -

ChangeWarningStatus

Payload для команды

{
  "objectId": "784eee29-e1a6-4f57-8e45-b4fd469d6658",
  "entityType": "Tag",
  "fieldCode": "complex",
  "warningType": "autofillCurrentValueNotValid",
  "status": "Inactive"
}

Результат выполнения команды

true

Смена состояния Warning-ов в метаданных сущности.

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

Команда Путь
vnpcontrol_ChangeWarningStatus HTTP POST v1/valueGenerationRule/changeWarningStatus

ListGenerationJournal

Payload для команды

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "desc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

Результат выполнения команды

{
  "items": [
    {
      "id": "f7445e44-deb5-4605-ba0b-cff45c8b9e5b",
      "title": "gen ent title",
      "generationType": "GenerateEntities",
      "generationStatus": "Created",
      "input": {
        "key": "value"
      },
      "report": {
        "key": "value"
      },
      "created": 0,
      "createdBy": "119061e6-542d-4ef1-b503-224efc6b6d6a",
      "modified": 0,
      "modifiedBy": "7f782541-3fff-4ca0-8363-690dd4ae1755",
      "version": 1
    },
    {
      "id": "df11dede-fb96-4569-a667-7f35c73794aa",
      "title": "gen ent title",
      "generationType": "GenerateEntities",
      "generationStatus": "Created",
      "input": {
        "key": "value"
      },
      "report": {
        "key": "value"
      },
      "created": 0,
      "createdBy": "deba1fe5-5848-41e0-b971-90ffb1d9fd5d",
      "modified": 0,
      "modifiedBy": "5c452843-4926-4578-821a-d0c2554f11f5",
      "version": 1
    }
  ],
  "total": 2
}

Возвращает список генераций. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_ListGenerationJournal HTTP POST "/v1/journal/list"

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
generationType InSetQuery
generationStatus InSetQuery
createdBy InSetQuery
created RangeQuery

Доступные поля для сортировки:

Поле
id
generationType
generationStatus
createdBy
created

GetGenerationJournal

Payload для команды

"f7445e44-deb5-4605-ba0b-cff45c8b9e5b"

Результат выполнения команды

{
  "id": "f7445e44-deb5-4605-ba0b-cff45c8b9e5b",
  "title": "gen ent title",
  "generationType": "GenerateEntities",
  "generationStatus": "Created",
  "input": {
    "key": "value"
  },
  "report": {
    "key": "value"
  },
  "created": 0,
  "createdBy": "119061e6-542d-4ef1-b503-224efc6b6d6a",
  "modified": 0,
  "modifiedBy": "7f782541-3fff-4ca0-8363-690dd4ae1755",
  "version": 1
}

Получение карточки генерации. Поддерживается только синхронный вызов.

Команда Путь
vnpcontrol_GetGenerationJournal HTTP POST "/v1/journal/get"

GenerationProgress

Payload для команды

{
  "id": "d40a62c9-2fd6-470a-a595-1535a0cc262c"
}

Результат выполнения команды

{
  "d40a62c9-2fd6-470a-a595-1535a0cc262c": {
    "estimateTime": "PT30M3.903S",
    "percent": 0.8333333333333334,
    "stats": {
      "contextCreated": {
        "succeed": 1,
        "skipped": null,
        "total": 1
      },
      "generated": {
        "succeed": 1,
        "skipped": null,
        "total": 1
      },
      "numerated": {
        "succeed": 1,
        "skipped": null,
        "total": 1
      },
      "attributesAdded": {
        "succeed": 1,
        "skipped": null,
        "total": 1
      },
      "submitted": {
        "succeed": 1,
        "skipped": null,
        "total": 1
      },
      "reported": {
        "succeed": 0,
        "skipped": null,
        "total": 1
      },
      "errors": 0
    }
  }
}

Прогресс задач генерации. Можно отфильтровать по идентификатору конкретной задачи. Указанный здесь GenerateEntitiesItemId это все ещё ID задачи, а так же ID записи журнала с отчётом.

estimateTime - на данный момент показывает оставшееся время некорректно.
percent скорее всего никогда не будет равен 1 (100%). По окончанию работы статистика пропадает и нужно смотреть статус у записи журнала генерации.

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

Команда Путь
vnpcontrol_GenerationProgress -

ListFtsEntities

Payload для команды отсутствует

Результат выполнения команды

[
   {
      "id": "Order",
      "title": "Договор",
      "description": "Описывает договор между несколькими агентами",
      "settings": {
         "titleRule": "title"
      }
   },
   {
      "id": "Person",
      "title": "Человек",
      "description": "Дополнительные человеческие аттрибуты для пользователя",
      "settings": {}
   }
]

Типы сущности для которых настроен маппинг в сервисе Full Text Search.

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

Команда Путь
vnpcontrol_ListFtsEntities -

Модели сервиса VNP-control

ListVnpHierarchyDto

Поле Тип Обязательное Описание
hierarchySearch HierarchySearch да Параметры запроса для дерева иерархий
hierarchyCode String да Идентификатор сущности иерархии

TreeWithStatistic

Поле Тип Обязательное Описание
tree Page[HierarchyEntityObjectExtendedDto] да Обновлённое дерево с добавленными объектами на основе тегов
statistic TreeStatisticItem[] да Информация о количестве пар nodeType + entityType

TreeStatisticItem

Поле Тип Обязательное Описание
nodeType String да Тип узла
entityCodeType String да Идентификатор сущности справочника
count Int да Количество узлов с таким типом и идентификатором

HierarchyEntity

Поле Тип Обязательное Описание
id string да ID
title string да имя сущности
description string да описание сущности
data json да доп. данные
context String нет Код проекта к которому относится объект
created TimeStamp да дата и время создания
createdBy UUID да ID создавшего запись пользователя
modified TimeStamp да дата и время изменения
modifiedBy UUID да ID изменившего запись пользователя
version Integer да версия для оптимистичной блокировки

HierarchyEntityCreateDto

Поле Тип Обязательное Описание
id string да ID
title string да имя сущности
description string да описание сущности
data json нет доп. данные

HierarchyEntityUpdateDto

Поле Тип Обязательное Описание
id string да ID
title string да имя сущности
description string да описание сущности
data json нет доп. данные
version Integer да версия для оптимистичной блокировки

ProjectConfigCreateDto

Поле Тип Обязательное Описание
id ProjectConfigId (String) Да Уникальный идентификатор проекта - строковый код
title String Да Наименование проекта (отображение в списках, отчетах и т.п.)
tag String Да строка - код сущности которая в проекте является "тегом"
document String Да строка - код сущности которая в проекте является "документом"
registry JSON (Array) Да Массив строк - кодов сущностей которые
additionalData JSON (Object) Да Дополнительные данные

ProjectConfigUpdateDto

Поле Тип Обязательное Описание
id ProjectConfigId (String) Да Уникальный идентификатор проекта - строковый код
title String Да Наименование проекта (отображение в списках, отчетах и т.п.)
tag String Да строка - код сущности которая в проекте является "тегом"
document String Да строка - код сущности которая в проекте является "документом"
registry JSON (Array) Да Массив строк - кодов сущностей которые
additionalData JSON (Object) Да Дополнительные данные
version Int Да Индекс оптимистической блокировки

ProjectConfig

Поле Тип Обязательное Описание
id ProjectConfigId (String) Да Уникальный идентификатор проекта - строковый код
title String Да Наименование проекта (отображение в списках, отчетах и т.п.)
tag String Да Код сущности, которая в проекте является "тегом"
documentSettings DocumentSetting[] Да Настройки сущности, которая является документом
registry JSON (Array) Да Массив строк - кодов сущностей которые
additionalData JSON (Object) Да Дополнительные данные
version Int Да Индекс оптимистической блокировки
created Long Да Дата создания записи
modified Long Да Дата изменения записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modifiedBy UserId (UUID) Да ID пользователя изменившего запись

DocumentSetting

Поле Тип Обязательное Описание
entityType String Да Тип объекта сервиса Data Model
documentFilter DocumentFilter Нет Описание настроек формирования срезов документов

DocumentFilter

Поле Тип Обязательное Описание
field String Да Название поля по которому формируется срез
isRelation Boolean Да Является ли поле связью или собственным атрибутом объекта
sections String[] Да Конкретные значения для разбиения

GenerationRuleSetCreateDto

Поле Тип Обязательное Описание
id GenerationRuleSetId (String) Да Уникальный строковый идентификатор записи - он же код
title String Да Заголовок набора правил - краткое описание для реестра
description String Нет Подробное описание того что должно происходить при генерации документов по этому набору правил
buttonTitle String Да Что будет написано в кнопке на генерацию по этому набору
action String Нет Action для проверки права доступа к кнопке этого набора правил
rules JSON (Array)*1 Да Упорядоченный массив объектов - правил генерации документов.

GenerationRuleSetUpdateDto

Поле Тип Обязательное Описание
id GenerationRuleSetId (String) Да Уникальный строковый идентификатор записи - он же код
title String Да Заголовок набора правил - краткое описание для реестра
description String Нет Подробное описание того что должно происходить при генерации документов по этому набору правил
buttonTitle String Да Что будет написано в кнопке на генерацию по этому набору
action String Нет Action для проверки права доступа к кнопке этого набора правил
rules JSON (Array)*1 Да Упорядоченный массив объектов - правил генерации документов.
version Int Да Индекс оптимистической блокировки

GenerationRuleSet

Поле Тип Обязательное Описание
id GenerationRuleSetId (String) Да Уникальный строковый идентификатор записи - он же код
title String Да Заголовок набора правил - краткое описание для реестра
description String Нет Подробное описание того что должно происходить при генерации документов по этому набору правил
buttonTitle String Да Что будет написано в кнопке на генерацию по этому набору
action String Нет Action для проверки права доступа к кнопке этого набора правил
rules JSON (Array)*1 Да Упорядоченный массив объектов - правил генерации документов.
context String Нет Код проекта к которому относится объект
created Long Да Дата создания записи
modified Long Да Дата изменения записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
version Int Да Индекс оптимистической блокировки

GenerateEntitiesInput

Поле Тип Обязательное Описание
generationRuleSetId GenerationRuleSetId (String) Да Уникальный строковый идентификатор записи - он же код
numerationRuleId NumerationRuleId (String) Нет Идентификатор дополнительного правила генерации номера
generateValues Boolean Нет Запускать ли генерацию дополнительных полей для получившихся объектов
entityType EntityTypeId (String) Да Тип объекта сервиса Data Model
search Search Да Фильтры для подбора начальных объектов для создания сущностей

GenerateValueForEntitiesInput

Поле Тип Обязательное Описание
entityType EntityTypeId (String) Да Тип объекта сервиса Data Model
search Search Да Фильтры для подбора начальных объектов для создания сущностей
ruleType ValueGenerationRuleType (String) Да Тип правила для генерации (дополнительно фильтрует выбранные правила)
valueGenerationRuleId UUID Нет Идентификатор правила генерации для обхода процесса вычисления правил

GenerateValueForEntitiesOutput

Поле Тип Обязательное Описание
successEntities ObjectId Да Идентификаторы объектов Data Model для которых генерация прошла успешно
failureEntities ObjectId Да Идентификаторы объектов Data Model для которых генерация завершилась ошибкой

HierarchyData_Settings

Поле Тип Обязательное Описание
baseEntityFilterFieldCode String Нет Название поля для фильтрации базовой сущности
baseEntityFilterFieldValue Json Нет Значение поля для фильтрации базовой сущности

NumerationRuleCreateDto

Поле Тип Обязательное Описание
entityType String Да Для какой сущности написано правило
fieldCode String Да Для какого поля сущности написано правило
title String Да Заголовок правила - краткое описание для реестра
description String Нет Подробное описание правила
config JSON Да Описание правила нумерации сущности.

NumerationRuleUpdateDto

Поле Тип Обязательное Описание
id NumerationRuleId (UUID) Да Уникальный идентификатор записи
entityType String Да Для какой сущности написано правило
fieldCode String Да Для какого поля сущности написано правило
title String Да Заголовок правила - краткое описание для реестра
description String Нет Подробное описание правила
config JSON Да Описание правила нумерации сущности.
version Int Да Индекс оптимистической блокировки

NumerationRule

Поле Тип Обязательное Описание
id NumerationRuleId (UUID) Да Уникальный идентификатор записи
entityType String Да Для какой сущности написано правило
fieldCode String Да Для какого поля сущности написано правило
title String Да Заголовок правила - краткое описание для реестра
description String Нет Подробное описание правила
config JSON Да Описание правила нумерации сущности.
context String Нет Код проекта к которому относится объект
created Long Да Дата создания записи
modified Long Да Дата изменения записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
version Int Да Индекс оптимистической блокировки

ExecuteNumerationInput

Поле Тип Обязательное Описание
numerationRuleId NumerationRuleId (String) Нет Идентификатор дополнительного правила генерации номера
entityType EntityTypeId (String) Да Тип объекта сервиса Data Model
search Search Да Фильтры для подбора начальных объектов для создания сущностей

ValueGenerationRuleCreateDto

Поле Тип Обязательное Описание
ruleType String Да Тип правила: title - формирование наименования, cipher - формирование шифра
entityType String Да Для какой сущности написано правило
fieldCode String Да Для какого поля сущности написано правило
title String Да Заголовок правила - краткое описание для реестра
description String Нет Подробное описание правила
delimiter String Нет Разделитель добавляемый между секциями
config JSON Да Описание правила формирования значения поля сущности.

ValueGenerationRuleUpdateDto

Поле Тип Обязательное Описание
id ValueGenerationRuleId (UUID) Да Уникальный идентификатор записи
ruleType String Да Тип правила: title - формирование наименования, cipher - формирование шифра
entityType String Да Для какой сущности написано правило
fieldCode String Да Для какого поля сущности написано правило
title String Да Заголовок правила - краткое описание для реестра
description String Нет Подробное описание правила
delimiter String Нет Разделитель добавляемый между секциями
config JSON Да Описание правила формирования значения поля сущности.
version Int Да Индекс оптимистической блокировки

ValueGenerationRule

Поле Тип Обязательное Описание
id ValueGenerationRuleId (UUID) Да Уникальный идентификатор записи
ruleType String Да Тип правила: title - формирование наименования, cipher - формирование шифра
entityType String Да Для какой сущности написано правило
fieldCode String Да Для какого поля сущности написано правило
title String Да Заголовок правила - краткое описание для реестра
description String Нет Подробное описание правила
delimiter String Нет Разделитель добавляемый между секциями
config JSON Да Описание правила формирования значения поля сущности.
context String Нет Код проекта к которому относится объект
created Long Да Дата создания записи
modified Long Да Дата изменения записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
version Int Да Индекс оптимистической блокировки

GenerationJournal

Поле Тип Обязательное Описание
id GenerationRuleSetId (String) Да Уникальный строковый идентификатор записи - он же код
title String Да Наименование генерации
generationType GenerationType (String) Да Тип генерации (сущностей, атрибутов, нумерация)
generationStatus GenerationStatus (String) Да Статус процесса (стадии)
input GenerateEntitiesInput Да Входные данные (payload запроса генерации)
report GenerateEntitiesReport Да Отчёт о генерации: получившиеся данные, контекст и/или ошибки
context String Нет Код проекта к которому относится объект
created Long Да Дата создания записи
modified Long Да Дата изменения записи
createdBy UserId (UUID) Да ID пользователя создавшего запись
modifiedBy UserId (UUID) Да ID пользователя изменившего запись
version Int Да Индекс оптимистической блокировки

GenerateEntitiesReport

Поле Тип Обязательное Описание
reportUrl StoredFile (String) Нет URI файла отчёта (стандартная FS загрузка). Формат для генерации сущностей, Формат для нумерации, Формат для генерации шифров и наименований
errors String[] Нет Глобальные ошибки генерации

DetailedReason

Поле Тип Обязательное Описание
fieldCode FieldName (String) Нет Поле промежуточного объекта, которое было указано в цепочке получения целевых данных
entityType/catalogCode EntityTypeId/CatalogCode (String) Нет Тип объекта Data Model или код справочника Alexandrina
objectId/catalogItemId ObjectId/CatalogItemId (String) Нет ID объекта Data Model или ID справочника Alexandrina
sectionIdx Int Да Номер секции шифра в которой возникла проблема

Warning

Поле Тип Обязательное Описание
message String Да Сообщение об ошибке
fieldCode FieldName (String) Да Поле к которому относиться предупреждение
warningType WarningType (String) Да Тип предупреждения
detailedReason DetailedReason Нет Дополнительные данные для диагностики в случае работы с шифрами
valueGenerationRuleId UUID Нет Правило при применении которого возникла проблема
severity WarningSeverity (String) Да Уровень серьезности предупреждения (низкий, критический)
status WarningStatus (String) Да Статус предупреждения (активно, неактивно)
statusChangeDate TimeStamp (Long) Нет Дата смены статуса
statusChangeUserId UserId (UUID) Нет Пользователь сменивший статус

EntityGenerationReport

Поле Тип Обязательное Описание
position RulePosition Да Информация об источнике сущности относительно, правила и генератора
context ContextItemSimple Нет Информация о контексте (объектах на основании которых мы генерируем новую сущность)
generatingEntity CreateObject Нет Результат генерации (DTO для создания объекта в Data Model)
isCreated Boolean Да Флаг успешного создания в сервисе Data Model
rules GenerationRuleInfo Да Перечень задействованных правил генерации (нумерация, атрибуты, шифры)
errors String[] Да Список ошибок помешавших созданию объекта
warnings Warning[] Да Список предупреждений не препятствующих созданию объекта (также сохраняется в метаинформацию объекта)

RulePosition

Поле Тип Обязательное Описание
ruleSetId GenerationRuleSetId (String) Да Уникальный строковый идентификатор записи - он же код
ruleIdx Int Нет Порядковый номер правила в наборе правил генерации документа
generatorIdx Int[] Нет Порядковый номер генератора в наборе правил генерации документа. Массив так как у генераторов есть вложенность

ContextItemSimple

Поле Тип Обязательное Описание
id UUID Да Уникальный идентификатор объекта: сущности или справочника
entityType EntityTypeId (String) Одно из двух (1) Тип сущности Data Model
catalogCode CatalogCode (String) Одно из двух (1) Код справочника Alexandrina
code String Нет Код объекта
title String Нет Заголовок объекта

CreateObject

Поле Тип Обязательное Описание
id UUID Да Уникальный идентификатор объекта Data Model
entityType UUID Да Тип сущности Data Model
dataAttributes UUID Да Данные объекта
metadataAttributes UUID Да Мета информация (предупреждения возникшие во время генерации, etc...)
objectSource UUID Да Источник (название этого сервис)
relations UUID Да Связи с другими объектами Data Model
priorityFields UUID Да Поля которые были сгенерированы (имеют приоритет при генерации шифров и дополнительных атрибутов и не замещаются полями полученными из классификации)

EntityNumerationReport

Поле Тип Обязательное Описание
category NumerationCategoryPart Да Список полей по котором осуществлялась группировка для нумерации
entity ReportingEntity Да Упрощенная модель данных объекта
dataAttributesBefore JSON Object Да Атрибуты до генерации (указано только поле нумерации)
rules GenerationRuleInfo Да Перечень задействованных правил генерации (нумерация, атрибуты, шифры)
errors String[] Да Список ошибок помешавших обновлению объекта
warnings Warning Да Список предупреждений не препятствующих обновлению объекта

NumerationCategoryPart

Поле Тип Обязательное Описание
fieldCode FieldName (String) Да Код поля категории
fieldValue JSON (Any) Да Значение поля категории

AttributeGenerationReport

Поле Тип Обязательное Описание
entity ReportingEntity Да Упрощенная модель данных объекта
dataAttributesBefore JSON Object Да Атрибуты до генерации (указано только поле нумерации или только поля шифра/заголовка)
rules GenerationRuleInfo Да Перечень задействованных правил генерации (нумерация, атрибуты, шифры)
errors String[] Да Список ошибок помешавших обновлению объекта
warnings Warning Да Список предупреждений не препятствующих обновлению объекта

ReportingEntity

Поле Тип Обязательное Описание
id ObjectId (UUID) Да Уникальный идентификатор объекта Data Model
entityType ValueGenerationRuleType (String) Нет Тип сущности Data Model
dataAttributes ValueGenerationRuleType (String) Нет Данные объекта (только поле из нумерации или только поля шифра/заголовка)

GenerationRuleInfo

Поле Тип Обязательное Описание
id UUID Да Уникальный идентификатор правила (если ruleType не указан, значит это правило нумерации)
ruleType ValueGenerationRuleType (String) Нет Тип правила генерации (только для шифров и атрибутов)
fieldCode String Да Код поля для которого написано правило
title String Да Название правила

GetGenerationProgressDto

Поле Тип Обязательное Описание
id GenerateEntitiesItemId (UUID) Нет Получить статистику только для указанной задачи

ChangeWarningStatusDto

Поле Тип Обязательное Описание
objectId UUID (ObjectId) Да UUID объекта
entityType String (EntityTypeId) Да Код сущности
fieldCode String (FieldName) Да Код поля
warningType String (WarningType) Да Код предупреждения
status String (WarningStatus) Да Состояние Active/Inactive
sectionIdx Int Нет Id секции шифра

EstimateProgressStats

Поле Тип Обязательное Описание
estimateTime Duration ISO8601 Да Время до конца в таком формате PT12H54M5.02S
percent Double Да Процент выполнения (уже рассчитанные цифры из stats)
stats GenerationStatistic Да Числа статистики

GenerationStatistic

На данный момент статистика представлена в виде завершения этапа: 0/1 (начато); 1/1 (выполнено)

Поле Тип Обязательное Описание
contextCreated StatFraction Да Подготовка контекста, сбор объектов от рута по пользовательскому пути
generated StatFraction Да Создание объектов по атрибутам из генератора
numerated StatFraction Да Нумерация по указанному правилу
attributesAdded StatFraction Да Добавление атрибутов
submitted StatFraction Да Сохранение в Data Model
reported StatFraction Да Сохранение отчёта в S3
errors Int Да Количество объектов с ошибкой

StatFraction

Поле Тип Обязательное Описание
succeed Int Да Успешно обработано
skipped Int Нет Пропущено
total Int Да Всего операций

Модели server-common

HierarchyEntityObject

Поле Тип Обязательное Описание
id UUID да ID
hierarchyEntityId string да ID сущности объекта
parentId UUID нет Родительский объект
data json да доп. данные
externalType ExternalEntityTypes нет код типа внешнего объекта
externalEntityType string нет тип объекта хранящегося в ноде (код каталога или EntityType)
externalId string нет код или UUID внешнего объекта
created TimeStamp да дата и время создания
createdBy UUID да ID создавшего запись пользователя
modified TimeStamp да дата и время изменения
modifiedBy UUID да ID изменившего запись пользователя
isActualRevision Boolean нет признак актуальной ревизии
removed Boolean да признак удаления
version Integer да версия для оптимистичной блокировки

HierarchyEntityObjectCreateDto

Поле Тип Обязательное Описание
hierarchyEntityId string да ID сущности объекта
parentId UUID нет Родительский объект
data json да доп. данные
externalType ExternalEntityTypes нет код типа внешнего объекта
externalEntityType string нет тип объекта хранящегося в ноде (код каталога или EntityType)
externalId string нет код или UUID внешнего объекта

HierarchyEntityObjectExtendedDto

Поле Тип Обязательное Описание
entityObject HierarchyEntityObject да Сущность иерархий
isMatched Boolean да Попадает ли объект под фильтр
childrenCount Integer да Количество дочерних объектов на следующем уровне
children HierarchyEntityObjectExtendedDto[] нет Дочерние объекты
entityObjectLowWarningCount Integer да Количество несерьезных предупреждений у текущего объекта (узла)
entityObjectCriticalWarningCount Integer да Количество серьезных предупреждений у текущего объекта (узла)
childrenWithLowWarningCount Integer да Количество несерьезных предупреждений у дочерних объектов (узлов)
childrenWithCriticalWarningCount Integer да Количество серьезных предупреждений у дочерних объектов (узлов)

HierarchySearch

Поле Тип Обязательное Описание
search Search да Параметры запроса
expandTree Boolean да Раскрыть родителей для всех подходящих под фильтр объектов
parentId UUID нет Ограничить вывод объектов указанным родителем

ExternalEntityTypes

Тип Определение
catalogItem Объект сервиса каталогов
entityObject Объект сервиса моделей данных

EntityType

Тип сущности в модели данных

Поле Тип Описание
id String Строковый код типа сущности
title String Название типа сущности для вывода в UI
description String Развернутое описание типа сущности
settings Json Настройки типа сущности (подробнее в документации сервиса Data Model)

Примечания

*1 - Подробнее на странице Confluence -> Техническая документация -> Генерация документов
*2 - Подробнее на странице Confluence -> Техническая документация -> Конфиг динамического дерева [или -> Конфиг для ВНП]