NAV
json

Cursor

Описание команд всех сервисов, которые входят в состав Cursor.

Список версий

v3.0.0

Прочие изменения

v2.1.0

Нет изменений по сравнению с v2.0.0, кроме повышения номера версии.

v2.0.0

Прочие изменения

v1.12

Прочие изменения

v1.11.7

Нет изменений по сравнению с v1.11.6, кроме повышение номера версии.

v1.11.6

Нет изменений по сравнению с v1.11.5, кроме повышение номера версии.

v1.11.5

Прочие изменения

v1.11.4

Нет изменений по сравнению с v1.11.3, кроме повышение номера версии.

v1.11.3

Ломающие изменения

Прочие изменения

v1.11.2

Прочие изменения

v1.11.1

Прочие изменения

v1.11

Ломающие изменения

Прочие изменения

v1.10.1

Нет изменений по сравнению с v1.10, кроме повышение номера версии.

v1.10

v1.9.1

v1.9

В данном релизе есть ломающие изменения (смотри ниже)

Ломающие изменения:

1.Изменён интерфейс DataModelClient (может быть переопределён в тестах). Добавлены:

listNonExistingFileId getFile

2.Добавлена поддержку массивов в Search (CURS-2440)

В некоторых сервисах Cursor был применен новый формат фильтров (Search.context). Более подробно смотри документацию Verdi (PatchNotes 1.9). Ниже список сервисов и измененных команд.

Сервис data-model: listFilesInfoWithTags listTagsWithFilesCount listObjectTitles listObjectTitlesV2 listKeywords listObjects listObjectsMeta richListObjects deleteObjectSearch

Для команды "deleteObjectSearch" из data-model также был изменен текст события для журнала, т.к. в событие записываются данные из "Search" (см. поле "context" в событии). Часть шаблона сообщения, где встречаются данные из "Search": "По поисковому запросу {{data.query}} с контекстом {{data.context}}"

Сервис full-text-search: fullTextSearchDSLV2 (поле numberFacets + применяются фильтры, если были указаны в политике авторизации) fullTextSearchDSLGraphV2 (поле numberFacets + применяются фильтры, если были указаны в политике авторизации)

Сервис indexation: listIndexationDescriptionPages indexationRowsList

Сервис tolka: tolka_ListAnalyticsEntity

v1.8

Важные изменения

v1.7.1

Важные изменения

v1.7

Важные изменения

v1.6.1

Важные изменения

v1.6

Важные изменения

v1.5.3

v1.5.2

Версия от 04.07.2023. Список изменений:

v1.5.1

Версия от 27.06.2023. Список изменений:

v1.5

Версия от 06.06.2023. Список изменений:

v1.4.1

Версия от 03.05.2023. Список изменений:

v1.4

Версия от 22.03.2023. Список изменений:

Общие типы данных

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

Search - универсальный тип параметров списочного запроса. Он состоит из полей

Поле Тип Обязательное Описание Ограничения
query string да Строка с запросом, в котором указывается комбинация фильтров. Для запросов без фильтрации - пустая строка Значения в строке должны быть указаны в поле context
context json object да Контекст фильтров запроса. Объект, в котором ключ - это название фильтра, а значение - это значение фильтра. Для запросов без фильтрации - пустой объект
sorting Sorting нет Параметры сортировки данных
paging Paging нет Параметры пейджинга. В случае отсутствия данного поля, считается что пейджинг указан как "Номер страницы - 1, число элементов - 10".

Filter query

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

Filter context

С помощью контекста передаются параметры для фильтрации полей из query.
Контекст является JSON объектом, который представляет собой тип Map[String, Json], где

FilterQueryContext

Общий тип для всех видов фильтров. Существует несколько реализаций, у которых может поддерживаться несколько форматов для записи условия.
Рекомендуется передавать все условия фильтрации в виде JSON объекта, как более очевидный формат.

InSetQuery

Фильтрация атрибута ресурса по списку значений. Если значение атрибута ресурса является массивом, то условие фильтрации возвращает TRUE, если этот массив и список значений для условия фильтрации пересекаются хотя бы по одному элементу. Иначе условие фильтрации возвращает TRUE, если одиночное значение из атрибута соответствует хотя бы одному значению из фильтра.

Поле Тип Обязательное Описание Значение по умолчанию Ограничения
values List[string] да Список значений для условия фильтрации.
kind "any" да Тип фильтра. Может принимать только значение "any".
negation bool нет Необходимость отрицания результата фильтрации: FALSE -> TRUE. false

Возможные форматы:

В формат с одной строкой нельзя добавить отрицание (negation), т.к. вся строка является значением для фильтра. Например, "not some value" будет преобразовано в {"values": ["not some value"], "kind": "any", "negation": false}.

AllInSetQuery

Фильтрация массива из атрибута ресурса по списку значений. Условие фильтрации возвращает TRUE, если массив из атрибута содержит все значения из фильтра. Работает только для полей, являющихся массивом.

Поле Тип Обязательное Описание Значение по умолчанию Ограничения
values List[string] да Список значений для условия фильтрации.
kind "all" да Тип фильтра. Может принимать только значение "all".
negation bool нет Необходимость отрицания результата фильтрации: FALSE -> TRUE. false

Возможные форматы:

LikeQuery

Фильтрация атрибута ресурса по шаблону. Условие фильтрации возвращает TRUE, если значение из атрибута соотвествует шаблону.
Данный фильтр соответствует фильтру like из SQL. Например, like в PostgreSQL.

Поле Тип Обязательное Описание Значение по умолчанию Ограничения
likequery string да Шаблон для условия фильтрации.
kind "like" да Тип фильтра. Может принимать только значение "like".
negation bool нет Необходимость отрицания результата фильтрации: FALSE -> TRUE. false

В поле likequery, помимо слов для условия, поддерживаются символы % - неограниченное кол-во любых символов, _ - только один любой символ, которые можно использовать несколько раз подряд. Например, "%s_me thi__%".

Возможные форматы:

Чтобы добавить отрицание (negation) в формат со строкой, нужно перед условием фильтрации добавить not, разделив условие и отрицание пробелом. Например, "not like %anything%".

TsQuery

Фильтрация атрибута ресурса по условие для полнотекстового поиска PostgreSQL. Условие фильтрации возвращает TRUE, если значение из атрибута соотвествует условию.
Операторы: '&' - И, '|' - ИЛИ, ':*' - начало слова, также возможно отрицание через добавление '!'. Допустимо использование логического объединения с помощью скобок '(' и ')'.

Поле Тип Обязательное Описание Значение по умолчанию Ограничения
tsquery string да Условия полнотекстового поиска для фильтрации.
kind "ts" да Тип фильтра. Может принимать только значение "ts".
negation bool нет Необходимость отрицания результата фильтрации: FALSE -> TRUE. false

В поле tsquery, помимо слов для условия, поддерживаются следующие операторы: & - И, | - ИЛИ, :* - начало слова, также возможно отрицание через добавление ! перед словом.
Допустимо использование логического объединения с помощью скобок ( и ).

Возможные форматы:

Чтобы добавить отрицание (negation) в формат со строкой, нужно перед условием фильтрации добавить not, разделив условие и отрицание пробелом. Например, "not ts !Митя".

RangeQuery

Фильтрация атрибута ресурса по условию вхождения в интервал из значения фильтра. Условие фильтрации: from <= targetValue <= to.

Поле Тип Обязательное Описание Значение по умолчанию Ограничения
from long нет Значение, с которого начинается интервал для фильтрации (входит в интервал).
to long нет Значение, с которым заканчивается интервал для фильтрации (входит в интервал).
kind "range" да Тип фильтра. Может принимать только значение "range".
negation bool нет Необходимость отрицания результата фильтрации: FALSE -> TRUE. false

Если поля from и to не указаны, то условие всегда вернет true.

Возможные форматы:

Чтобы добавить отрицание (negation) в формат со строкой, нужно перед условием фильтрации добавить not, разделив условие и отрицание пробелом. Например, "not _12".

Sorting

Sorting - параметры сортировки

Поле Тип Обязательное Описание Ограничения
fieldName string да Название поля для сортировки
order string да Направление сортировки. Допустимые значения: asc и desc для сортировки по возрастанию и убыванию соответственно

Paging

Paging - параметры пейджинга

Поле Тип Обязательное Описание Ограничения
page integer да Номер запрашиваемой страницы. Страницы нумеруются с 1
count integer да Количество элементов на странице

Page

Страница списка элементов (часть списка с примененным пейджингом)

Поле Тип Описание Ограничения
items array of objects Список элементов на запрошенной странице
total integer Общее количество объектов в БД

AuthorizationResult

Результат выполнения запроса авторизации

Поле Тип Обязательное Описание
allow Bool Да Разрешен ли доступ
entityFilters String Нет Фильтры для сущности, которые нужно применить если "allow = true". Формат фильтров описан на странице Condition

PositionInList

Позиция объекта в списке

Поле Тип Обязательное Описание Ограничения
position number да Номер объекта в списке, начиная с 0
total number да Длина списка

EntityObjectIdentity

Поле Тип Обязательное Описание Ограничения
entityType EntityTypeId да Номер объекта в списке, начиная с 0
objectId ObjectId да Длина списка

EntityTypeId

Соответствует типу String. Содержит идентификатор, который, чаще всего, имеет формат UUID, но это не является обязательным требованием.

StepProgress

Поле Тип Обязательное Значение по умолчанию Описание Ограничения
step Step c payload Plugin Шаг сервиса индексации
entityObject EntityObject Сущность сервиса data-model, обработка полей которой происходит
files Map[FieldId, Seq[ObjectFile]] Соответствие между полем в entityObject, которое нужно обработать, и описанием файла, который хранится в этом поле. StepProgress, попадающий в plugin, содержит в files только те поля, которые содержатся в step.payload.fields
generated Map[AdditionalFieldName\, Seq[GeneratedFile]] Соответствие между полем, сгенерированным предыдущими шагами, и описанием сгенерированного файла, который хранится в этом поле. StepProgress, попадающий в plugin, содержит в generated только те поля, которые содержатся в step.payload.fields
attempts Int Количество попыток, которое было сделано для обработки данного шага индексации. Всегда меньше APP_MAX_STEP_ATTEMPTS (переменная окружения сервиса indexation)
correlationId String Id индексации, породившей этот StepProgress: UUID в виде строки(массовая индексация) или строка "event"+UUID(индексация события из data-model)
level Int Уровень, на котором находится step в индексации. Для индексации события из data-model всегда равен 0.
skipped Seq[ObjectFile] Описание файлов, которые были исключены из обработки с помощью ExtensionFilter. Сюда будут добавлены все файлы с неподходящим расширением, даже те, которые не содержатся в step.payload.fields. При это файлы с верным расширением, которые исключены из обработки плагинами, потому что их нет в step.payload.fields сюда включены не будут.

FailedStepProgress

Поле Тип Обязательное Значение по умолчанию Описание Ограничения
indexationProgress StepProgress Да Нет StepProgress, который завершился ошибкой
message String Да Нет Message ошибки, произошедшей во время обработки StepProgress
stackTrace String Нет Нет StackTrace ошибки, произошедшей во время обработки StepProgress

ObjectId

Соответствует типу UUID.

ObjectFileId

Соответствует типу UUID.

FieldId

Соответствует типу String.

AdditionalFieldName

Соответствует типу String.

ObjectFile

Поле Тип Обязательное Значение по умолчанию Описание Ограничения
fileId ObjectFileId Да Нет Идентификатор файла
additional JsonObject Нет Нет Дополнительная информация по файлу. Сейчас здесь хранится JsonObject, представляющий из себя Map[additionalFileFieldName, url], где хранятся ссылки на файлы, сгенерированные в результате индексации. Сохраняется эта информация с помощью команды saveFilesAdditionalInfo
name String Да Нет Имя файла с расширением
url String Да Нет Url, по которому можно найти этот файл в s3

GeneratedFile

Поле Тип Обязательное Значение по умолчанию Описание Ограничения
originField FieldId Да Нет Название файлового поля сущности, в котором хранится файл, на основе которого был сгенерирован текущий
originFileId ObjectFileId Да Нет Id файла на основе которого был сгенерирован текущий(описание сгенерированного файла хранится в объекте оригинального файла в поле additional, не additionalData)
file String Нет Нет Url в s3 для содержимого сгенерированного файла

EntityObjectEvent

Поле Тип Обязательное Значение по умолчанию Описание Ограничения
entityObject EntityObject Да Нет Передаваемая сущность из data-model
additionalData Option[EntityObjectEventAdditionalData] Нет нет Дополнительные данные, передаваемые с событием

EntityObjectEventAdditionalData

Один из нескольких вариантов:

PluginBackLinksAdditionalData

Поле Тип Обязательное Значение по умолчанию Описание Ограничения
topic String Да Нет Топик для шага Plugin
fieldId String Да Нет Поле сущности, где хранится файл для индексации

EntityObject

Данные объекта сущности

Поле Тип Описание
id uuid ID объекта
externalId string Внешний ID объекта
entityType string Тип сущности объекта
title string Название объекта. Может быть пустой строкой, если нет необходимых полей в "data".
source string Источник данных для объекта
created timestamp Дата и время создания объекта
modified timestamp Дата и время последнего изменения объекта
data Json object Json с полями объекта
additionalData Json object Json с дополнительными полями объекта
version integer Версия объекта для оптимистичных блокировок. Передается назад на бэкэнд при модификации данных
removed boolean Признак того, считается ли объект удаленным.

Типы данных из verdi-libs

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

CommandStatus

Описывает статус выполнения команды.

Возможные значения Описание Дополнительно
Created Команда создана Обязательный начальный статус
InProcess Началась обработка команды Необязательный промежуточный статус
Completed Команда завершена Конечный статус. Считается успешным.
Failed Команда завершена с ошибкой Конечный статус. Считается неуспешным.
TimedOut Команда не завершилась за заданное время. Выполнение прекращено. Конечный статус. Считается неуспешным.

ErrorResponse

Ответ команды с ошибкой в качестве результата.

Название поля Тип Обязательное Описание
code ErrorResponseCode да Тип ошибки
message String нет Сообщение об ошибке (см. https://confluence.dev.embedika.ru/pages/viewpage.action?pageId=889782432)
stackTrace String нет Информация о стеке вызовов во время ошибки
businessError Json нет Константа описывающая бизнес-ошибку (контекстно-специфичный код ошибки)
data Json нет Данные, которые необходимо передавать клиенту вместе с ошибкой
cause Throwable нет Поле не участвует в сериализации. Содержит исключение, которое является причиной ошибки.

ErrorResponseCode

Код обозначающий тип ошибки в ответе.

Возможные значения Тип Описание
InvalidParameters String Для команды переданы неверные параметры.
NotAvailableDestinations String Нет ни одного доступного получателя для данной команды.
NotValidResponse String Некорректный HTTP ответ по команде.
CannotWaitCommandCompletion String Async команда не успела завершится за определенное время.
CannotSend String Невозможно отправить команду или результат ее работы. Содержит описание причины.
Exception String Необработанный exception. Может содержать Throwable и его сообщение, являющийся причиной ошибки.
HttpError(statusCode: Int) Json Результат команды следует интерпретировать как HttpResponse с определенным статусом.

FSConfigRep (FSClient)

Отображение FSConfig в "плоской форме", как он выглядит в конфиге приложения application.conf.

Поле Тип Обязательное Описание Ограничения
uri String Да Адрес файлового хранилища для подключения. Не пустое
uploadParallelism Int Да Параллелизм загрузки файлов в файловое хранилище. > 0
accessKeyId String Да, если authMode=Static ID для подключения (не зависит от бакета). Не пустое
secretAccessKey String Да, если authMode=Static Key для подключения (не зависит от бакета). Не пустое
authMode String Нет Режим аутентификации клиента: Static - данные для подключения не зависят от бакета, Mapping - данные зависят от бакета. По-умолчанию Static. "Static", "Mapping"
authConfig String Да, если authMode=Mapping Настройки для выбранного режима аутентификации. Если authMode=Mapping, то ожидается Seq[FSBucketConfig] в формате JSON.
clientsCache VerdiCacheConfig Нет Настройки кеша для клиентов файлового хранилища.

FSConfig (FSClient)

Конфигурация клиента файлового хранилища.

Поле Тип Обязательное Описание Ограничения
uri String Да Адрес файлового хранилища для подключения Не пустое
uploadParallelism Int Да Параллелизм загрузки файлов в файловое хранилище > 0
credentials Seq[FSBucketConfig] Да Список данных для учетных записей для подключения к бакетам
clientsCache VerdiCacheConfig Да Настройки кеша для клиентов файлового хранилища

FSBucketConfig (FSClient)

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

Поле Тип Обязательное Описание Ограничения
bucketName String Да Название бакета. Если значение пустое, то данные подходят для любого бакета.
bucketAlias List[String] Нет Список альтернативных названий бакета. Не пустое
credentials FSCredentials Да Данные учетной записи для подключения к бакету.

FSCredentials (FSClient)

Данные для аутентификации.

Поле Тип Обязательное Описание Ограничения
accessKeyId String Да ID для подключения Не пустое
secretAccessKey String Да Key для подключения Не пустое

VerdiCacheConfig (Verdi-cache)

Настройки кеширования

Поле Тип Обязательное Описание Ограничения
maxSize int Нет Максимальное количество элементов в кеше, при превышении которого элементы начнут удаляться (LRU).
elementTTL duration string Нет Максимальное время жизни элемента.

KafkaAuthConfig (senderlib)

Параметры для авторизации kafka-клиента (доступ к топикам).

Поле Тип Обязательное Описание Ограничения
passwordBased PasswordBasedCredentials Нет Реквизиты для аутентификации в kafka с помощью пароля Должно быть заполнено, если не заполнено kerberosBased
kerberosBased KerberosBasedCredentials Нет Реквизиты для аутентификации в kafka с помощью kerberos Должно быть заполнено, если не заполнено passwordBased
truststore TrustStoreConfig Нет Параметры для хранилища сертификатов
topic string Нет Название топика, к которому привязаны данные
kind string Нет Тип сущности, к которой привязаны данные "producer" или "consumer" или "both"(равнозначно параметрам, валидным для "producer" и "consumer") или "admin"(не входит в "both")

PasswordBasedCredentials (senderlib)

Поле Тип Обязательное Описание Ограничения
user string Да Имя пользователя
password string Да Пароль пользователя

KerberosBasedCredentials (senderlib)

NB! Для успешной работы авторизации в kafka с помощью kerberos нужно, чтобы kerberos мог найти файл krb5.conf. По умолчанию он ищет в /etc/krb5.conf, поэтому на стендах файл всегда должен лежать в /etc/krb5.conf. Для локальной работы поменять это поведение можно, установив переменную System.setProperty("java.security.krb5.conf", "желаемый путь до krb5.conf")

Поле Тип Обязательное Описание Ограничения
principal string Да Kerberos principal, соответствующий пользователю
keytabPath string Да Путь до файла keytab

TrustStoreConfig (senderlib)

Параметры для хранилища сертификатов (Java key store)

Поле Тип Обязательное Описание Ограничения
location string Да Путь до хранилища сертификатов
password string Нет Пароль к хранилищу сертификатов

KafkaAuthSettings (senderlib)

Параметры для авторизации kafka-клиента (доступ к топикам).

Поле Тип Обязательное Описание Ограничения
staticAuth KafkaAuthConfig Нет Данные для статической аутентификации (не зависит от топика)
authMode string Нет Режим аутентификации "Static"(одна учетная запись на все запросы) или "Mapping"(учетная запись зависит от запроса)
authConfig string Нет Данные для аутентификации в указанном режиме, если он отличается от KafkaAuthMode.Static Строка в формате JSON с типом List[KafkaAuthConfig]
clientsCache VerdiCacheConfig Нет Настройки кеширования Kafka-клиентов

RetrySettings (senderlib)

Настойки для повтороного вызова функций

Поле Тип Обязательное Описание Ограничения
attempts string Да Максимальное количество повторных вызовов. Чтобы исключить возможность повторного вызова, нужно установить значение 0.
delay duration string Да Константная задержка перед повторным вызовом

CommandResultRetryConditionKind (senderlib)

Вид условия, по которому результат команды будет считаться неуспешным и команду следует вызвать повторно.
Соответствует типу String.

Возможные значения Описание
OnFailStatuses Если результат команды ErrorResponse или результат имеет CommandStatus, который является неуспешным
OnAllExceptions Если результат команды ErrorResponse и имеет ErrorResponseCode = Exception
OnSomeExceptions(Name1, Name2, ..) Содержит список значений с разделителем , (запятая). Если результат команды ErrorResponse, имеет ErrorResponseCode = Exception. Значения в полях message или cause должны содержать одно из значений.

Функционал фильтров и сортировки

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

Фильтрация

  {
     "query": "count && (created || modified)",
     "context": {
       "count": "1_1000",
       "created": "1630326000_",
       "modified": "_1630327000"
     }
   }

Фильтрация состоит из двух полей:

Query поддерживает операторы && и || + скобки.
В Context-е можно описать несколько видов проверок для полей:

1) Условие равенства переданному значению.
{ "context": { "fieldName": "какое-то значение" } }

2) Условие равенства какому-то одному значению из предоставленного списка.
{ "context": { "fieldName": "[первое значение, второе, другое]" } } или { "context": { "fieldName": "any[первое значение, второе, другое]" } }

3) Условие наличия всех значений из предоставленного списка в массиве всех значений objectFieldName, которые присутствуют в объектах поля arrayFieldName. Работает только для полей arrayFieldName, содержащих массив. Предоставленный в запросе список должен содержать не менее двух значений.
{ "context": { "arrayFieldName.objectFieldName": "all[первое значение, второе, другое]" } }

4) Условие соответствия паттерну
Значение поля обязательно должно начинаться со слова like.
{ "context": { "fieldName": "like какое%значен__" } }

5) Условие вхождения значения в заданный диапазон. В данный момент, поддерживаются только целые числа. Начало и конец диапазона разделяются знаком _. Оба конца диапазона опциональны и они включаются в диапазон. Если передать просто _, то результатом будет пустой диапазон, в который не входит ни один элемент и ответ тоже будет пустой.

6) Условие текствого поиска PGSQL
Значение поля обязательно должно начинаться со слова ts.
{ "context": { "fieldName": "ts (this | that) & the:*" } }

Сортировка

{
  "sorting": {
    "fieldName": "number",
    "order": "desc"
  }
}

Сортировка определяется двумя полями:

Настройки логеров

Конфигурация для логера указывается в файле src/main/resources/logback.xml (или logback-test.xml). Если такого файла нет, то будет использована "базовая" конфигурация с выводом лога в консоль (stdout) в следующем формате:
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n.

Некоторые параметры из файла конфигурации можно задать через переменные окружения. Ниже приведен список общих переменных окружения, которые есть почти в каждом сервисе, но конфигурация не ограничивается только ими.
У каждого сервиса свой набор переменных и может присутствовать префикс у каждой переменной (например, MON_ или TOLKA_). В таком случае, префикс должен быть добавлен и к переменным окружения для логеров.

Пример:
В документации приведена общая переменная окружения для уровня логирования LOG_LEVEL, но у сервиса "Oberto" для всех переменных окружения используется префикс OBERTO_. Поэтому, чтобы настроить общий уровень логирования для сервиса "Oberto", нужно использовать переменную OBERTO_LOG_LEVEL вместо LOG_LEVEL.

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

LOG_OUTPUT

Задает, куда будет выводиться сообщения лога. Может принимать следующие значения:
STDOUT - обычный лог в консоль.
STDOUT_CEF - лог в формате CEF в консоль.
STDOUT_CEF_JSON - лог в формате JSON в консоль, но со структурой сообщений CEF.
FILE - обычный лог в файл.
FILE_CEF - лог в формате CEF в файл.
FILE_CEF_JSON - лог в формате JSON в файл, но со структурой сообщений CEF.
SYSLOG - обычный лог в SYSLOG.
SYSLOG_CEF - лог в формате CEF в SYSLOG.
SYSLOG_CEF_JSON - лог в формате JSON в SYSLOG, но со структурой сообщений CEF.

Данный параметр может принимать несколько значений через любой разделитель (например, через пробел "STDOUT FILE_CEF"). Если указано несколько значений с одним типом вывода, то будет учитываться только вывод в формате CEF.
Например: если присутствуют "STDOUT" + "STDOUT_CEF", то учитывается только "STDOUT_CEF"; "FILE" + "FILE_CEF" = "FILE_CEF"; "SYSLOG" + "SYSLOG_CEF" = "SYSLOG_CEF".

LOG_LEVEL

Стандартный уровень логирования, который будет считаться значением по умолчанию для логеров, у которых уровень логирования не задается в отдельной переменной.
Значения в переменной характеризуют, насколько детальными будут сообщения в логе.
Может принимать следующие значения:
TRACE - максимально подробные сообщения.
DEBUG - менее подробные сообщения, чем в TRACE, но достаточные для debug-а.
INFO - логирование основных событий во время работы приложения. Считается стандартным уровнем логирования.
WARN - логирование только важных событий.
ERROR - логирование только сообщений об ошибках.
OFF - отключение лога.

Каждый уровень включает в себя все последующие, поэтому TRACE наиболее подробный, т.к. содержит все возможные сообщения, а WARN менее подробный, т.к. содержит только сообщения об ошибках и других важных событиях, но не содержит "стандартные" события из уровня INFO.

Если у конкретного логера есть отдельная настройка для уровня логирования, то она будет перекрывать общую настройку из LOG_LEVEL.

Переменные для указания уровня логирования конкретных логеров

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

LOG_LEVEL_HTTP - логер для HTTP сервера/клиента, отображающий события во время обработки HTTP вызова. Значение по умолчанию "INFO".
LOG_LEVEL_NIOSOCKET - логер для бекенда HTTP сервера/клиента, отображающий низкоуровневые события во время обработки HTTP вызова. Значение по умолчанию "WARN".

LOG_LEVEL_AKKA - логер для системы акторов, отображающий специфичные для Akka сообщения (из тред пула, из стримов, из акторов). Значение по умолчанию "INFO".
LOG_LEVEL_LIQUIBASE - логер для liquibase (миграции БД). Почти не используются, только если миграции не вызываются во время работы сервиса (как в data-model). Значение по умолчанию "INFO".

LOG_LEVEL_SLICK_STATEMENT - логер для slick (вывод sql запросов). Значение по умолчанию "WARN".
LOG_LEVEL_SLICK_BENCHMARK - логер для slick (вывод времени подготовки sql запросов). Значение по умолчанию "OFF".
LOG_LEVEL_SLICK_QUERY_COMPILER - логер для slick (вывод времени подготовки sql запросов с разделением по стадиям). Значение по умолчанию "OFF".

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

LOG_LEVEL_KAFKA, LOG_LEVEL_KAFKA_PRODUCER, LOG_LEVEL_KAFKA_CONSUMER - логер для Kafka клиентов (продюсер и консьюмер). Обычно используется или общая переменная, или по одной для консьюмера и продюсера. Значение по умолчанию "WARN".
LOG_LEVEL_KAFKA_HTTP - логер для HTTP бекенда Kafka клиентов. Значение по умолчанию "WARN".
LOG_LEVEL_KAFKA_INTERNAL - логер для внутренних сообщений Kafka клиентов (metadata). Значение по умолчанию "INFO".
LOG_LEVEL_KAFKA_SELECTOR - логер для общего сетевой библиотеки всех клиента Kafka (логирует SSL handshake). Значение по умолчанию "INFO".
LOG_LEVEL_KAFKA_NETWORK_CLIENT - логер для общего сетевой библиотеки всех клиента Kafka (низкоуровневый клиент). Значение по умолчанию "INFO".
LOG_LEVEL_KAFKA_STREAMING_PRODUCER - логер для Kafka producer. Значение по умолчанию "INFO".
LOG_LEVEL_ZIO_KAFKA - логер для ZIO версии Kafka producer. Значение по умолчанию "INFO".

LOG_LEVEL_AKKAHTTPSENDER - логер для отправки команд по HTTP. Значение по умолчанию "WARN".
LOG_LEVEL_KAFKASENDER - логер для отправки команд по Kafka. Значение по умолчанию "TRACE".
LOG_LEVEL_COMMANDSTATUS_CLIENT - логер для клиента CommandStatus. Значение по умолчанию "WARN".
LOG_LEVEL_AUTHZCLIENT - логер для клиента авторизации (к authzfroce или oberto). Значение по умолчанию "ERROR".
LOG_JSON_SPACES - определяет форматирование JSON-а в сообщениях логера:
noSpaces - без переносов строк и отступов,
spaces2 - с переносами строк и с отступами в два пробела.
Значение по умолчанию "noSpaces".

Параметры для настройки логирования в формате CEF.

У логов есть возможность включить формат CEF для логирования по следующему шаблону:
2022-12-14T16:56:31+0500 CEF:Version|Device Vendor|Device Product|Device Version|EventClassId|Message|Severity|src=? dst=? shost=? suid=? suser=? msg=? end=currentTimeMillis|.

Чтобы включить логирование в формате CEF, нужно задать в переменной LOG_OUTPUT значение с постфиксом, который содержит _CEF (например, LOG_OUTPUT = STDOUT_CEF или LOG_OUTPUT = FILE_CEF_JSON).

В каждом logback.xml файле есть свойство, которое задает "main class" всего приложения. Этот класс нужен для получения параметров записи сообщений в формате CEF.
У данного свойства нет переменной окружения, но его можно поменять прямо в файле.
Значение (value) свойства зависит от сервиса, но обычно оно задано как
<property scope="context" name="projectMainClassPath" value="com.embedika.Main"/>

В каждом application.conf файле указаны параметры для логирования в формате CEF, которые по умолчанию не заданы.
Если логи пишутся в формате CEF, то необходимо задать следующие переменные:

  1. LOGGING_SRC_IP Параметр SRC (источник/source, на который ссылается событие) для логов в формате CEF. Если не установлена, src=notFound. Требуемый формат: IPv4, например "192.168.10.1".

  2. LOGGING_SRC_HOST Параметр SHOST (источник/source, на который ссылается событие) для логов в формате CEF. Если не установлена, shost=notFound. Требуемый формат: fully qualified domain name (FQDN), например "host" или "host.domain.com".

  3. LOGGING_DST_IP Параметр DST (получатель/destination, на который ссылается событие) для логов в формате CEF. Если не установлена, dst=notFound. Требуемый формат: IPv4, например "192.168.10.1".

  4. LOGGING_CEF_VER Версия формата CEF: либо 0, либо 1. Рекомендуется использовать 0.
    Значение по умолчанию "0".

Параметры для настройки логирования в формате SYSLOG

В конфиге есть возможность настроить отправку логов в какой-нибудь SYSLOG сервер. Для отправки логов используется Syslog4j.

Чтобы включить логирование в SYSLOG, нужно задать в переменной LOG_OUTPUT значение с префиксом SYSLOG_ (например, LOG_OUTPUT = SYSLOG_CEF).

  1. LOG_SYSLOG_TYPE Протокол взаимодействия с SYSLOG сервером. Может принимать значения "UDP", "TCP" или "TLS".
    Значение по умолчанию "UDP".
    Значения из переменной LOG_SYSLOG_TYPE конвертируются в классы Syslog4j:
        TSL -> org.productivity.java.syslog4j.impl.net.tcp.ssl.SSLTCPNetSyslogConfig
        TCP -> org.productivity.java.syslog4j.impl.net.tcp.TCPNetSyslogConfig
        UDP -> org.productivity.java.syslog4j.impl.net.udp.UDPNetSyslogConfig

    Если задано значение TLS, то необходимо еще настроить и параметры для SSL
    Документацию по Java KeyStore и Truststore https://docs.oracle.com/cd/E19509-01/820-3503/ggffo/index.html

    LOG_SYSLOG_KEYSTORE
        Путь до файла KEYSTORE

    LOG_SYSLOG_KEYSTORE_PASS
        Пароль для файла в LOG_SYSLOG_KEYSTORE

    LOG_SYSLOG_TRUSTSTORE
        Путь до файла TRUSTSTORE

    LOG_SYSLOG_TRUSTSTORE_PASS
        Пароль для файла в LOG_SYSLOG_TRUSTSTORE

  2. LOG_SYSLOG_PATTERN
    Шаблон для сообщений. Не учитывается для "LOG_OUTPUT = SYSLOG_CEF", т.к. используется шаблон для CEF.
    Документация по шаблонам https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout.
    Значение по умолчанию [%level] [%logger] [%thread] - %msg%n.

  3. LOG_SYSLOG_HOST
    Хост SYSLOG сервиса в формате IPv4. Требуемый формат: IPv4.
    Значение по умолчанию "127.0.0.1".

  4. LOG_SYSLOG_PORT
    Порт SYSLOG сервиса. Может принимать любое положительное число.
    Значение по умолчанию "514".

  5. LOG_SYSLOG_FACILITY
    К сожалению, LOG_SYSLOG_FACILITY задается только через int код, а не string.
    Список кодов для переменной:
    KERN = 0
    USER = 8
    MAIL = 16
    DAEMON = 24
    AUTH = 32
    SYSLOG = 40
    LPR = 48
    NEWS = 56
    UUCP = 64
    CRON = 72
    AUTHPRIV = 80
    FTP = 88

    LOCAL0 = 128
    LOCAL1 = 136
    LOCAL2 = 144
    LOCAL3 = 152
    LOCAL4 = 160
    LOCAL5 = 168
    LOCAL6 = 176
    LOCAL7 = 184

    Значение по умолчанию "8".

  6. LOG_SYSLOG_IDENT
    Идентификатор SYSLOG клиента. Может принимать любую строку.
    Значение по умолчанию зависит от сервиса и обычно является названием сервиса ("mon", "oberto" и т.п.).

  7. LOG_SYSLOG_MAX_MSG_SIZE
    Максимальны размер одного сообщения лога в байтах. Может принимать любое число.
    Значение по умолчанию "65536".

Скрипт для формирования ROOT logger-а для logback.xml

В репозитории сервисов Verdi был добавлен скрипт "logback_config_generation.sc" для формирования ROOT логера. Этот скрипт можно запустить, например, в scala worksheet.

Объявление root логера в конфиге может быть достаточно большим, если количество уникальных вариантов вывода лога больше трех или четырех, т.к. мы должны учитывать все способы вывода из переменной LOG_OUTPUT.
В таком случае, добавление новых опций для вывода становится проблематичным (требует какого-то времени), тогда и может пригодиться данный скрипт.
В конце выполнения, скрипт делает println с получившимся XML-ом, который можно просто вставить в файл с конфигом.

Сервис ограниченных контекстов - ОК

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

Общее описание архитектуры сервиса ОК

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

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

Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm. Для корректной минимальной работы сервиса требуется обязательное подключение к Kafka, Consul, PostrgeSQL. Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus и ApiGateway.

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

Переменная Тип Обязательная Значение по умолчанию Описание
SERVER_PORT int нет 8080 Порт, на котором слушает HTTP-сервер
VERDI_CONSUL string да http://localhost:8500 Адрес Consul
VERDI_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
VERDI_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
VERDI_KAFKA_ADDRESS string да localhost:9092 Адрес брокера Kafka.
VERDI_KAFKA_TOPIC string нет eventStatus Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
VERDI_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
VERDI_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
VERDI_KAFKA_AUTH_PRINCIPAL string нет "" Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos).
VERDI_KAFKA_AUTH_KEYTAB_PATH string нет "" Путь до keytab-файла(в случае соединения с kafka через Kerberos).
VERDI_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет.
VERDI_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
VERDI_HOST string да localhost Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
VERDI_TTL duration string нет 30 seconds Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
VERDI_HEALTH_CHECK duration string нет 10 seconds Периодичность отправки health check в ServiceDiscovery
VERDI_COMMAND_STORAGE_UPDATE_PERIOD duration string нет 1 minutes Время кэширования данных по командам из CommandDiscovery
VERDI_SERVICE_DISCOVERY_UPDATE_PERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
VERDI_ALLOW_INTERNAL_COMMANDS bool нет true Можно ли сервису отправлять внутрисистемные команды
VERDI_CONSUL_CONNECTION_MAX_RETRY int нет 5 Максимальное количество попыток подключений к Consul
VERDI_CONSUL_CONNECTION_RETRY_DELAY duration string нет 1 seconds Таймаут между неудачными попытками подключения к Consul
VERDI_KAFKA_SYNC_POLLING_PERIOD duration string нет 1 seconds Периодичность запроса статуса verdi команд в sender-lib
VERDI_KAFKA_SYNC_POLLING_TIMEOUT duration string нет 1 seconds Максимальное время ожидания выполнения verdi команды в sender-lib
DB_JDBC_URL jdbc url string да jdbc:postgresql://127.0.0.1:5432/bushcraft JDBC-url для соединения с БД
DB_USER string да Пользователь БД
DB_PASSWORD string да Пароль пользователя БД
DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
VERDI_COMMANDS_HTTP_RETRY_ATTEMPTS int нет 5 Поле attempts из RetrySettings
VERDI_COMMANDS_HTTP_RETRY_DELAY duration string нет "5 seconds" Поле delay из RetrySettings
VERDI_COMMANDS_HTTP_RETRY_KIND string нет "OnSomeExceptions(ConnectException)" CommandResultRetryConditionKind

Модель сервиса ОК

Bush

Ограниченный контекст

Название поля Тип Описание
id String Идентификатор контекста
relations Map[String, relations] Иерархия типов сущностей
version Int Версия контекста. Используется для optimistic lock

BushcraftSearchRequest

Форма агрегирующего поиска в ограниченном контексте

Название поля Тип Описание
bushId String Идентификатор контекста
query String Поисковая строка
paging Paging Пагинация

EntityObjectIdentity

Полный идентификатор объекта

Название поля Тип Описание
entityType String Тип объекта
objectId UUID Идентификатор объекта

BranchUnfoldRequest

Форма агрегирующего поиска в отдельной ветке ограниченного контекста

Название поля Тип Описание
bushId String Идентификатор контекста
query String Поисковая строка
paging Paging Пагинация
root EntityObjectIdentity Идентификатор корня ветки
branchType String Тип фильтруемых сущностей в корне

BushCreateDTO

Форма создание ограниченного контекста

Название поля Тип Описание
id String Идентификатор контекста
relations Map[String, relations] Иерархия типов сущностей

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

bushSearch

Агрегирующий поиск в ограниченном контексте

На входе поисковый запрос

{
    "query": "электроконтактная",
    "paging": {
        "page": 1,
        "count": 40
    },
    "bushId": "fixedBush"
}

В результате куст объектов

{
  "status": "Completed",
  "timestamp": 1651387723970,
  "value": {
    "documents": [
      {
        "document": {
          "id": "508d1853-1648-4558-a9f9-e590876018b4",
          "entityType": "links",
          "highlight": {},
          "data": ... // doc data
        },
        "matchedChildren": {
          "Patent": 2
        }
      },
      {
        "document": {
          "id": "eaeda9a3-5454-4cc0-902a-a7f854a2bd96",
          "entityType": "1thesis",
          "highlight": {},
          "data": ... // doc data
        },
        "matchedChildren": {
          "RfbrDocument": 4
        }
      },
      ... // others docs
    ],
    "total": 25
  }
}

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

branchUnfold

Поиск по ветке куста ограниченного контексте

На входе поисковый запрос

{
    "query": "электроконтактная",
    "paging": {
        "page": 1,
        "count": 40
    },
    "bushId": "fixedBush",
    "root": {
        "entityType": "Patent",
        "objectId": "c7feabde-09cd-463c-ab4e-968178e7ab37"
    },
    "branchType": "RfbrDocument"
}

В результате ветка куста объектов

{
  "status": "Completed",
  "timestamp": 1651388234581,
  "value": {
    "documents": [
      {
        "id": "975975bb-ece6-4aca-80fc-5f227e982582",
        "entityType": "RfbrDocument",
        "highlight": {
          "newFileContent": [
            "И, действительно, !!!HL!!электроконтактная!!HL!!! методика, о которой я здесь\nрассказываю, в скором времени сыграла",
            "Результаты\nизмерений, полученные с помощью !!!HL!!электроконтактной!!HL!!! методики (в\nсочетании с другими), позволили",
            "С помощью !!!HL!!электроконтактной!!HL!!! методики уже в 1948 году были\nполучены первые экспериментальные данные о",
            "моей сохранилось чувство признательности и даже\nгордости от того, что в этой нашей работе по созданию !!!HL!!электроконтактной!!HL!!!",
            "Опыты намечалось проводить с применением !!!HL!!электроконтактной!!HL!!! методики измерения скоростей."
          ]
        },
        "data": ... // doc data
      },
      {
        "id": "1f398276-efb3-41c9-994d-6680681d59f5",
        "entityType": "RfbrDocument",
        "highlight": {
          "newFileContent": [
            "камера; 2 — пьезокварцевый датчик давления; З капсюльвоспламенитель; 4 — метаемое тело с полостью; 5 !!!HL!!электроконтактное!!HL!!!"
          ]
        },
        "data": ... // doc data
      }
    ],
    "total": 2
  }
}

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

createBush

Создание ограниченного контекста

На входе форма создания

{
  "id": "fixedBush",
  "relations": {
    "links": {"Patent": {"RfbrDocument": {}}},
    "1thesis": {"RfbrDocument": {}},
    "poems": {"kate": {}}
  }
}

В результате идентификатор успешно созданного контекста

"fixedBush"

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

getBush

Получение ограниченного контекста

На входе идентификатор ограниченного контекста

"fixedBush"

В результате ограниченный контекст

{
  "id": "fixedBush",
  "relations": {
    "links": {"Patent": {"RfbrDocument": {}}},
    "1thesis": {"RfbrDocument": {}},
    "poems": {"kate": {}}
  }
}

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

listBush

Получение списка ограниченных контекстов

Входных данных нет

В результате список ограниченных контекстов

[
  {
    "id": "fixedBush",
    "relations": {
      "links": {
        "Patent": {
          "RfbrDocument": {}
        }
      },
      "poems": {
        "kate": {}
      },
      "1thesis": {
        "RfbrDocument": {}
      }
    },
    "version": 1
  }
]

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

deleteBush

Удаление ограниченного контекста

На входе идентификатор контекста

"fixedBush"

В результате кол-во удаленных записей

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

updateBush

Обновление ограниченного контекста

На входе описание контекста

{
  "id": "fixedBush",
  "relations": {
    "links": {"Patent": {"RfbrDocument": {}}},
    "1thesis": {"RfbrDocument": {}},
    "newRoot": {"newLeaf": {}}
  },
  "version": 1
}

В результате кол-во обновленных записей

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

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_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_RICH_LIST_OBJECTS_PAGING_COUNT int нет 10000 Количество строк в одной странице ответа richListObjects из datamodel
EXPORTER_EXPORT_ADDRESS string да http://localhost:{app.http.port} Адрес обращения к datamodel для конструирования гиперссылки

Список команд сервиса 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/exporter_ListExportProcess

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

Поле Виды фильтров
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/exporter_GetExportProcess

CreateExportProcess

Payload для команды

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

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

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

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

exportFileName - поле, указывающее название файла. Если оно указано, так и запишется в таблицу ExportProcess. Если не указано - попытается взять из таблицы ExportTemplate по переданному exportTemplateId. Иначе поле будет пустое и файл будет иметь дефолтное название.

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

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

Команда Путь
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

CreateAndExecuteExportProcessViaHttp

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": [],
  "exportFileName": "export"
}

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

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

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

Реализованно через последовательное выполнение команд CreateExportProcess и ExecuteExportProcess.

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

Команда Путь
exporter_CreateAndExecuteExportProcess -
exporter_http_CreateAndExecuteExportProcess HTTP POST /v1/exportProcess/exporter_http_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/exporter_ListExportTemplate

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

Поле Виды фильтров
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/exporter_GetExportTemplate

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 Да Флаг, указывающий на то надо ли добавлять в иерархию пустые папки (без выгружаемых файлов)
exportFileName String Нет Имя создаваемого файла

ExportProcessUpdateDto

Поле Тип Обязательное Описание
id ExportProcessId (UUID) Да Уникальный идентификатор задачи
entityType EntityTypeId (String) Да Тип экспортируемой сущности
exportConfig ExportConfig Да Конфигурация экспорта
exportFileName String Нет Имя создаваемого файла
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 Да Флаг, указывающий на то надо ли добавлять в иерархию пустые папки (без выгружаемых файлов)
exportFileName String Нет Имя создаваемого файла
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 Да Конфигурация экспорта
exportFileName String Нет Имя создаваемого файла

ExportTemplateUpdateDto

Поле Тип Обязательное Описание
id ExportTemplateId (UUID) Да Уникальный идентификатор шаблона
entityType EntityTypeId (String) Да Тип экспортируемой сущности
title Title (String) Да Наименование шаблона
description String Нет Описание шаблона
exportConfig ExportConfig Да Конфигурация экспорта
exportFileName String Нет Имя создаваемого файла
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 Да Всего операций

Сервис полнотекстового поиска - ПП

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

Общее описание архитектуры сервиса ПП

Сервис делает доступными для полнотекстового поиска объекты сервиса модели данных. Для каждого типа объектов должно существовать правило индексации в ES. Все поля объекта разделяются на 3 категории:

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

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

Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm. Для корректной минимальной работы сервиса требуется обязательное подключение к Kafka, Consul, ElasticSearch. Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus и ApiGateway.

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

Переменная Тип Обязательная Значение по умолчанию Описание
SERVER_PORT int нет 8080 Порт, на котором слушает HTTP-сервер
SERVER_AUTHORIZER_KIND string нет "authzforce" Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию.
CONSUMER_INDEXATION_TOPIC string нет document Название кафка-топика для команд индексации объектов
CONSUMER_EVENT_TOPIC string нет entityObjectEvent Название кафка-топика для ожидания событий по объектам. ОБЯЗАТЕЛЬНО должно соответствовать названиям в сервисе моделей данных и в сервисе индексаций
CONSUMER_COMPLETION_TOPIC string нет completion Название кафка-топика для команд работы с индексом автодополнений
CONSUMER_GROUP string нет document Имя группы-консьюмеров сервиса ПП
ELASTIC_HOST string да localhost Адрес ES
ELASTIC_PORT int да 9200 Порт ES
ELASTIC_USER string нет "" Пользователь Elasticsearch для basic-аутентификации
ELASTIC_PASSWORD string нет "" Пароль пользователя Elasticsearch для basic-аутентификации
ELASTIC_USE_SSL boolean нет false Использовать ssl при подключении к Elasticsearch. Если используется корректный сертификат, подписанный УЦ, тогда одного этого флага должно хватить для настройки ssl. Если используется самоподписанный сертификат, тогда нужно добавить корневые сертификаты в ELASTIC_TRUST_STORE_LOCATION
ELASTIC_TRUST_STORE_TYPE string нет pem Тип хранилища сертификата. Настраивается при подключении к Elasticsearch через ssl с использованием самоподписанного сертификата. Пока поддерживается только pem.
ELASTIC_TRUST_STORE_LOCATION string нет "" Место хранения сертификата. Используется для самоподписанных сертификатов при подключении через ssl.
ELASTIC_TRUST_STORE_PASSWORD string нет "" Пароль от сертификата и/или ключа. Используется для самоподписанных сертификатов при подключении через ssl. В текущей реализации с pem-сертификатами не используется.
ELASTIC_SCROLL_BATCH_SIZE int нет 100 Количество записей из индекса эластика, запрашиваемое постранично.
ELASTIC_ELASTIC_SCROLL_DURATION duration string нет 30 seconds Время ожидания во время постраничного запроса записей из эластика.
VERDI_CONSUL string да http://localhost:8500 Адрес Consul
VERDI_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
VERDI_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
VERDI_KAFKA_ADDRESS string да localhost:9092 Адрес брокера Kafka.
VERDI_KAFKA_TOPIC string нет "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
VERDI_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
VERDI_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
VERDI_KAFKA_AUTH_PRINCIPAL string нет "" Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos).
VERDI_KAFKA_AUTH_KEYTAB_PATH string нет "" Путь до keytab-файла(в случае соединения с kafka через Kerberos).
VERDI_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет.
VERDI_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
VERDI_KAFKA_AUTH_MODE string нет "" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
VERDI_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings.
VERDI_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
VERDI_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
VERDI_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL duration string нет 4 minutes Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом.
VERDI_KAFKA_CONNECTION_CHECK_INTERVAL duration string нет 60 seconds Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений.
VERDI_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL duration string нет 5 minutes Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным.
VERDI_KAFKA_PRODUCER_PROPS string нет "max.request.size=1048576" Дополнительные параметры для Kafka producer. Заполняются по шаблону "key1=value1;key2=value2".
VERDI_HOST string да localhost Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
VERDI_TTL duration string нет 30 seconds Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
VERDI_HEALTH_CHECK duration string нет 10 seconds Периодичность отправки health check в ServiceDiscovery
VERDI_COMMAND_STORAGE_UPDATE_PERIOD duration string нет 1 minutes Время кэширования данных по командам из CommandDiscovery
VERDI_SERVICE_DISCOVERY_UPDATE_PERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
VERDI_ALLOW_INTERNAL_COMMANDS bool нет true Можно ли сервису отправлять внутрисистемные команды
VERDI_CONSUL_CONNECTION_MAX_RETRY int нет 5 Максимальное количество попыток подключений к Consul
VERDI_CONSUL_CONNECTION_RETRY_DELAY duration string нет 1 seconds Таймаут между неудачными попытками подключения к Consul
AUTOCOMPLETE_SIZE int нет 10 Максимальное количество выдаваемых подсказок для автодополнения поисковой строки
AUTOCOMPLETE_FUZZINESS string нет AUTO На сколько искомая строка для автодополнения может отличаться от выдаваемых подсказок. Допустимые значения: AUTO, 0, 1 или 2. Значение AUTO подбирает количество опечаток под длину исправляемой строки: 0-2 символа - без опечаток, 3-5 символов - 1 опечатка, >5 символов - 2 опечатки.
FTS_READABLE_NAME string нет AUTO Читаемое название сервиса
FTS_DESCRIPTION string нет AUTO Читаемое описание сервиса
FTS_AUTHZFORCE_ADDR url string нет http://localhost:8080/authzforce-ce Адрес сервиса authzforce
FTS_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в Authzforce server
FTS_AUTHZFORCE_CONNECT_TIMEOUT duration string нет 5 seconds Максимальное время ожидания ответа от Authzforce
DM_SCHEMA_CACHE_SIZE int нет 128 Максимальный размер кэша для json schema
DM_SCHEMA_CACHE_TTL duration string нет 5 minutes Время жизни элементов в кэше для json schema
FS_URI url string нет http://localhost:9002 Адрес S3 файлового хранилища minio
FS_ACCESS_KEY_ID string нет admin Идентификатор доступа к minio
FS_SECRET_ACCESS_KEY string нет admin Секретный ключ доступа к minio
FS_UPLOAD_PARALLELISM int нет 1 Параллелизм загрузки файлов в minio
FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
FS_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
FS_CACHE_TTL duration string нет Время жизни клиента в кеше
FS_RETRY_ATTEMPTS int нет 5 Количество ретраев, которое будет произведено в случае Exception-а в операции FSClient-а и при вычитывании стрима в get операциях FSClient-а.
FS_RETRY_DELAY duration string нет 10 millis Задержка между ретраями операций FSClient-а.
VERDI_COMMANDS_HTTP_RETRY_ATTEMPTS int нет 5 Поле attempts из RetrySettings
VERDI_COMMANDS_HTTP_RETRY_DELAY duration string нет "5 seconds" Поле delay из RetrySettings
VERDI_COMMANDS_HTTP_RETRY_KIND string нет "OnSomeExceptions(ConnectException)" CommandResultRetryConditionKind
FTS_DEFAULT_MAPPING_VERSION int нет 1 Индексация новых объектов по правилам Mapping(если = 1) или MappingV2(если = 2)
FTS_PLUGIN_CONSUMER_TOPIC string Нет ftsPlugin Основной топик плагина, в который поступает StepProgress на обработку
FTS_PLUGIN_PROGRESS_TOPIC string Нет progress Топик, в который плагин пишет об окончании обработки
FTS_PLUGIN_CONSUMER_GROUP string Нет fts_plugin_consumer_group Имя группы-консьюмеров плагина индексации документов
FTS_PLUGIN_CONSUMER_TOPIC_PARTITIONS int Нет 10 Число читаемых партиций из кафка-топика команд
FTS_PLUGIN_INFO_READABLE_NAME string Нет Плагин для индексации текста документа Значение в поле name у тех. константы плагина
FTS_PLUGIN_INFO_DESCRIPTION string Нет Передает тесты документов в indexation-service Значение в поле description у тех. константы плагина
FTS_PLUGIN_INFO_VERSION int Нет 1 Значение в поле serviceVersion у тех. константы плагина

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

Название команды EntityType Actions
fullTextSearchIndexDocument - -
createMappingFullTextSearch System full-text-search_System_CreateMappingFullTextSearch
createMappingFullTextSearchV2 System full-text-search_System_CreateMappingFullTextSearch
updateMappingFullTextSearch System full-text-search_System_UpdateMappingFullTextSearch
updateMappingFullTextSearchV2 System full-text-search_System_UpdateMappingFullTextSearch
getMappingFullTextSearch System full-text-search_System_GetMappingFullTextSearch
getMappingFullTextSearchV2 System full-text-search_System_GetMappingFullTextSearch
deleteMappingFullTextSearch System full-text-search_System_DeleteMappingFullTextSearch
listMappingFullTextSearch System full-text-search_System_ListMappingFullTextSearch
fullTextSearchDSLV2 Произвольный EntityType full-text-search_RequestDependent_FullTextSearchDSLV2
fullTextSearchDSLV3 Произвольный EntityType full-text-search_RequestDependent_FullTextSearchDSL
fullTextSearchDSLGraphV2 Произвольный EntityType full-text-search_RequestDependent_FullTextSearchDSLGraphV2
identificationSearch Произвольный EntityType full-text-search_RequestDependent_IdentificationSearch
plagiarismSearch Произвольный EntityType full-text-search_RequestDependent_PlagiarismSearch
similaritySearchV2 Произвольный EntityType full-text-search_RequestDependent_SimilaritySearch ИЛИ full-text-search_RequestDependent_IdentificationSearch (action для первой версии)
plagiarismSearchV2 Произвольный EntityType full-text-search_RequestDependent_PlagiarismSearch
fullTextSearchAnalyzers System full-text-search_System_FullTextSearchAnalyzers
fullTextAutocomplete Произвольный EntityType full-text-search_RequestDependent_FullTextAutocomplete
fullTextSearchIndexCompletionPhrase - -
fullTextAggregationSearch Произвольный EntityType full-text-search_RequestDependent_FullTextAggregationSearch
searchByParent Произвольный EntityType full-text-search_RequestDependent_SearchByParent

fullTextSearchIndexDocument

Индексация объекта

На входе объект и связанные файлы

{
  "entityObject": {
    "id": "62b5b85f-5962-407d-89f1-adbdb49cca85",
    "entityType": "Document",
    "title": "Документ",
    "source": "test",
    "created": 1674060753,
    "modified": 1674060753,
    "data": {
      "content": "someContent",
      "title": "someTitle",
      "author": "someAuthor",
      "city": "someCity"
    },
    "additionalData": {
      "extracted": "someAdditionalContent"
    },
    "version": 1,
    "removed": false
  },
  "files": {
    "file1": [
      "/temp/55497df9-bf03-4364-bada-881bbd5531f8"
    ]
  }
}

Команда не возвращает никаких данных после выполнения

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

getMappingFullTextSearch

Получение правила индексации

На входе идентификатор правила, по сути тип объекта

"Document"

В результате описания индексации

{
  "entityType": "Document",
  "fullText": [
    {
      "name": "content"
    },
    {
      "name": "title"
    }
  ],
  "stringFacets": [
    "author",
    "city"
  ],
  "numberFacets": [],
  "seqNo": 31,
  "primaryTerm": 1
}

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

getMappingFullTextSearchV2

Получение правила индексации (вер. 2)

На входе идентификатор правила, по сути тип объекта

"Document"

В результате описания индексации

{
  "entityType": "Document",
  "fullText": [
    {
      "name": "documents",
      "analyzer": "russian",
      "boost": null,
      "isNestedFile": true
    },
    {
      "name": "name",
      "analyzer": "russian",
      "boost": 0.8,
      "isNestedFile": false
    }
  ],
  "sorts": [
    {
      "field": "isActual",
      "isDefault": true,
      "sortingType": "string"
    }
  ],
  "stringFacets": [
    "author",
    "city"
  ],
  "numberFacets": [],
  "booleanFacets": [],
  "seqNo": 31,
  "primaryTerm": 1
}

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

createMappingFullTextSearch

Создание правила индексации

На входе описание индексации

{
  "entityType": "Document",
  "fullText": [
    {
      "name": "content"
    },
    {
      "name": "title"
    }
  ],
  "stringFacets": [
    "author",
    "city"
  ],
  "numberFacets": []
}

В результате идентификатор правила, по сути тип объекта

"Document"

Или ошибка, если правило для такого entityType уже существует

{
  "businessError": null,
  "message": "ERROR: duplicate value - entityType=Document already exists",
  "stackTrace": null,
  "data": null
}

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

{
  "businessError": null,
  "message": "ERROR: entityType should be present in datamodel",
  "stackTrace": null,
  "data": null
}

Поддерживается только синхронный вызов. При пустом entityType в [MappingDTO] вернет Bad Request

deleteMappingFullTextSearch

Удаление правила индексации. Пока команда существует только для отладки, после удаления правила не будет работать поиск по удаленному типу. При пустом entityType в теле вернет Bad Request

На входе идентификатор правила

"Document"

В результате кол-во удаленных записей

1

Или ошибка, если правило с таким entityType не существует

{
  "businessError": null,
  "message": "Mapping Document not found",
  "stackTrace": null,
  "data": null
}

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

createMappingFullTextSearchV2

Создание правила индексации (вер. 2)

На входе описание индексации

{
  "entityType": "Document",
  "fullText": [
    {
      "name": "documents",
      "analyzer": "russian",
      "boost": null,
      "sourceExclude": true,
      "isNestedFile": true
    },
    {
      "name": "name",
      "analyzer": "russian",
      "boost": 0.8,
      "sourceExclude": false
    }
  ],
  "sorts": [
    {
      "field": "catalogItem",
      "catalogField": null,
      "isDefault": false,
      "defaultOrder": null,
      "sortingType": "catalog"
    },
    {
      "field": "diameter",
      "catalogField": null,
      "isDefault": true,
      "defaultOrder": "asc",
      "sortingType": "number"
    }
  ],
  "stringFacets": [
    "author",
    "city"
  ],
  "numberFacets": [],
  "booleanFacets": []
}

В результате идентификатор правила, по сути тип объекта

"Document"

Или ошибка, если правило для такого entityType уже существует

{
  "businessError": null,
  "message": "ERROR: duplicate value - entityType=Document already exists",
  "stackTrace": null,
  "data": null
}

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

{
  "businessError": null,
  "message": "ERROR: entityType should be present in datamodel",
  "stackTrace": null,
  "data": null
}

Поддерживается только синхронный вызов. При пустом entityType в MappingDtoV2 вернет Bad Request. Подробнее о сортировке смотри SortingMapping

updateMappingFullTextSearch

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

На входе описание индексации

{
  "entityType": "Document",
  "fullText": [
    {
      "name": "content"
    },
    {
      "name": "title"
    }
  ],
  "sorts": [
    {
      "field": "isActual",
      "isDefault": true,
      "sortingType": "?"
    }
  ],
  "stringFacets": [
    "author",
    "city"
  ],
  "numberFacets": [],
  "booleanFacets": [],
  "seqNo": 14,
  "primaryTerm": 1
}

В результате кол-во обновленных записей

Поддерживается только синхронный вызов. При пустом entityType в [Mapping] вернет Bad Request

- На выходе: Integer

updateMappingFullTextSearchV2

Обновление правила индексации (вер.2). Пока команда существует только для отладки, после обновления правила уже проиндексированные записи никак не будут обновляться, поэтому на них новый поиск может работать некорректно.

На входе описание индексации

{
  "entityType": "Document",
  "fullText": [
    {
      "name": "documents",
      "analyzer": "russian",
      "boost": null,
      "isNestedFile": true
    },
    {
      "name": "name",
      "analyzer": "russian",
      "boost": 0.8,
      "isNestedFile": false
    }
  ],
  "sorts": [
    {
      "field": "isActual",
      "isDefault": true,
      "sortingType": "boolean"
    }
  ],
  "stringFacets": [
    "author",
    "city"
  ],
  "numberFacets": [],
  "booleanFacets": [],
  "seqNo": 14,
  "primaryTerm": 1
}

В результате кол-во обновленных записей

Поддерживается только синхронный вызов. При пустом entityType в [MappingV2] вернет Bad Request

listMappingFullTextSearch

Список всех правил индексации

Входных данных нет

В результате список правил индексаций

[
  {
    "entityType": "Document",
    "fullText": [
      {
        "name": "content",
        "analyzer": null,
        "boost": null
      }
    ],
    "stringFacets": [],
    "numberFacets": [],
    "seqNo": 0,
    "primaryTerm": 0
  },
  {
    "entityType": "agreement",
    "fullText": [
      {
        "name": "content",
        "analyzer": null,
        "boost": null
      },
      {
        "name": "title",
        "analyzer": null,
        "boost": null
      }
    ],
    "stringFacets": [
      "author",
      "city"
    ],
    "numberFacets": [],
    "seqNo": 0,
    "primaryTerm": 0
  }
]

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

listMappingFullTextSearchV2

Список всех правил индексации (вер.2)

Входных данных нет

В результате список правил индексаций

[
  {
    "entityType": "Document",
    "fullText": [
      {
        "name": "content",
        "analyzer": null,
        "boost": null
      }
    ],
    "sorts": [],
    "stringFacets": [],
    "numberFacets": [],
    "booleanFacets": [],
    "seqNo": 0,
    "primaryTerm": 0
  },
  {
    "entityType": "agreement",
    "fullText": [
      {
        "name": "content",
        "analyzer": null,
        "boost": null
      },
      {
        "name": "title",
        "analyzer": null,
        "boost": null
      }
    ],
    "sorts": [
      {
        "field": "isActual",
        "isDefault": true,
        "sortingType": "boolean"
      }
    ],
    "stringFacets": [
      "author",
      "city"
    ],
    "numberFacets": [],
    "booleanFacets": [],
    "seqNo": 0,
    "primaryTerm": 0
  }
]

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

fullTextSearchDSL (FT) V1

Полнотекстовый поиск

На входе поисковый запрос

{
  "query": "(бензин^0.1 || керосин^0.2) && нефть",
  "originQuery": "нефть",
  "facetsQuery": "agreement:author && agreement:city",
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    },
    {
      "facetName": "agreement:city",
      "facetValue": [
        "someCity"
      ]
    }
  ],
  "paging": {
    "page": 1,
    "count": 10
  },
  "entityTypes": [
    "agreement"
  ]
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    },
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity1"
      ],
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "02a193f7-07cf-4d84-aa10-059a89836955"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    }
  ],
  "total": 2
}

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

fullTextSearchDSL (FT) V2

Полнотекстовый поиск

На входе поисковый запрос

{
  "query": "нефть",
  "searchType": "Words",
  "extensions": [
    {
      "item": "керосин",
      "boost": 0.2
    },
    {
      "item": "бензин",
      "boost": 0.1
    }
  ],
  "facetsQuery": "agreement:author && agreement:city && agreement:year",
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    },
    {
      "facetName": "agreement:city",
      "facetValue": [
        "someCity"
      ]
    }
  ],
  "numberFacets": {
    "agreement:year": "2020"
  },
  "paging": {
    "page": 1,
    "count": 10
  },
  "entityTypeFields": {
    "agreement": [
      "author",
      "city",
      "year"
    ]
  }
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    },
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity1"
      ],
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "02a193f7-07cf-4d84-aa10-059a89836955"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "total": 2
}

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

fullTextSearchDSL (FT) V3

Полнотекстовый поиск (вер. 3) Для корректной работы необходимо предварительно конфигурировать индекс методами работающими с MappingV2

На входе поисковый запрос

{
  "search": [
    {
      "query": "нефть",
      "searchType": "Words"
    },
    {
      "query": "переработка",
      "searchType": "Strict"
    }
  ],
  "extensions": [
    {
      "item": "керосин",
      "boost": 0.2
    },
    {
      "item": "бензин",
      "boost": 0.1
    }
  ],
  "facetsQuery": "agreement:author && agreement:city && agreement:year",
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    },
    {
      "facetName": "agreement:city",
      "facetValue": [
        "someCity"
      ]
    }
  ],
  "numberFacets": {
    "agreement:year": "2020"
  },
  "booleanFacets": [],
  "sorting": {
    "fieldName": "massa",
    "order": "asc"
  },
  "paging": {
    "page": 1,
    "count": 10
  },
  "entityTypeFields": {
    "agreement": [
      "author",
      "city",
      "year"
    ]
  }
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    },
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity1"
      ],
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "02a193f7-07cf-4d84-aa10-059a89836955"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "total": 2
}

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

fullTextSearchDSL Graph (FT) V1

На входе поисковый запрос

{
  "query": "нефть",
  "originQuery": "нефть",
  "facetsQuery": "",
  "stringFacets": [
  ],
  "paging": {
    "page": 1,
    "count": 10
  },
  "entityTypes": [
    "RfbrDocument"
  ]
}

В результате найденные документы в упрощенной форме

{
  "status": "Completed",
  "timestamp": 1648043225394,
  "value": {
    "documents": [
      {
        "id": "2c8fd498-4f28-4af5-a55e-fa3810daca35",
        "entityType": "RfbrDocument"
      },
      {
        "id": "a51bd74a-ad9d-47d5-a077-86b6e7fb71b0",
        "entityType": "RfbrDocument"
      }
    ],
    "facetsAggregations": [
      {
        "key": "RfbrDocument:documentType",
        "count": 605,
        "nested": [
          {
            "key": "f31ed82c-9fb2-4eb4-973c-70b09b24bcda",
            "count": 549,
            "nested": []
          },
          {
            "key": "b4b6e695-9fcb-4f38-a5c6-1ff8e0ab8002",
            "count": 34,
            "nested": []
          }
        ]
      }
    ],
    "statistics": [
      {
        "key": "RfbrDocument:documentType",
        "count": 605,
        "nested": [
          {
            "key": "f31ed82c-9fb2-4eb4-973c-70b09b24bcda",
            "count": 549,
            "nested": []
          },
          {
            "key": "b4b6e695-9fcb-4f38-a5c6-1ff8e0ab8002",
            "count": 34,
            "nested": []
          }
        ]
      }
    ],
    "total": 605
  }
}

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

fullTextSearchDSL Graph (FT) V2

На входе поисковый запрос

{
  "query": "нефть",
  "searchType": "Words",
  "extensions": [
    {
      "item": "керосин",
      "boost": 0.2
    },
    {
      "item": "бензин",
      "boost": 0.1
    }
  ],
  "facetsQuery": "",
  "stringFacets": [
  ],
  "numberFacets": {},
  "paging": {
    "page": 1,
    "count": 10
  },
  "entityTypeFields": {
    "RfbrDocument": [
      "documentType"
    ]
  }
}

В результате найденные документы в упрощенной форме

{
  "status": "Completed",
  "timestamp": 1648043225394,
  "value": {
    "documents": [
      {
        "id": "2c8fd498-4f28-4af5-a55e-fa3810daca35",
        "entityType": "RfbrDocument"
      },
      {
        "id": "a51bd74a-ad9d-47d5-a077-86b6e7fb71b0",
        "entityType": "RfbrDocument"
      }
    ],
    "facetsAggregations": [
      {
        "key": "RfbrDocument:documentType",
        "count": 605,
        "nested": [
          {
            "key": "f31ed82c-9fb2-4eb4-973c-70b09b24bcda",
            "count": 549,
            "nested": []
          },
          {
            "key": "b4b6e695-9fcb-4f38-a5c6-1ff8e0ab8002",
            "count": 34,
            "nested": []
          }
        ]
      }
    ],
    "statistics": [
      {
        "key": "RfbrDocument:documentType",
        "count": 605,
        "nested": [
          {
            "key": "f31ed82c-9fb2-4eb4-973c-70b09b24bcda",
            "count": 549,
            "nested": []
          },
          {
            "key": "b4b6e695-9fcb-4f38-a5c6-1ff8e0ab8002",
            "count": 34,
            "nested": []
          }
        ]
      }
    ],
    "total": 605
  }
}

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

identificationSearch

Поиск документов в поисковом индексе по идентификаторам из результата Lamp-Similarity

На входе поисковый запрос

{
  "storedFile": "processing/9ddcc29f-31e1-4001-beeb-f0708594850b",
  "entityTypes": [
    "agreement"
  ],
  "facetsQuery": "agreement:author && agreement:year",
  "percentageRange": [
    60.3,
    90.5
  ],
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    }
  ],
  "numberFacets": {
    "agreement:year": "2010_2022"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "similarity": 0.8102,
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "total": 1
}

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

plagiarismSearch

Поиск документов в поисковом индексе по идентификаторам из результата Lamp-Plagiarism

На входе поисковый запрос

{
  "storedFile": "processing/9ddcc29f-31e1-4001-beeb-f0708594850b",
  "entityTypes": [
    "agreement"
  ],
  "facetsQuery": "agreement:author && agreement:year",
  "percentageRange": [
    60.3,
    90.5
  ],
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    }
  ],
  "numberFacets": {
    "agreement:year": "2010_2022"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "originality": 0.8102,
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "total": 1
}

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

similaritySearch v2

Вторая версия поиска документов в поисковом индексе по идентификаторам из результата Lamp-Similarity

Данные полученные из результатов обработки lampQuery фильтруются исключением удаленных файлов (вызов listNonExistingFileId сервиса datamodel)

На входе поисковый запрос

{
  "storedFiles": [
    "processing/9ddcc29f-31e1-4001-beeb-f0708594850b"
  ],
  "requiredIds": {
    "agreement": null
  },
  "mergeOps": "max",
  "facetsQuery": "agreement:author && agreement:year",
  "percentageRange": [
    60.3,
    90.5
  ],
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    }
  ],
  "numberFacets": {
    "agreement:year": "2010_2022"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "similarity": 0.8102,
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "total": 1
}

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

plagiarismSearch v2

Вторая версия поиска документов в поисковом индексе по идентификаторам из результата Lamp-Plagiarism

Данные полученные из результатов обработки lampQuery фильтруются исключением удаленных файлов (вызов listNonExistingFileId сервиса datamodel)

На входе поисковый запрос

{
  "storedFiles": [
    "processing/9ddcc29f-31e1-4001-beeb-f0708594850b"
  ],
  "requiredIds": {
    "agreement": null
  },
  "mergeOps": "max",
  "facetsQuery": "agreement:author && agreement:year",
  "percentageRange": [
    60.3,
    90.5
  ],
  "stringFacets": [
    {
      "facetName": "agreement:author",
      "facetValue": [
        "someAuthor"
      ]
    }
  ],
  "numberFacets": {
    "agreement:year": "2010_2022"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

В результате найденные документы приведенные к плоскому объекту

{
  "documents": [
    {
      "author": [
        "someAuthor"
      ],
      "city": [
        "someCity"
      ],
      "originality": 0.8102,
      "entityType": "agreement",
      "content": "someContent",
      "title": "someTitle",
      "id": "62b5b85f-5962-407d-89f1-adbdb49cca85"
    }
  ],
  "facetsAggregations": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "statistics": [
    {
      "key": "agreement:author",
      "count": 2,
      "nested": [
        {
          "key": "someAuthor",
          "count": 2,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:city",
      "count": 2,
      "nested": [
        {
          "key": "someCity",
          "count": 1,
          "nested": []
        },
        {
          "key": "someCity1",
          "count": 1,
          "nested": []
        }
      ]
    },
    {
      "key": "agreement:year",
      "count": 2,
      "nested": [
        {
          "key": "2020.0",
          "count": 2,
          "nested": []
        }
      ]
    }
  ],
  "total": 1
}

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

fullTextSearchAnalyzers

Список всех ES анализаторов

Входных данных нет

В результате список ES анализаторов

[
  "my_custom_analyzer",
  "standard",
  "simple",
  "whitespace",
  "stop",
  "keyword",
  "pattern",
  "fingerprint",
  "russian",
  "english"
]

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

fullTextAutocomplete

На входе запрос с поисковой строкой

{
  "query": "sol"
}

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

[
  {
    "text": "Solution Architect",
    "score": 1
  },
  {
    "text": "Software Developer",
    "score": 1
  }
]

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

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

fullTextSearchIndexCompletionPhrase

На входе набор фраз для сохранения в индексе для автодополнения

{
  "entityType": "Document",
  "objectId": "ba03990e-58d5-40dd-9316-c3257109dc06",
  "phrases": [
    "Software Architect",
    "Software Developer"
  ]
}

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

Индексирование фраз для получения их при автодополнении. Фразы привязываются к некоторому объекту, из которого они извлекаются. При удалении этого объекта фразы также будут удалены.

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

fullTextAggregationSearch

Агрегированный полнотекстовый поиск. Важно: это команда для взаимодействия между сервисами, в будущем ее нельзя будет вызвать через apiGW

На входе форма агрегирующего поиска

{
  "query": "электроконтактная",
  "paging": {
    "page": 1,
    "count": 40
  },
  "relations": {
    "Patent": {
      "RfbrDocument": {}
    }
  },
  "entity": {
    "entityType": "links",
    "objectId": "c62b976e-71f9-4d31-b6ab-45997ba84023"
  }
}

На выходе результат агрегированного поиска

{
  "documents": [
    {
      "document": {
        "id": "c7feabde-09cd-463c-ab4e-968178e7ab37",
        "entityType": "Patent",
        "highlight": {},
        "data": {
          "//doc data": "..."
        }
      },
      "matchedChildren": {
        "RfbrDocument": 2
      }
    },
    {
      "document": {
        "id": "9489f188-d925-4e0f-99a6-7ff4a7f859e7",
        "entityType": "Patent",
        "highlight": {
          "patentFileContent": [
            "(57) Формула изобретения\nКонвейерная хлебопекарная !!!HL!!электроконтактная!!HL!!! печь, характеризующаяся тем, что"
          ]
        },
        "data": {
          "//doc data": "..."
        }
      },
      "matchedChildren": {
        "RfbrDocument": 0
      }
    }
  ],
  "total": 2
}

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

searchByParent

Полнотекстовый поиск внутри родительского документа. Важно: это команда для взаимодействия между сервисами, в будущем ее нельзя будет вызвать через apiGW

На входе форма поиска внутри родительского документа

{
  "query": "электроконтактная",
  "paging": {
    "page": 1,
    "count": 10
  },
  "leafType": "RfbrDocument",
  "entity": {
    "entityType": "Patent",
    "objectId": "c7feabde-09cd-463c-ab4e-968178e7ab37"
  }
}

На выходе результат поиска

{
  "documents": [
    {
      "id": "975975bb-ece6-4aca-80fc-5f227e982582",
      "entityType": "RfbrDocument",
      "highlight": {
        "newFileContent": [
          "И, действительно, !!!HL!!электроконтактная!!HL!!! методика, о которой я здесь\nрассказываю, в скором времени сыграла",
          "Результаты\nизмерений, полученные с помощью !!!HL!!электроконтактной!!HL!!! методики (в\nсочетании с другими), позволили",
          "С помощью !!!HL!!электроконтактной!!HL!!! методики уже в 1948 году были\nполучены первые экспериментальные данные о",
          "моей сохранилось чувство признательности и даже\nгордости от того, что в этой нашей работе по созданию !!!HL!!электроконтактной!!HL!!!",
          "Опыты намечалось проводить с применением !!!HL!!электроконтактной!!HL!!! методики измерения скоростей."
        ]
      },
      "data": {
        "//doc data": "..."
      }
    },
    {
      "id": "1f398276-efb3-41c9-994d-6680681d59f5",
      "entityType": "RfbrDocument",
      "highlight": {
        "newFileContent": [
          "камера; 2 — пьезокварцевый датчик давления; З капсюльвоспламенитель; 4 — метаемое тело с полостью; 5 !!!HL!!электроконтактное!!HL!!!"
        ]
      },
      "data": {
        "//doc data": "..."
      }
    }
  ],
  "total": 2
}

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

aggregateDocuments

Агрегация документов (объектов) из индекса полнотекстового поиска по значениям из переданных полей.

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

[
  {
    "entityType": "type1",
    "aggregationField": "identity",
    "ids": [
      "00000000-0000-0000-0000-000000000001",
      "00000000-0000-0000-0000-000000000002",
      "00000000-0000-0000-0000-000000000003"
    ]
  },
  {
    "entityType": "type2",
    "aggregationField": "identity",
    "ids": [
      "00000000-0000-0000-0000-000000000004"
    ]
  },
  {
    "entityType": "type3",
    "aggregationField": "identity",
    "ids": [
      "00000000-0000-0000-0000-000000000005"
    ]
  },
  {
    "entityType": "type4",
    "aggregationField": "identity",
    "ids": [
      "00000000-0000-0000-0000-000000000006"
    ]
  }
]

В результате значения полей с количеством документов

{
  "buckets": {
    "cb4ca441-8710-4eff-9e4f-746b3d0017be": {
      "total": 1,
      "entities": [
        {
          "code": "type1",
          "count": 1
        }
      ]
    },
    "8f9b0cc2-d060-4a2d-9421-c4bc4de1fea3": {
      "total": 1,
      "entities": [
        {
          "code": "type4",
          "count": 1
        }
      ]
    },
    "0141f31e-33d8-4218-98f4-a26a19237172": {
      "total": 1,
      "entities": [
        {
          "code": "type2",
          "count": 1
        }
      ]
    },
    "ef08cfd6-2c61-4a91-97cb-e59af923260c": {
      "total": 1,
      "entities": [
        {
          "code": "type1",
          "count": 1
        }
      ]
    }
  }
}

Команда только внутренняя (нельзя вызвать через Api Gateway). Поддерживается только синхронный вызов. Если поле отсутствует, то этот документ не учитывается в результате.

checkIdsInIndex

Проверка, проиндексированы ли документы (объекты) с указанными ID

На входе список ID

[
  "fef5409d-5dad-431d-928e-ed1fe984aaad",
  "def5409d-5dad-431d-928e-ed1fe984aaaa"
]

В результате - JSON-объект, где ключом является ID документа, а значением - признак наличия документа с таким ID в индексе

{
  "fef5409d-5dad-431d-928e-ed1fe984aaad": true,
  "def5409d-5dad-431d-928e-ed1fe984aaaa": false
}

Команда только внутренняя (нельзя вызвать через Api Gateway). Поддерживается только синхронный вызов.

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

StringFacet

Описание фасетного фильтра со строками

Название поля Тип Обязательное Описание
facetName String да Имя фильтра. Записывается в формате $entityType:$fieldName
facetValue List[String] да Список значений фильтра

NumberFacet

Описание фасетного фильтра с числовыми значениями

Название поля Тип Описание
facetName String Имя фильтра
facetValue List[Double] Список значений фильтра

FullTextMapping

Правило хранения и поиска полей для полнотекстового поиска

Название поля Тип Описание
name String Имя Поля
analyzer Option[String] ES анализатор
boost Option[Double] Коэффициент, влияющий на ранжирование в поисковой выдаче
sourceExclude Boolean Исключить поле из вывода при поисковых запросах

FullTextMappingV2

Правило хранения и поиска полей для полнотекстового поиска (вер. 2)

Название поля Тип Описание
name String Имя Поля
analyzer Option[String] ES анализатор
boost Option[Double] Коэффициент, влияющий на ранжирование в поисковой выдаче
sourceExclude Option[Boolean] Исключить поле из вывода при поисковых запросах
isNestedFile Option[Boolean] Использовать особый (вложенный) маппинг для файлов, с фиксированным набором полей

SortingMapping

Правило сортировки полей для полнотекстового поиска.
Сортировка возможна по индексированным Keyword полям (данная характеристика будет применена автоматически, если поле ранее не было указано в настройках 'mapping.fullText')

В объекте поле должно иметь тип 'string' или 'number', или быть массивом таких типов. В случае массива для сортировки будет использован первый элемент. Также допустимо указывать название поля содержащего идентификатор каталога. В таком случае нужно отметить поле специальным значением sortingType='catalog', а сервис извлечёт справочные данные из Alexandrina и применит их для упорядочивания выборки. По умолчанию данные справочного элемента будут взяты из поля order в метаданных (CatalogItem.metadata), но это поведение можно переопределить переменной 'catalogField'

Название поля Тип Обязательность Описание
field String да Имя Поля
catalogField, FieldName(String) нет Поле справочника с порядковым значением
isDefault Boolean да Является ли поле сортировкой по умолчанию
defaultOrder Order(String) нет Порядок сортировки (asc,desc) для поля с признаком isDefault
sortingType SortingType да Тип сортировки

SortingType

Варианты типа полей которые можно указать для пользовательской сортировки документов (объектов) в Elastic. Данное перечисление публикуется в сервисе tech-constants при старте приложения и доступно по фильтру constantType=ftsSortingType

Перечисление Описание
number Числовое (эквивалентно elastic4s.ScriptSortType.Number)
string Строковое (эквивалентно elastic4s.ScriptSortType.String)
catalog Поле объекта, которое является идентификатором каталога Alexandrina. Извлеченное справочное значение так же должно соответствовать одному из двух вышеуказанных типов
boolean Булевое (не смотря на поддержку булевых полей эластиком, при работе со ScriptSort будет приведён к числу [0,1] или строке ['false', 'true'])

Mapping

Правило индексации определенного типа

Название поля Тип Описание
entityType String Тип объекта
fullText Seq[FullTextMapping] Правила для полнотекстового поиска
stringFacets Seq[String] Правила для строкового фасетного поиска
numberFacets Seq[String] Правила для числового фасетного поиска
seqNo Long Версия правила. Необходима для версионирования, которое используется для optimistic lock
primaryTerm Long Идентификатор шарды, в которую записано правило. Необходим для версионирования, которое используется для optimistic lock

MappingV2

Правило индексации определенного типа

Название поля Тип Описание
entityType String Тип объекта
fullText Seq[FullTextMappingV2] Правила для полнотекстового поиска
sorts Seq[SortingMapping] Правила настройки сортировки поиска
stringFacets Seq[String] Правила для строкового фасетного поиска
numberFacets Seq[String] Правила для числового фасетного поиска
booleanFacets Seq[String] Правила для булевого фасетного поиска
seqNo Long Версия правила. Необходима для версионирования, которое используется для optimistic lock
primaryTerm Long Идентификатор шарды, в которую записано правило. Необходим для версионирования, которое используется для optimistic lock

MappingDTO

Создание правила индексации определенного типа

Название поля Тип Описание
entityType String Тип объекта
fullText Seq[FullTextMapping] Правила для полнотекстового поиска
stringFacets Seq[String] Правила для строкового фасетного поиска
numberFacets Seq[String] Правила для числового фасетного поиска

MappingDtoV2

Создание правила индексации определенного типа

Название поля Тип Описание
entityType String Тип объекта
fullText Seq[FullTextMapping] Правила для полнотекстового поиска
sorts Seq[SortingMapping] Правила настройки сортировки поиска
stringFacets Seq[String] Правила для строкового фасетного поиска
numberFacets Seq[String] Правила для числового фасетного поиска
booleanFacets Seq[String] Правила для булевого фасетного поиска

SearchRequestDSLV1

Поисковый запрос

Название поля Тип Описание
query String Поисковая строка. Может быть записана с помощью языка запросов
originQuery String Оригинальный поисковый запрос от пользователя
facetsQuery String Поисковый запрос для фасетных фильтров. Может быть записан с помощью языка запросов
stringFacets Seq[StringFacet] Список строковых фасетов
paging Paging Пагинация
entityTypes Seq[String] Список типов

Сервис поддерживает язык запросов для полнотекстового и фасетного поиска. Язык запросов стандартен для verdi (см. например документацию к сервису журналирования). Поддерживаются операции конъюнкции &&, дизъюнкции || и скобки. Полнотекстовый поиск дополнительно поддерживает бустинг через оператор ^. Например как может выглядеть поисковая строка: (бензин^0.1 || керосин^0.2) && нефть. Здесь предполагается что "бензин^0.1 || керосин^0.2" это контекстные расширения.

SearchRequestDSLV2

Поисковый запрос (вер. 2)

Название поля Тип Обязательное Описание
query String да Поисковая строка.
searchType String да Тип запроса. Words - по словам (по любому из значимых слов), Phrase - по всем словам (каждое значимое слово должно присутствовать в объекте), Strict - по точной фразе (все значимые слова запроса должны присутствовать в искомом объекте в том же порядке, на минимальном расстоянии друг от друга).
extensions Seq[SearchExtension] да Контекстное расширение
facetsQuery String да Поисковый запрос для фасетных фильтров. Может быть записан с помощью языка запросов
stringFacets Seq[StringFacet] да Список строковых фасетов
numberFacets JsonObject да Объект с числовыми фасетами. Объект, в котором ключ - это название фильтра, а значение - это значение фильтра (в виде строки). Если числовых фасетов в запросе нет - пустой объект.
paging Paging да Пагинация
entityTypeFields Map[String, Option[Seq[String]]] да Описание фильтрации по типам и полям.
Примеры фильтрации:

- {} -> фильтрация не выполняется
- {"type": null} -> фильтрация по указанным типам
- {"type": ["field"]} -> фильтрация по полям из списка
- {"type": []} -> выдает пустой результат

Возможные форматы значений фильтров числовых фасетов:

SearchRequestDSLV3

Поисковый запрос (вер. 3)

Название поля Тип Обязательное Описание
search Seq[SearchRequestDslV3Part] да Поисковые строки. Одна строка — обычный поиск V2 с возможностью расширений. Более одной для уточнения выборки
extensions Seq[SearchExtension] да Контекстное расширение
facetsQuery String да Поисковый запрос для фасетных фильтров. Может быть записан с помощью языка запросов
stringFacets Seq[StringFacet] да Список строковых фасетов
numberFacets JsonObject да Объект с числовыми фасетами. Объект, в котором ключ - это название фильтра, а значение - это значение фильтра (в виде строки). Если числовых фасетов в запросе нет - пустой объект.
booleanFacets Map[String, Seq[Option[Boolean]]] да Список булевых фасетов
paging Paging да Пагинация
sorting Sorting нет Сортировка
entityTypeFields Map[String, Option[Seq[String]]] да Описание фильтрации по типам и полям.
Примеры фильтрации:

- {} -> фильтрация не выполняется
- {"type": null} -> фильтрация по указанным типам
- {"type": ["field"]} -> фильтрация по полям из списка
- {"type": []} -> выдает пустой результат

SearchRequestDslV3Part

Дополненный поисковый запрос

Название поля Тип Обязательное Описание
query String да Поисковая строка.
searchType String да Тип запроса. Words - по словам (по любому из значимых слов), Phrase - по всем словам (каждое значимое слово должно присутствовать в объекте), Strict - по точной фразе (все значимые слова запроса должны присутствовать в искомом объекте в том же порядке, на минимальном расстоянии друг от друга).

SearchExtension

Контекстное расширение

Название поля Тип Обязательное Описание
item String да Текст поискового расширения (смежные темы, выбранные пользователем из предложенных сервисом интеллектуализации)
boost Double да Коэффициент расширения, влияющий на его важность: чем выше коэффициент, тем выше элемент, включающий данное расширение, среди всех результатов поиска. Стандартное значение = 1.

SearchByLampResultRequest

Запрос на поиск по идентификаторам, полученным от LAMP

Название поля Тип Обязательное Описание
storedFile URI StoredFile да Ссылка на файл в FileStorage, который содержит список идентификаторов объектов в поисковом индексе (формат файла - FaissMessage)
entityTypes Seq[String] да Фильтр по типам объектов (пустой список = нет фильтрации)
facetsQuery String да Поисковый запрос для фасетных фильтров. Может быть записан с помощью языка запросов
percentageRange Seq[Float] нет Фильтр по процентам целевой метрики. Обязательно должен содержать 2 значения: [начало диапазона, конец диапазона]. "Начало" и "конец" включаются в результирующую выборку. Значения меньше "0.0" не будут участвовать в фильтрации. Если необходим полуоткрытый диапазон, его можно задать как [10.0, -1.0].
stringFacets Seq[StringFacet] да Список строковых фасетов
numberFacets JsonObject да Объект с числовыми фасетами. Объект, в котором ключ - это название фильтра, а значение - это значение фильтра (в виде строки). Если числовых фасетов в запросе нет - пустой объект.
paging Paging да Пагинация
query String нет Поисковая строка. Используется только если указан searchType
searchType String нет Тип поиска по поисковой строке. Words - по словам, Phrase - по всей фразе целиком.

Возможные форматы значений фильтров числовых фасетов:

Точное значение - "39"

Список значений - "[25,39]"

Range - "25_39" или "39" или "25"

Отрицание - "not [39]" или "not [25,39]" или "not 25_39"

SearchByLampResultRequest V2

Запрос на поиск по идентификаторам, полученным от LAMP

Название поля Тип Обязательное Описание
storedFiles Seq[URI StoredFile] да Список ссылок на файлы в FileStorage, который содержит список идентификаторов объектов в поисковом индексе (формат файла - JSON с FaissMessage или PlagiarismMessage)
requiredIds Option[Map[String, Option[Seq[String]]]] нет Фильтр по типам и идентификаторам объектов (подробное описание под таблицей)
mergeOps Option[String] нет Поисковый запрос для фасетных фильтров. Может быть записан с помощью языка запросов
facetsQuery String да Поисковый запрос для фасетных фильтров. Может быть записан с помощью языка запросов
percentageRange Seq[Float] нет Фильтр по процентам целевой метрики. Обязательно должен содержать 2 значения: [начало диапазона, конец диапазона]. "Начало" и "конец" включаются в результирующую выборку. Значения меньше "0.0" не будут участвовать в фильтрации. Если необходим полуоткрытый диапазон, его можно задать как [10.0, -1.0].
stringFacets Seq[StringFacet] да Список строковых фасетов
numberFacets JsonObject да Объект с числовыми фасетами. Объект, в котором ключ - это название фильтра, а значение - это значение фильтра (в виде строки). Если числовых фасетов в запросе нет - пустой объект.
paging Paging да Пагинация
query String нет Поисковая строка. Используется только если указан searchType
searchType String нет Тип поиска по поисковой строке. Words - по словам, Phrase - по всей фразе целиком.

Возможные форматы значений фильтров числовых фасетов:

Точное значение - "39"

Список значений - "[25,39]"

Range - "25_39" или "39" или "25"

Отрицание - "not [39]" или "not [25,39]" или "not 25_39"

Варианты значений поля requiredIds:

FTAggregation

Модель для представления агрегации из ES

Название поля Тип Описание
key String Название агрегации
count Long Общее кол-во документов по данной агрегации
nested Seq[FTAggregation] Вложенные агрегации

SuggestionItem

{
  "sourceText": "foo",
  "offset": 0,
  "length": 3,
  "newText": "for"
}

Предложение исправления ошибки в поисковом запросе. Содержит исходное слово из поисковой строки или его лемму, местонахождение этого слова в исходной строке, а также предлагаемое исправление для этого слова или леммы. Нужно в исходной строке по указанной в offset позиции убрать length символов и вставить предлагаемую замену. Тогда мы получим исправленный вариант. При вставке исправленного варианта также можно вставить теги для подсвечивания исправлений (учесть только, что при вставке тегов поедут последующие offset).

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

Название поля Тип Описание
sourceText String Слово или лемма от слова в исходной поисковой строке, для которой предложено исправление
offset Int Позиция слова или леммы в исходной поисковой строке
length Int Длина исправляемого слова или леммы
newText String Новое значение слова или леммы

FTResultDocument

Найденный через поиск документ

Название поля Тип Описание
id String Идентификатор документа
entityType String Тип документа
highlight JsonObject Подсветка
data JsonObject Данные документа

FtResultHit

Данные подсветки

Название поля Тип Описание
queryIdx Int Индекс поисковой строки из запроса
field String Название поля с найденным текстом
fileId String Идентификатор файла
highlights String[] Подсветка

FtResultDocumentV2

Найденный через поиск документ

Название поля Тип Описание
id String Идентификатор документа
entityType String Тип документа
hits FtResultHit[] Расширенные данные подсветки
data JsonObject Данные документа

FTResultDocumentGraph

Найденный через поиск в графе документ

Название поля Тип Описание
id String Идентификатор документа
entityType String Тип документа

FTSearchResult

Результаты поиска (вер. 1)

Название поля Тип Описание
documents Seq[FTResultDocument] Документы
facetsAggregations Seq[FTAggregation] Агрегация для фасетных фильтров
total Long Общее кол-в документов по поиску
statistics Seq[FTAggregation] Агрегация для статистики
suggestions Seq[SuggestionItem] Список исправлений ошибок в поисковой строке. Если команда не подразумевает поисковую строку, то значение всегда пустое.

FtSearchResultV2

Результаты поиска (вер. 2)

Название поля Тип Описание
documents Seq[FtResultDocumentV2] Документы
facetsAggregations Seq[FTAggregation] Агрегация для фасетных фильтров
total Long Общее кол-в документов по поиску
statistics Seq[FTAggregation] Агрегация для статистики
suggestions Seq[SuggestionItem] Список исправлений ошибок в поисковой строке. Если команда не подразумевает поисковую строку, то значение всегда пустое.

FTSearchResultShort

Результаты поиска без исправлений

Название поля Тип Описание
documents Seq[FTResultDocument] Документы
facetsAggregations Seq[FTAggregation] Агрегация для фасетных фильтров
total Long Общее кол-в документов по поиску
statistics Seq[FTAggregation] Агрегация для статистики

FTSearchResultGraph

Результаты поиска в графе

Название поля Тип Описание
documents Seq[FTResultDocumentGraph] Документы
facetsAggregations Seq[FTAggregation] Агрегация для фасетных фильтров
statistics Seq[FTAggregation] Агрегация для статистики
total Long Общее кол-в документов по поиску

EventType (FT)

Типы событий объекта. Доступные типы: Create, Delete, Update.

EntityWithFiles

Объект и связанные с ним файлы.

Название поля Тип Описание
entityObject EntityObject Объект из модели данных
files Map[String, Seq[StoredFile]] Ассоциативный массив, из имен ключей и ссылок на файлы

FaissMessage

Сообщение с результатом LAMP по поиску похожих объектов (similarity)

Название поля Тип Описание
ids Seq[EntityIdentifier-Encoded] Список идентификаторов похожих объектов
similarities Seq[Float] Список значений similarity. Порядок в списке соответствует порядку в ids

PlagiarismMessage

Сообщение с результатом LAMP по поиску плагиата (plagiarism)

Название поля Тип Описание
ids Seq[EntityIdentifier-Encoded] Список идентификаторов похожих объектов
originalities Seq[Float] Список значений originality (= 1 - plagiarism). Порядок в списке соответствует порядку в ids
originality Float Среднее значение originality для списка объектов

IdWithSimilarity

Связь идентификатора объекта и процента похожести

Название поля Тип Описание
id EntityIdentifier Идентификатор объекта, хранящийся в faiss
similarity Float Процент похожести

EntityIdentifier-Encoded

Соответствует типу String. Закодированная информация о файле, который был анализирован в LAMP. Формат - " EntityTypeId;ObjectId;FieldName;FileId", где ; разделитель для значений полей.

После декодирования, преобразуется в EntityIdentifier.

EntityIdentifier

Идентификатор объекта, полученный из LAMP

Название поля Тип Описание
entityType String Тип объекта
entityId String Идентификатор объекта (используется для поиска в elasticsearch)
fieldName String Название поля объекта, которое содержит файл
fileId String Идентификатор файла

CompletionPhrases

Набор фраз для добавления в индекс автодополнения

Название поля Тип Описание
input String Индексируемая фраза
weight Int Вес индексируемой фразы. Нужен для дополнительного ранжирования результатов. По умолчанию равно 1

AutocompleteRequest

Запрос на получение автодополнений поисковой строки.

Название поля Тип Описание
query String Поисковая строка для автодополнения

AutocompleteResult

Результат автодополнений поисковой строки.

Название поля Тип Описание
text String Предлагаемый текст для дополнения
score Double Оценка предложенного результата

AggregatedDocument

Найденный через агрегированный поиск документ

Название поля Тип Описание
document FTResultDocument Документ
matchedChildren Map[String, Int] Информация о дочерних документах в виде "тип_документов":"количество"

AggregationSearchResult

Результат агрегированного поиска

Название поля Тип Описание
documents Seq[AggregatedDocument] Найденные документы
total Long Общее кол-во документов по запросу поиска

ByParentSearchResult

Результат поиска дочерних элементов

Название поля Тип Описание
documents Seq[FTResultDocument] Найденные документы
total Long Общее кол-во документов по запросу поиска

AggregationSearchRequest

Форма агрегированного запроса

Название поля Тип Описание
query String Поисковая строка
paging Paging Пагинация
relations Map[String, relations] Иерархия типов сущностей
entity EntityObjectIdentity Опциональный идентификатор родительской ветки

ByParentSearchRequest

Форма поиска дочерних элементов

Название поля Тип Описание
query String Поисковая строка
paging Paging Пагинация
entity EntityObjectIdentity Идентификатор родительского документа
leafType String Тип дочерних элементов

DocumentsToAggregate

Список документов одного типа для агрегации по выбранному полю

Название поля Тип Обязательное Описание Ограничения
ids List[UUID] Да Идентификаторы документов в поисковом индексе
entityType String Да Тип документа Не пустое
aggregationField String Да Поле, которое содержит значение для агрегации Не пустое

AggregateDocumentsResult

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

Название поля Тип Обязательное Описание
buckets Map[String, AggregateBucketValue] Да Список бакетов, которые появляются в результате агрегации объектов по определенному значению (key в Map). В JSON тип Map[Key, Value] представлен в виде объекта, где Key - поле объекта, Value - значение поля. В случае пустой Map, поле buckets будет содержать пустой объект.

AggregateBucketValue

Информация о бакете в агрегации

Название поля Тип Обязательное Описание
total Long Да Общее кол-во объектов, попадающих в данный бакет
entities Seq[EntityInBucket] Да Информация о сущностях объектов, попадающих в данный бакет

EntityInBucket

Информация о сущности объектов из бакета агрегации

Название поля Тип Обязательное Описание
code EntityTypeId Да Идентификатор типа сущности
count Long Да Кол-во объектов

Клиент сервиса иерархии

client.createHierarchyEntity(HierarchyEntityObjectCreateDTO(HierarchyEntityId("he-he"), "title", "description", None))
client.getHierarchyEntity(HierarchyEntityId("he-he"))

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

Регистрация в distage

В distage сам клиент можно зарегистрировать следующим способом:

make[HierarchyClient].from {
  (dispatcher: Dispatcher, ec: ExecutionContext@Id("ec-services")) =>
    new HierarchyClientImpl(dispatcher)(ec)
}

Сервиса иерархий: hierarchy-entities

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

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

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

Локальный запуск сервиса hierarchy-entities

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

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

HIERARCHY_ENTITIES_DB_HOST=localhost HIERARCHY_ENTITIES_DB_PORT=5432 HIERARCHY_ENTITIES_DB_NAME=hierarchyentities HIERARCHY_ENTITIES_DB_USER=postgres HIERARCHY_ENTITIES_DB_PASSWORD=12345 sbt boot/run

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

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

Переменная Тип Обязательная Значение по умолчанию Описание
HIERARCHY_ENTITIES_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
HIERARCHY_ENTITIES_HTTP_PORT int нет 8080 Порт, на котором слушает HTTP-сервер
HIERARCHY_ENTITIES_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
HIERARCHY_ENTITIES_KAFKA_TOPIC string нет "hierarchy_entities_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_GROUP string нет "hierarchy_entities_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
HIERARCHY_ENTITIES_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Коэффициент величины дополнительной случайной задержки(jitter) относительно основной задержки (При значении 0.2 задержка может быть до 20% больше, чем при 0). Если после умножения задержки на HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR получится меньше 1 миллисекунды, то jitter будет приравнен к нулю.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS int нет 2 Максимальное количество раз, которое консьюмер перезапустится с неизменной очередью сообщений(в пределах DATA_MODEL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN), прежде чем проигнорировать сообщение, на котором происходит ошибка (Указано количество рестартов, а не прочтений. Если HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_RESTARTS = 2, то ошибочное сообщение будет обработано 3 раза, после чего произойдет 3ий рестарт и оно будет проигнорировано). Если указать 0, то перезапуск произойдет, но сообщение будет обработано только в первый раз, когда произошла ошибка. Если указать значение меньше 0, то перезапуски все равно будут происходить, но игнорирование сообщений, вызывающих ошибку, будет отключено.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_PER_MESSAGE_RESTART_CACHE_SIZE int нет 100 Для каждого сообщения счетчик перепрочтений хранится в кэше. Максимальное количество значений в этом кэше.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_PER_MESSAGE_RESTART_CACHE_TTL duration string нет 5 minutes Для каждого сообщения счетчик перепрочтений хранится в кэше.Максимальное время жизни элемента в этом кэше. В случае отсутствия значения время жизни элемента не будет ограничено.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN).После превышения этого числа сервис будет объявлен больным. Все рестарты для каждого отдельного сообщения увеличивают и общий счетчик рестартов консьюмера, поэтому при использовании HIERARCHY_ENTITIES_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS нужно указывать HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_RESTARTS > HIERARCHY_ENTITIES_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS или не указывать HIERARCHY_ENTITIES_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS совсем.
HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который HIERARCHY_ENTITIES_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
HIERARCHY_ENTITIES_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
HIERARCHY_ENTITIES_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka(в случае аутентификации в kafka с помощью пароля). Если название не указано, то настройки авторизации не будут применены.
HIERARCHY_ENTITIES_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka(в случае аутентификации в kafka с помощью пароля).
HIERARCHY_ENTITIES_KAFKA_AUTH_PRINCIPAL string нет "" Principal учетной записи Kafka в Kerberos(в случае аутентификации в kafka через Kerberos).
HIERARCHY_ENTITIES_KAFKA_AUTH_KEYTAB_PATH string нет "" Путь до keytab-файла(в случае аутентификации в kafka через Kerberos).
HIERARCHY_ENTITIES_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
HIERARCHY_ENTITIES_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
HIERARCHY_ENTITIES_KAFKA_AUTH_MODE string нет "static" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
HIERARCHY_ENTITIES_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings.
HIERARCHY_ENTITIES_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
HIERARCHY_ENTITIES_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
HIERARCHY_ENTITIES_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL duration string нет 4 minutes Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом.
HIERARCHY_ENTITIES_KAFKA_CONNECTION_CHECK_INTERVAL duration string нет 60 seconds Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений.
HIERARCHY_ENTITIES_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL duration string нет 5 minutes Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным.
HIERARCHY_ENTITIES_KAFKA_PRODUCER_PROPS string нет "max.request.size=1048576" Дополнительные параметры для Kafka producer. Заполняются по шаблону "key1=value1;key2=value2".
HIERARCHY_AUTHORIZER_KIND string да "authzforce" Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию.
HIERARCHY_AUTHZFORCE_ADDR string да "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
HIERARCHY_AUTHZFORCE_DOMAIN string да "" Доступный DomainID в AuthZforce server
HIERARCHY_ENTITIES_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
HIERARCHY_ENTITIES_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
HIERARCHY_ENTITIES_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
HIERARCHY_ENTITIES_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
HIERARCHY_ENTITIES_DISCOVERABLE_ID string нет "another_hierarchy_entities_service_instance" ID сервиса в ServiceDiscovery
HIERARCHY_ENTITIES_DISCOVERABLE_NAME string нет "hierarchyentities" Имя сервиса в ServiceDiscovery
HIERARCHY_ENTITIES_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
HIERARCHY_ENTITIES_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
HIERARCHY_ENTITIES_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
HIERARCHY_ENTITIES_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
HIERARCHY_ENTITIES_SERVICE_TITLE string нет "hierarchy-entities" Название сервиса для отображения
HIERARCHY_ENTITIES_SERVICE_DESCRIPTION string нет "Service HIERARCHY_ENTITIES" Описание сервиса для отображения
HIERARCHY_ENTITIES_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
HIERARCHY_ENTITIES_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
HIERARCHY_ENTITIES_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
HIERARCHY_ENTITIES_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
HIERARCHY_ENTITIES_HEALTH_TIMEOUT duration string нет 5 seconds Максимальное время ожидания ответа health check
HIERARCHY_ENTITIES_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
HIERARCHY_ENTITIES_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
HIERARCHY_ENTITIES_DB_HOST string да Хост БД
HIERARCHY_ENTITIES_DB_PORT int да Порт БД
HIERARCHY_ENTITIES_DB_NAME string да Имя базы в БД
HIERARCHY_ENTITIES_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
HIERARCHY_ENTITIES_DB_USER string да Пользователь БД
HIERARCHY_ENTITIES_DB_PASSWORD string да Пароль пользователя БД
HIERARCHY_ENTITIES_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
HIERARCHY_ENTITIES_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
HIERARCHY_ENTITIES_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
HIERARCHY_ENTITIES_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
HIERARCHY_ENTITIES_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
HIERARCHY_ENTITIES_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
HIERARCHY_ENTITIES_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
HIERARCHY_ENTITIES_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
HIERARCHY_ENTITIES_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
HIERARCHY_ENTITIES_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
HIERARCHY_ENTITIES_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
HIERARCHY_ENTITIES_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
HIERARCHY_ENTITIES_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
HIERARCHY_ENTITIES_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
HIERARCHY_ENTITIES_DB_SCHEMA string нет "public" Устанавливает schema по умолчанию
HIERARCHY_ENTITIES_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
HIERARCHY_ENTITIES_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
HIERARCHY_ENTITIES_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
HIERARCHY_ENTITIES_FS_URI url string нет http://localhost:9000 Адрес для подключения к Minio
HIERARCHY_ENTITIES_FS_ACCESS_KEY_ID string нет "minioadmin" Ключ доступа к хранилищу файлов Minio (aka пользователь)
HIERARCHY_ENTITIES_FS_SECRET_ACCESS_KEY string нет "minioadmin" Секретный код доступа к хранилищу файлов Minio (aka пароль)
HIERARCHY_ENTITIES_FS_UPLOAD_PARALLELISM int нет 4 Максимально возможный параллелизм при загрузке файлов в хранилище
HIERARCHY_ENTITIES_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
HIERARCHY_ENTITIES_FS_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
HIERARCHY_ENTITIES_FS_CACHE_SIZE int нет 1 Максимальный размер кэша клиентов для хранилища файлов (количество активных соединений).
HIERARCHY_ENTITIES_FS_CACHE_TTL duration string нет Время жизни клиента в кэше
LOGGING_HOSTNAME string нет SERVER Имя сервера для CEF-логов
LOGGING_EXTERNAL_ADDRESS string нет localhost IP-адрес сервера для CEF-логов
GPN_VERSION_POSTFIX string нет Постфикс библиотеки gpn-libs для сборки CI
CLIENT_VERSION_POSTFIX string нет Постфикс библиотеки sed-domain-lib для сборки CI
SYSTEM_VERSION_POSTFIX string нет Постфикс библиотеки sed-system-lib для сборки CI

Список команд сервиса hierarchy-entities

Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации. Не все поля EntityType доступны для использования в настройке авторизации. Если указан прочерк "-", то данное значение не влияет на авторизацию:

Название команды EntityType Actions
hierarchyEntities_createHierarchyEntity HierarchyEntity CreateHierarchy
hierarchyEntities_updateHierarchyEntity HierarchyEntity UpdateHierarchy
hierarchyEntities_deleteHierarchyEntity HierarchyEntity DeleteHierarchy
hierarchyEntities_restoreHierarchyEntity HierarchyEntity RestoreHierarchy
hierarchyEntities_getHierarchyEntity - -
hierarchyEntities_listHierarchyEntities - -
hierarchyEntities_createHierarchyEntityObject HierarchyEntity*1 CreateHierarchyEntityObject
hierarchyEntities_createHierarchyEntityObjectBatch HierarchyEntity*1 CreateHierarchyEntityObject
hierarchyEntities_updateHierarchyEntityObject HierarchyEntityObject UpdateHierarchyEntityObject
hierarchyEntities_deleteHierarchyEntityObject HierarchyEntityObject DeleteHierarchyEntityObject
hierarchyEntities_restoreHierarchyEntityObject HierarchyEntityObject RestoreHierarchyEntityObject
hierarchyEntities_getHierarchyEntityObject - -
hierarchyEntities_listHierarchyEntityObjects - -
hierarchyEntities_listHierarchy - -

*1 - при создании объектов иерархии права проверяются по ID HierarchyEntity, в котором мы хотим создать объект

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

CreateHierarchyEntity

На входе атрибуты для создания иерархичной сущности

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

На выходе ID новой задачи

"HierarchyEntityId"

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

Команда Путь
hierarchyEntities_createHierarchyEntity Kafka Topic "hierarchyEntities_commands"

UpdateHierarchyEntity

На выходе атрибуты для обновления иерархичной сущности

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

На выходе признак успешности обновления

true

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

Команда Путь
hierarchyEntities_updateHierarchyEntity Kafka Topic "hierarchyEntities_commands"

DeleteHierarchyEntity

На входе ID иерархичной сущности

"hierarchyEntityId"

На выходе признак успешности удаления

true

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

Команда Путь
hierarchyEntities_deleteHierarchyEntity Kafka Topic "hierarchyEntities_commands"

RestoreHierarchyEntity

На входе ID иерархичной сущности

"hierarchyEntityId"

На выходе признак успешности восстановления

true

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

Команда Путь
hierarchyEntities_restoreHierarchyEntity Kafka Topic "hierarchyEntities_commands"

GetHierarchyEntity

На входе ID иерархичной сущности

"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",
  "removed": false,
  "version": 2
}

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

Команда Путь
hierarchyEntities_getHierarchyEntity HTTP POST "/v1/hierarchy-entity/get"

ListHierarchyEntities

На входе параметры поиска, сортировки и пагинации (Search) Возможна фильтрация и сортировка по полям data. Для строковых значений префикс data (Например "data.someInfo.info) Для числовых значений префикс dataNumber (Например "dataNumber.someInfo.numberInfo)

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

На выходе список иерархичных сущностей и их общее количество

{
  "items": [
    {
      "id": "HierarchyEntityId",
      "title": "title",
      "description": "description",
      "data": {
        "someInfo": {
          "info": "info",
          "numberInfo": 10
        }
      },
      "created": 1664292962695,
      "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
      "modified": 1664292962695,
      "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
      "removed": false,
      "version": 2
    }
  ],
  "total": 1
}

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

Команда Путь
hierarchyEntities_listHierarchyEntities HTTP POST "/v1/hierarchy-entity/list"

CreateHierarchyEntityObject

На входе атрибуты для создания объекта иерархий

{
  "hierarchyEntityId": "HierarchyEntityId",
  "parentId": "72602ae9-66ab-4065-8305-d374ff14a4bf",
  "data": {
    "title": "objectTitle",
    "objectNumber": 3
  },
  "externalType": "catalogItem",
  "externalEntityType": "CatalogCode1",
  "externalId": "6d873b43-0913-4fde-827c-968f13ebf778"
}

На выходе ID нового объекта иерархий

"ccdeecc5-ff63-4c98-80d6-bab044cc5f1e"

Добавление нового объекта иерархий.

Команда Путь
hierarchyEntities_createHierarchyEntityObject Kafka Topic "hierarchyEntities_commands"

CreateHierarchyEntityObjectBatch

На входе массив атрибутов для создания объектов иерархий

{
  "batch": [
    {
      "hierarchyEntityId": "HierarchyEntityId1",
      "parentId": null,
      "data": {
        "title": "Название 1",
        "objectNumber": 1
      },
      "externalType": "catalogItem",
      "externalEntityType": "CatalogCode1",
      "externalId": "6d873b43-0913-4fde-827c-968f13ebf778"
    },
    {
      "hierarchyEntityId": "HierarchyEntityId2",
      "parentId": null,
      "data": {
        "title": "Название 2",
        "objectNumber": 2
      }
    }
  ]
}

На выходе IDs новых объектов иерархий

[
  "411f2b60-9c68-4941-91e8-14e5d2d9f841",
  "b3d13de1-6411-4f3c-b0d1-bbe619b54f9f"
]

Добавление новых объектов иерархий.

Команда Путь
hierarchyEntities_createHierarchyEntityObjectBatch Kafka Topic "hierarchyEntities_commands"

CreateHierarchyEntityObjectBatchByFile

На входе массив атрибутов для создания объектов иерархий

{
  "id": "1c689788-9617-4c93-bcee-6eae8909a0ba",
  "path": "temp/1c689788-9617-4c93-bcee-6eae8909a0ba",
  "bucket": "temp"
}

На выходе IDs новых объектов иерархий

[
  "411f2b60-9c68-4941-91e8-14e5d2d9f841",
  "b3d13de1-6411-4f3c-b0d1-bbe619b54f9f"
]

Добавление новых объектов иерархий используя файл.

Команда Путь
hierarchyEntities_createHierarchyEntityObjectBatchByFile Kafka Topic "hierarchyEntities_commands"

UpdateHierarchyEntityObject

На выходе атрибуты для обновления объекта иерархий

{
  "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
  "hierarchyEntityId": "HierarchyEntityId",
  "parentId": "72602ae9-66ab-4065-8305-d374ff14a4bf",
  "data": {
    "title": "objectTitle",
    "objectNumber": 3
  },
  "externalType": "catalogItem",
  "externalEntityType": "CatalogCode1",
  "externalId": "6d873b43-0913-4fde-827c-968f13ebf778",
  "version": 1
}

На выходе признак успешности обновления

true

Обновление объекта иерархий.

Команда Путь
hierarchyEntities_updateHierarchyEntityObject Kafka Topic "hierarchyEntities_commands"

DeleteHierarchyEntityObject

На входе ID объекта иерархий

"ccdeecc5-ff63-4c98-80d6-bab044cc5f1e"

На выходе признак успешности удаления

true

Удаление объекта иерархий.

Команда Путь
hierarchyEntities_deleteHierarchyEntityObject Kafka Topic "hierarchyEntities_commands"

RestoreHierarchyEntityObject

На входе ID объекта иерархий

"ccdeecc5-ff63-4c98-80d6-bab044cc5f1e"

На выходе признак успешности восстановления

true

Восстановление объекта иерархий.

Команда Путь
hierarchyEntities_restoreHierarchyEntityObject Kafka Topic "hierarchyEntities_commands"

GetHierarchyEntityObject

На входе ID объекта иерархий

"hierarchyEntityId"

На выходе атрибуты объекта иерархий

{
  "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
  "hierarchyEntityId": "HierarchyEntityId",
  "parentId": "72602ae9-66ab-4065-8305-d374ff14a4bf",
  "data": {
    "title": "objectTitle",
    "objectNumber": 3
  },
  "created": 1664292962695,
  "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
  "modified": 1664292962695,
  "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
  "removed": false,
  "version": 2
}

Получение объекта иерархий.

Команда Путь
hierarchyEntities_getHierarchyEntityObject HTTP POST "/v1/hierarchy-entity-object/get"

ListHierarchyEntityObjects

На входе параметры поиска, сортировки и пагинации (Search) Возможна фильтрация и сортировка по полям data. Для строковых значений префикс data (Например "data.someInfo.info) Для числовых значений префикс dataNumber (Например "dataNumber.someInfo.numberInfo)

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

На выходе список объектов иерархий и их общее количество

{
  "items": [
    {
      "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
      "hierarchyEntityId": "HierarchyEntityId",
      "parentId": "72602ae9-66ab-4065-8305-d374ff14a4bf",
      "data": {
        "title": "objectTitle",
        "objectNumber": 3
      },
      "created": 1664292962695,
      "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
      "modified": 1664292962695,
      "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
      "removed": false,
      "version": 2
    }
  ],
  "total": 1
}

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

Команда Путь
hierarchyEntities_listHierarchyEntityObjects HTTP POST "/v1/hierarchy-entity-object/list"

ListHierarchy

На входе параметры поиска, сортировки и пагинации (Search), параметр expandTree и опциональный parentId Пагинация влияет только на самый верхний уровень вложенности (parentId = null) Возможна фильтрация и сортировка по полям data. Для строковых значений префикс data (Например "data.someInfo.info) Для числовых значений префикс dataNumber (Например "dataNumber.someInfo.numberInfo)

Если expandTree = false поле children у объектов всегда = null, в остальных случаях это список вложенных объектов

Payload для команды

{
  "search": {
    "query": "data.title",
    "context": {
      "data.title": "ts asd:*"
    },
    "sorting": {
      "fieldName": "title",
      "order": "desc"
    },
    "paging": {
      "page": 1,
      "count": 10
    }
  },
  "expandTree": false,
  "parentId": null
}

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

Сценарии работы Фильтрация с expandTree = false, parentId = null На выходе список верхне уровневых объектов, которые хранят попавшие под фильтр сущности на нижних уровнях, или сами попадают под фильтр.

{
  "items": [
    {
      "entityObject": {
        "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "hierarchyEntityId": "HierarchyEntityId",
        "parentId": null,
        "data": {
          "title": "objectTitle",
          "objectNumber": 3
        },
        "created": 1664292962695,
        "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "modified": 1664292962695,
        "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "removed": false,
        "version": 2
      },
      "isMatched": false,
      "childrenCount": 10,
      "children": null
    }
  ],
  "total": 1
}

Фильтрация с expandTree = false, parentId != null На выходе список объектов у которых родитель = parentId, которые хранят попавшие под фильтр сущности на нижних уровнях, или сами попадают под фильтр.

{
  "items": [
    {
      "entityObject": {
        "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "hierarchyEntityId": "HierarchyEntityId",
        "parentId": "72602ae9-66ab-4065-8305-d374ff14a4bf",
        "data": {
          "title": "objectTitle",
          "objectNumber": 3
        },
        "created": 1664292962695,
        "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "modified": 1664292962695,
        "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "removed": false,
        "version": 2
      },
      "isMatched": true,
      "childrenCount": 0,
      "children": null
    }
  ],
  "total": 1
}

Фильтрация с expandTree = true, parentId можно не указывать, так как дерево будет раскрыто полностью На выходе список объектов от верхнего уровня с иерархичной вложенностью до объекта, который попадает под фильтр

{
  "items": [
    {
      "entityObject": {
        "id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "hierarchyEntityId": "HierarchyEntityId",
        "parentId": null,
        "data": {
          "title": "objectTitle",
          "objectNumber": 3
        },
        "created": 1664292962695,
        "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "modified": 1664292962695,
        "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
        "removed": false,
        "version": 2
      },
      "isMatched": false,
      "childrenCount": 1,
      "children": [
        {
          "entityObject": {
            "id": "72602ae9-66ab-4065-8305-d374ff14a4bf",
            "hierarchyEntityId": "HierarchyEntityId",
            "parentId": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
            "data": {
              "title": "objectTitle",
              "objectNumber": 3
            },
            "created": 1664292962695,
            "createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
            "modified": 1664292962695,
            "modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
            "removed": false,
            "version": 2
          },
          "isMatched": true,
          "childrenCount": 0,
          "children": []
        }
      ]
    }
  ],
  "total": 1
}

Пример автоматически изменённого payload при регистрации события выполнения команды через sendCommandEvent

{
  "items": [
    "the output is cut off"
  ],
  "total": 13689
}

Получение списка объектов иерархий с поиском, сортировкой и пагинацией. Отправка событий по этой команде была переопределена, в частости массив items больше не содержит данных узлов иерархии, внутри него текстовое уведомление, сообщающее, что данные урезаны.

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

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

Поле Виды фильтров
hierarchyEntityId InSetQuery, LikeQuery, TsQuery
parentId InSetQuery
data.* InSetQuery, LikeQuery, TsQuery
externalType InSetQuery
externalEntityType InSetQuery
externalId InSetQuery

Объекты сервиса hierarchy-entities

HierarchyEntity

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

HierarchyEntityCreateDTO

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

HierarchyEntityUpdateDTO

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

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 изменившего запись пользователя
removed Boolean да признак удаления
version Integer да версия для оптимистичной блокировки

HierarchyEntityObjectCreateDTO

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

HierarchyEntityObjectBatchCreateDto

Поле Тип Обязательное Описание
batch HierarchyEntityObjectCreateDTO[] да входные данные для создания объектов иерархии

HierarchyEntityObjectUpdateDTO

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

HierarchyEntityObjectExtendedDTO

Поле Тип Обязательное Описание
entityObject HierarchyEntityObject да Сущность иерархий
isMatched boolean да Попадает ли объект под фильтр
childrenCount Integer да Количество дочерних объектов на следующем уровне
children HierarchyEntityObjectExtendedDTO[] нет Дочерние объекты

HierarchySearch

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

ExternalEntityTypes

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

StoredFile

Информация о файле

Поле Тип Обязательное Описание
id string да ID файла
path string да Путь по папкам до файла внутри бакета
bucket string да Бакет для хранения файла

Rag-chat: сервис для чата

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

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

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

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

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

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

RAG_CHAT_DB_HOST=localhost RAG_CHAT_DB_PORT=5432 RAG_CHAT_DB_NAME=rag-chat_db RAG_CHAT_DB_USER=postgres RAG_CHAT_DB_PASSWORD=12345 sbt boot/run

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

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

Переменная Тип Обязательная Значение по умолчанию Описание
RAG_CHAT_HTTP_HOST string нет 0.0.0.0 Хост, на котором слушает HTTP-сервер
RAG_CHAT_HTTP_PORT int нет 8999 Порт, на котором слушает HTTP-сервер
RAG_CHAT_KAFKA_SERVERS string да localhost:9092 Адрес Kafka
RAG_CHAT_KAFKA_TOPIC string нет rag_chat_commands Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
RAG_CHAT_KAFKA_CONSUMER_GROUP string нет rag_chat_consumer_group Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
RAG_CHAT_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
RAG_CHAT_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
RAG_CHAT_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
RAG_CHAT_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
RAG_CHAT_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах RAG_CHAT_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
RAG_CHAT_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который RAG_CHAT_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
RAG_CHAT_KAFKA_COMMANDEVENT_TOPIC string да commandevents Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
RAG_CHAT_KAFKA_AUTH_USER string нет Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
RAG_CHAT_KAFKA_AUTH_PASSWORD string нет Пароль учетной записи Kafka.
RAG_CHAT_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
RAG_CHAT_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет Пароль к хранилищу сертификатов.
RAG_CHAT_KAFKA_AUTH_MODE string нет Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
RAG_CHAT_KAFKA_AUTH_CONFIG string нет Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]
RAG_CHAT_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
RAG_CHAT_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
RAG_CHAT_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL duration string нет 4 minutes Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом.
RAG_CHAT_KAFKA_CONNECTION_CHECK_INTERVAL duration string нет 60 seconds Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений.
RAG_CHAT_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL duration string нет 5 minutes Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным.
RAG_CHAT_CONSUL_ADDR url string нет http://localhost:8500 Адрес Сonsul.
RAG_CHAT_CONSUL_AUTH_USER string нет Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
RAG_CHAT_CONSUL_AUTH_PASSWORD string нет Пароль учетной записи Сonsul.
RAG_CHAT_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
RAG_CHAT_DISCOVERABLE_ID string нет another_RAG_CHAT_service_instance ID сервиса в ServiceDiscovery
RAG_CHAT_DISCOVERABLE_NAME string нет rag-chat Имя сервиса в ServiceDiscovery
RAG_CHAT_DISCOVERABLE_HOST string да localhost Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
RAG_CHAT_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
RAG_CHAT_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
RAG_CHAT_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
RAG_CHAT_SERVICE_TITLE string нет Rag-chat Название сервиса для отображения
RAG_CHAT_SERVICE_DESCRIPTION string нет Service RAG_CHAT Описание сервиса для отображения
RAG_CHAT_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
RAG_CHAT_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
RAG_CHAT_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
RAG_CHAT_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
RAG_CHAT_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
RAG_CHAT_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
RAG_CHAT_DB_HOST string да Хост БД
RAG_CHAT_DB_PORT int да Порт БД
RAG_CHAT_DB_NAME string да Имя базы в БД
RAG_CHAT_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
RAG_CHAT_DB_USER string да Пользователь БД
RAG_CHAT_DB_PASSWORD string да Пароль пользователя БД
RAG_CHAT_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
RAG_CHAT_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
RAG_CHAT_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
RAG_CHAT_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
RAG_CHAT_DB_ISOLATION string нет READ_COMMITTED Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
RAG_CHAT_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
RAG_CHAT_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
RAG_CHAT_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
RAG_CHAT_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
RAG_CHAT_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
RAG_CHAT_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
RAG_CHAT_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
RAG_CHAT_DB_CONNECTION_TEST_QUERY string нет SELECT 1 Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
RAG_CHAT_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
RAG_CHAT_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
RAG_CHAT_DB_SCHEMA string нет public Устанавливает schema по умолчанию
RAG_CHAT_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
RAG_CHAT_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
RAG_CHAT_AUTHZFORCE_ADDR string нет http://localhost:8080/authzforce-ce Адрес AuthZforce server
RAG_CHAT_AUTHZFORCE_DOMAIN string нет Доступный DomainID в AuthZforce server
RAG_CHAT_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
RAG_CHAT_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
RAG_CHAT_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
RAG_CHAT_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
RAG_CHAT_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
RAG_CHAT_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
RAG_CHAT_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
RAG_CHAT_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
RAG_CHAT_LOG_LEVEL_HTTP_SERVER string нет WARN Уровень логирования HTTP-сервера
RAG_CHAT_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
RAG_CHAT_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
RAG_CHAT_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
RAG_CHAT_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
RAG_CHAT_LOG_OUTPUT string нет STDOUT Вывод лога
RAG_CHAT_SYSLOG_TYPE string нет UDP Тип передачи syslog
RAG_CHAT_LOGGING_SRC_IP string нет для параметра src в логах
RAG_CHAT_LOGGING_SRC_HOST string нет для параметра shost в логах
RAG_CHAT_LOGGING_DST_IP string нет для параметра dst в логах
RAG_CHAT_LOGGING_CEF_VER string нет 0 версия CEF
RAG_CHAT_HTTP_RESPONSE_TIMEOUT duration string нет 30 seconds Максимальное время ожидания запроса для сервиса
RAG_CHAT_HTTP_IDLE_TIMEOUT duration string нет 31 seconds Максимальное время простоя при ожидании ответа для сервиса
RAG_CHAT_HTTP_CLIENT_CONNECTION_TIMEOUT duration string нет 5 seconds Максимальное время ожидания подключения http клиента
RAG_CHAT_HTTP_CLIENT_REQUEST_TIMEOUT duration string нет 5 seconds Максимальное время ожидания ответа для http клиента
RAG_CHAT_HTTP_CLIENT_IDLE_TIMEOUT duration string нет 6 seconds Максимальное время простоя при ожидании ответа для http клиента (должно быть равным или меньше RAG_CHAT_HTTP_CLIENT_REQUEST_TIMEOUT)
RAG_CHAT_RAG_ENGINE_SERVICE_URL string нет http://127.0.0.1:3000/ Путь к сервису генерации RAG
RAG_CHAT_RAG_INDEXATION_SERVICE_URL string нет http://127.0.0.1:3000/ Путь к сервису индексации RAG
RAG_CHAT_FS_URI string да http://localhost:9000/ Адрес файлового хранилища
RAG_CHAT_FS_ACCESS_KEY_ID string да minioadmin Имя пользователя файлового хранилища
RAG_CHAT_FS_SECRET_ACCESS_KEY string да minioadmin Пароль пользователя файлового хранилища
RAG_CHAT_FS_UPLOAD_PARALLELISM int нет 4 Параллелизм для загрузки файлов
RAG_CHAT_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
RAG_CHAT_FS_AUTH_CONFIG string нет Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
RAG_CHAT_FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
RAG_CHAT_FS_CACHE_TTL duration string нет Время жизни клиента в кеше
RAG_CHAT_INDEXATION_PROGRESS_TOPIC string Нет progress Топик, в который плагин пишет об окончании обработки.
RAG_CHAT_INDEXATION_CONSUMER_TOPIC string Нет ragChatPluginIndexation Основной топик плагина, в который поступает StepProgress на обработку.
RAG_CHAT_INDEXATION_CONSUMER_GROUP string Нет rag_chat_consumer_group Имя группы-консьюмеров плагина индексации документов в RAG.
RAG_CHAT_INDEXATION_CONSUMER_TOPIC_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
RAG_CHAT_INDEXATION_PLUGIN_INFO_READABLE_NAME string Нет Плагин для индексации текста документа в RAG Значение в поле name у тех. константы плагина.
RAG_CHAT_INDEXATION_PLUGIN_INFO_DESCRIPTION string Нет Передает тесты документов в indexation-service системы RAG Значение в поле description у тех. константы плагина.
RAG_CHAT_INDEXATION_PLUGIN_INFO_VERSION int Нет 1 Значение в поле serviceVersion у тех. константы плагина.
RAG_CHAT_LAMP_HOST string Нет router20 Хост LAMP сервиса router
RAG_CHAT_LAMP_PORT int Нет 9000 Порт LAMP сервиса router
RAG_CHAT_LAMP_TLS boolean Нет false Признак защищенного подключения к LAMP
RAG_CHAT_UPLOAD_DOCS_KEY string Нет ragChatFullText Ключ для additional в таблице ObjectFile, куда запишется url файла txt с содержимым fulltext
RAG_CHAT_UPLOAD_DOCS_DATAMODEL_TEMP_BUCKET string Нет temp Название temp бакета на стенде
RAG_CHAT_UPLOAD_DOCS_DATAMODEL_BUCKET string Нет datamodel Название datamodel бакета на стенде
RAG_CHAT_UPLOAD_DOCS_ENTITY_TYPE string Нет RagChatDoc EntityType datamodel, который создается при запуске rag-chat, и куда добавляются файлы
RAG_CHAT_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
RAG_CHAT_JOURNAL_TOPIC string да, если переменная EXPORTER_JOURNAL_MODE = WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.

Список команд сервиса Rag-chat

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

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

RagGenerate

Генерация ответа на основе пользовательского запроса из сервиса RAG.

Команда Путь
ragchat_http_RagGenerate HTTP POST "/ragchat_http_RagGenerate"

Payload для команды

{
  "sessionId": "00001111-2222-3333-4444-555566676777",
  "userQuery": "Почему небо синее?",
  "docIds": [
    "2345670987",
    "1235987"
  ],
  "useDatabase": true
}

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

{
  "sessionId": "00001111-2222-3333-4444-555566676777",
  "answers": [
    {
      "responseMessageId": "7014e7d9-8463-4923-a2c7-7aeb15b41b57",
      "content": "потому-что"
    }
  ],
  "sources": [
    {
      "fileIdentity": {
        "fileId": "d2becec0-13d8-4a5f-be46-b6811461944f",
        "entityType": "project",
        "objectId": "696e5b6c-0bcc-41e8-af0d-e575b691c6a3"
      },
      "segments": [
        {
          "start": 67,
          "end": 420
        },
        {
          "start": 175,
          "end": 335
        }
      ]
    },
    {
      "fileIdentity": {
        "fileId": "2ea83b21-3e7c-481d-8a9c-75e572195856",
        "entityType": "document",
        "objectId": "c0154212-2b54-4409-998e-991b96afe321"
      },
      "segments": [
        {
          "start": 332,
          "end": 343
        }
      ]
    },
    {
      "fileIdentity": {
        "fileId": "e3b3fe4b-c15c-4e04-974a-ecc5b06db4ea",
        "entityType": "note",
        "objectId": "d0ccd5c7-f9a2-485f-bd65-2c12b968f8ac"
      },
      "segments": [
        {
          "start": 383,
          "end": 421
        },
        {
          "start": 243,
          "end": 243
        }
      ]
    }
  ]
}

RagSetOptions

Запрос для получения доступных опций обратной связи для пользователя.

Команда Путь
ragchat_http_SetOptions HTTP POST "/ragchat_http_SetOptions"

Payload для команды

{
  "query": "likeOption",
  "context": {
    "likeOption": "true"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

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

{
  "items": [
    {
      "optionId": "61ff3b41-8124-4213-84c9-f40d1faa687b",
      "optionName": "Ответ неточный"
    },
    {
      "optionId": "5afce936-6bda-4f8f-ac73-850a37236cd3",
      "optionName": "Ответ неполный"
    }
  ],
  "total": 2
} 

RagListChats

Получение списка чатов.

Команда Путь
ragchat_http_ListChats HTTP POST "/ragchat_http_ListChats"

Payload для команды

{
  "query": "",
  "context": {},
  "paging": {
    "page": 1,
    "count": 10
  }
}

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

{
  "items": [
    {
      "sessionId": "00001111-2222-3333-4444-555566676777",
      "chatName": "Открытие ИП",
      "modifiedAt": "2025-07-01T10:00:00Z"
    },
    {
      "sessionId": "00001111-2222-3333-4444-555566676778",
      "chatName": "Налоги для ИП",
      "modifiedAt": "2025-07-03T12:30:00Z"
    }
  ],
  "total": 2
}

RagApplyMessage

Пользователь выбирает наиболее релевантный ответ из двух сгенерированных LLM. Инфо о фидбэке необходимо сохранить в БД для того, чтобы потом переиспользовать в дообучении/кастомизации LLM.

Команда Путь
ragchat_http_ApplyMessage HTTP POST "/ragchat_http_ApplyMessage"

Payload для команды

{
  "acceptedResponseMessageId": "cf274b47-857c-40f4-9bc8-6e63baf2d274",
  "rejectedResponseMessageId": "a166c9b0-f5c3-40e7-a3ec-fecdc92e8671"
} 

RagListChatsMetadata

Запрос возвращает метаданные по пользовательским диалогам

Команда Путь
ragchat_http_ListChatsMetadata HTTP POST "/ragchat_http_ListChatsMetadata"

Payload для команды

{
  "query": "",
  "context": {},
  "paging": {
    "page": 1,
    "count": 10
  }
}

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

{
  "items": [
    {
      "userId": "b98b499e-d770-4956-8759-f0b98f4320e2",
      "session": {
        "sessionId": "ebe6f7a7-fbc0-4320-a8b4-49157a959a37",
        "createdAt": 1776293165390,
        "chatName": "Налоги для ИП",
        "modifiedAt": 1756293165390,
        "questionCount": 100
      }
    },
    {
      "userId": "11d7de4c-336e-4775-be54-392fe59dd8d2",
      "session": {
        "sessionId": "3a5ea377-9ecf-4738-a65f-5feaa0733dd7",
        "createdAt": 1786293165390,
        "chatName": "Уголовная ответственность",
        "modifiedAt": 1756293165390,
        "questionCount": 34
      }
    }
  ],
  "total": 2
} 

RagListQueries

Получение истории отдельного чата. Для получения истории конкретного чата в запросе в "query" и в "context" указывается ключ сессии (чата) "sessionId" и ее идентификатор "00001111-2222-3333-4444-555566676778".

Команда Путь
ragchat_http_ListQueries HTTP POST "/ragchat_http_ListQueries"

Payload для команды

{
  "query": "sessionId",
  "context": {
    "sessionId": "00001111-2222-3333-4444-555566676778"
  },
  "paging": {
    "page": 1,
    "count": 20
  }
}

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

{
  "items": [
    {
      "role": "user",
      "content": "Как открыть ИП?",
      "sources": []
    },
    {
      "role": "bot",
      "content": "Вам нужно подать заявление в налоговую службу...",
      "sources": [
        {
          "fileIdentity": {
            "fileId": "abc123",
            "entityType": "document",
            "objectId": "xyz456"
          },
          "segments": [
            {
              "start": 25,
              "end": 56
            },
            {
              "start": 70,
              "end": 85
            }
          ]
        }
      ]
    }
  ],
  "total": 1
}

RagUploadDocs

  1. команда берет каждый документ из бакета temp и через команду saveObjectBatchV2 добавляет их в entityType как объекты
  2. по каждому документу в датамодел бакете получаем данные из s3 (задается переменной RAG_CHAT_UPLOAD_DOCS_TEMP_BUCKET) и отправляем содержимое документа в сервис lamp, используя роут Extraction, в итоге получаем fulltext. После создаем для документа файл в бакете temp (задается переменной RAG_CHAT_UPLOAD_DOCS_DATAMODEL_TEMP_BUCKET), содержимое которого - fulltext.
  3. после этого мы вызываем команду saveFilesAdditionalInfoV2 в Data-model, чтобы добавить файл в поле key (задается переменной RAG_CHAT_UPLOAD_DOCS_KEY) и скопировать файл из temp в бакет datamodel, в итоге там должно быть 2 файла - изначальный и файл с содержимым fulltext из lamp сервиса.
  4. после этого добавляем fulltext в dto, добавляем файлы после saveObjectBatchV2 (туда добавили в поле additionalData нужные файлы с fulltext), и пересылаем его в rag-сервис, возвращаем ответ
Команда Путь
ragchat_http_UploadDocs HTTP POST "/ragchat_http_UploadDocs"

Payload для команды

{
  "sessionId": "dff63c66-821a-4185-addd-7d2618419d3c",
  "fileIds": [
    "d5b44cfe-0eff-4c93-bbdd-8e61d3fa9a68",
    "17837a03-6689-492c-a720-102d7bb3e0b7"
  ]
}

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

{
  "sessionId": "00001111-2222-3333-4444-555566676778"
}

RagSetChatName

Изменение названия чата.

Команда Путь
ragchat_http_SetChatName HTTP POST "/ragchat_http_SetChatName"

Payload для команды

{
  "sessionId": "00001111-2222-3333-4444-555566676777",
  "chatName": "newChatName"
}

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

"newChatName"

RagSetFeedback

Пользователь ставит ответу LLM бинарную оценку (лайк/дизлайк). Инфо о фидбэке необходимо сохранить в БД для того, чтобы потом переиспользовать в дообучении/кастомизации LLM.

Команда Путь
ragchat_http_SetFeedback HTTP POST "/ragchat_http_SetFeedback"

Payload для команды

{
  "responseMessageId": "1f71723d-7522-4667-bfdd-4878ab424016",
  "likeOption": true,
  "commentOptions": [
    {
      "optionId": "eebb54af-49f8-4b68-af56-cfc1aea4839c"
    },
    {
      "optionId": "96a1611a-6bae-4864-a4dc-a9b6f34a06c1"
    }
  ],
  "comment": "Доработайте ваш RAG, пожалуйста."
}

RagDeleteChat

Пользователь удаляет выбранный чат.

Команда Путь
ragchat_http_DeleteChat HTTP POST "/ragchat_http_DeleteChat"

Payload для команды

{
  "sessionId": "cf274b47-857c-40f4-9bc8-6e63baf2d274"
} 

RagGenerateRequest

Поле Тип Обязательное Описание
sessionId UUID нет ID сессии чата (можно передавать null или не передавать)
userQuery String да Запрос пользователя
docIds String[] да ID документов, которые загрузил пользователь
useDatabase Boolean нет False - искать только по загруженному документу. True - искать по документу и также по БД (по дефолту)

RagGenerateResponse

Поле Тип Обязательное Описание
sessionId String нет ID сессии пользователя
answers RagAnswersDto[] да Сгенерированный LLM ответ
sources RagSourceDto[] да Источники, на которые ссылалась модель при генерации ответа

RagAnswersDto

Поле Тип Обязательное Описание
responseMessageId String да ID ответа LLM в чате
content String да Сгенерированный LLM ответ

RagSourceDto

Поле Тип Обязательное Описание
fileIdentity FileIdentity да Идентификация файла
segments RagSegmentDto[] да Сегменты, которые нужно подсветить на фронте

FileIdentity

Поле Тип Обязательное Описание
fileId String да ID файла
entityType String да Наименование типа объекта
objectId String да ID объекта

RagSegmentDto

Поле Тип Обязательное Описание
start Int да Начало спана для сегмента
end Int да Конец спана для сегмента

RagChatDto

Поле Тип Обязательное Описание
sessionId String да ID сессии пользователя
chatName String да Наименование чата
modifiedAt Timestamp да Дата и время последнего изменения

RagMessageDto

Поле Тип Обязательное Описание
role String да Роль участника сообщения: "user" — пользователь, "bot" — ответы LLM
content String да Конкретное сообщение в текстовом виде
sources RagSourceDto[] да Источники, на которые ссылалась модель при генерации ответа

ListChatsMetadataDto

Поле Тип Обязательное Описание
userId String да ID сессии пользователя
session SessionMetadata да Метаинформация сессии

SessionMetadata

Поле Тип Обязательное Описание
sessionId String да ID сессии пользователя
createdAt Timestamp да Дата и время создания сессии чата
chatName String да Наименование чата
modifiedAt Timestamp да Дата и время последнего изменения чата
questionCount Int да Количество вопросов, заданных пользователем в рамках текущей сессии.

RagSetChatNameDto

Поле Тип Обязательное Описание
sessionId String да ID сессии пользователя
chatName VarChar64 (String) да Наименование чата (ограничено 64 символами)

RagApplyMessageDto

Поле Тип Обязательное Описание
acceptedResponseMessageId UUID да ID принятого ответа
rejectedResponseMessageId UUID да ID отклоненного ответа

RagUploadDocsDto

Поле Тип Обязательное Описание
sessionId String нет ID сессии пользователя
fileIds [UUID[]] да Загруженные документы (из temp)

RagUploadDocsResponse

Поле Тип Обязательное Описание
sessionId String да ID сессии пользователя

RagSetOptionsResponse

Поле Тип Обязательное Описание
items RagSetOptionsItem[] да Опции, которые может выбрать пользователь для обратной связи на ответ системы
total String да Общее количество опций в БД

RagSetOptionsItem

Поле Тип Обязательное Описание
optionId UUID да ID опции
optionName String да Название опции

RagSetFeedbackRequest

Поле Тип Обязательное Описание
responseMessageId UUID да ID ответа LLM, на которую дал оценку пользователь
likeOption Boolean да Обратная связь пользователя
commentOptions [CommentOption[]] нет Массив объектов, в котором передаются выбранные пользователем опции обратной связи
comment String нет Комментарий, который оставил пользователь о качестве ответа модели

CommentOption

Поле Тип Обязательное Описание
optionId UUID да ID конкретной опции обратной связи, которую выбрал пользователь

RagDeleteChatDto

Поле Тип Обязательное Описание
sessionId String да ID сессии чата

Split-plugin: сервис для чата

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

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

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

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

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

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

SPLIT_PLUGIN_DB_HOST=localhost SPLIT_PLUGIN_DB_PORT=5432 SPLIT_PLUGIN_DB_NAME=split-plugin SPLIT_PLUGIN_DB_USER=postgres SPLIT_PLUGIN_DB_PASSWORD=12345 sbt boot/run

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

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

Переменная Тип Обязательная Значение по умолчанию Описание
SPLIT_PLUGIN_HTTP_HOST string нет 0.0.0.0 Хост, на котором слушает HTTP-сервер
SPLIT_PLUGIN_HTTP_PORT int нет 8999 Порт, на котором слушает HTTP-сервер
SPLIT_PLUGIN_KAFKA_SERVERS string да localhost:9092 Адрес Kafka
SPLIT_PLUGIN_KAFKA_TOPIC string нет split_plugin_commands Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
SPLIT_PLUGIN_KAFKA_CONSUMER_GROUP string нет split_plugin_consumer_group Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
SPLIT_PLUGIN_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который SPLIT_PLUGIN_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
SPLIT_PLUGIN_KAFKA_COMMANDEVENT_TOPIC string да commandevents Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
SPLIT_PLUGIN_KAFKA_AUTH_USER string нет Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
SPLIT_PLUGIN_KAFKA_AUTH_PASSWORD string нет Пароль учетной записи Kafka.
SPLIT_PLUGIN_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
SPLIT_PLUGIN_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет Пароль к хранилищу сертификатов.
SPLIT_PLUGIN_KAFKA_AUTH_MODE string нет Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
SPLIT_PLUGIN_KAFKA_AUTH_CONFIG string нет Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]
SPLIT_PLUGIN_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
SPLIT_PLUGIN_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
SPLIT_PLUGIN_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL duration string нет 4 minutes Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом.
SPLIT_PLUGIN_KAFKA_CONNECTION_CHECK_INTERVAL duration string нет 60 seconds Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений.
SPLIT_PLUGIN_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL duration string нет 5 minutes Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным.
SPLIT_PLUGIN_CONSUL_ADDR url string нет http://localhost:8500 Адрес Сonsul.
SPLIT_PLUGIN_CONSUL_AUTH_USER string нет Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
SPLIT_PLUGIN_CONSUL_AUTH_PASSWORD string нет Пароль учетной записи Сonsul.
SPLIT_PLUGIN_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
SPLIT_PLUGIN_DISCOVERABLE_ID string нет another_SPLIT_PLUGIN_service_instance ID сервиса в ServiceDiscovery
SPLIT_PLUGIN_DISCOVERABLE_NAME string нет split-plugin Имя сервиса в ServiceDiscovery
SPLIT_PLUGIN_DISCOVERABLE_HOST string да localhost Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
SPLIT_PLUGIN_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
SPLIT_PLUGIN_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
SPLIT_PLUGIN_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
SPLIT_PLUGIN_SERVICE_TITLE string нет Split-plugin Название сервиса для отображения
SPLIT_PLUGIN_SERVICE_DESCRIPTION string нет Service split-plugin Описание сервиса для отображения
SPLIT_PLUGIN_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
SPLIT_PLUGIN_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
SPLIT_PLUGIN_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
SPLIT_PLUGIN_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
SPLIT_PLUGIN_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
SPLIT_PLUGIN_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
SPLIT_PLUGIN_DB_HOST string да Хост БД
SPLIT_PLUGIN_DB_PORT int да Порт БД
SPLIT_PLUGIN_DB_NAME string да Имя базы в БД
SPLIT_PLUGIN_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
SPLIT_PLUGIN_DB_USER string да Пользователь БД
SPLIT_PLUGIN_DB_PASSWORD string да Пароль пользователя БД
SPLIT_PLUGIN_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
SPLIT_PLUGIN_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
SPLIT_PLUGIN_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
SPLIT_PLUGIN_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
SPLIT_PLUGIN_DB_ISOLATION string нет READ_COMMITTED Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
SPLIT_PLUGIN_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
SPLIT_PLUGIN_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
SPLIT_PLUGIN_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
SPLIT_PLUGIN_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
SPLIT_PLUGIN_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
SPLIT_PLUGIN_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
SPLIT_PLUGIN_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
SPLIT_PLUGIN_DB_CONNECTION_TEST_QUERY string нет SELECT 1 Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
SPLIT_PLUGIN_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
SPLIT_PLUGIN_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
SPLIT_PLUGIN_DB_SCHEMA string нет public Устанавливает schema по умолчанию
SPLIT_PLUGIN_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
SPLIT_PLUGIN_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
SPLIT_PLUGIN_AUTHZFORCE_ADDR string нет http://localhost:8080/authzforce-ce Адрес AuthZforce server
SPLIT_PLUGIN_AUTHZFORCE_DOMAIN string нет Доступный DomainID в AuthZforce server
SPLIT_PLUGIN_AUTHZFORCE_AUTHORIZER_KIND string нет oberto Вид авторизатора, который используется в сервисе. Допустимые значения: authzforce, oberto. При указании неизвестного значения будет использовано значение по-умолчанию.
SPLIT_PLUGIN_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
SPLIT_PLUGIN_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
SPLIT_PLUGIN_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
SPLIT_PLUGIN_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
SPLIT_PLUGIN_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
SPLIT_PLUGIN_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
SPLIT_PLUGIN_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
SPLIT_PLUGIN_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
SPLIT_PLUGIN_LOG_LEVEL_HTTP_SERVER string нет WARN Уровень логирования HTTP-сервера
SPLIT_PLUGIN_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
SPLIT_PLUGIN_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
SPLIT_PLUGIN_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
SPLIT_PLUGIN_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
SPLIT_PLUGIN_LOG_OUTPUT string нет STDOUT Вывод лога
SPLIT_PLUGIN_SYSLOG_TYPE string нет UDP Тип передачи syslog
SPLIT_PLUGIN_LOGGING_SRC_IP string нет для параметра src в логах
SPLIT_PLUGIN_LOGGING_SRC_HOST string нет для параметра shost в логах
SPLIT_PLUGIN_LOGGING_DST_IP string нет для параметра dst в логах
SPLIT_PLUGIN_LOGGING_CEF_VER string нет 0 версия CEF
SPLIT_PLUGIN_HTTP_CLIENT_CONNECTION_TIMEOUT duration string нет 5 seconds Максимальное время ожидания подключения http клиента
SPLIT_PLUGIN_HTTP_CLIENT_REQUEST_TIMEOUT duration string нет 5 seconds Максимальное время ожидания ответа для http клиента
SPLIT_PLUGIN_SPLIT_SERVICE_URL string нет http://127.0.0.1:3000/ Путь к сервису разделения текста
SPLIT_PLUGIN_FS_URI string да http://localhost:9000/ Адрес файлового хранилища
SPLIT_PLUGIN_FS_ACCESS_KEY_ID string да minioadmin Имя пользователя файлового хранилища
SPLIT_PLUGIN_FS_SECRET_ACCESS_KEY string да minioadmin Пароль пользователя файлового хранилища
SPLIT_PLUGIN_FS_UPLOAD_PARALLELISM int нет 4 Параллелизм для загрузки файлов
SPLIT_PLUGIN_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
SPLIT_PLUGIN_FS_AUTH_CONFIG string нет Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
SPLIT_PLUGIN_FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
SPLIT_PLUGIN_FS_CACHE_TTL duration string нет Время жизни клиента в кеше
SPLIT_PLUGIN_TEXT_SPLITTER_PROGRESS_TOPIC string Нет progress Топик, в который плагин пишет об окончании обработки.
SPLIT_PLUGIN_TEXT_SPLITTER_CONSUMER_TOPIC string Нет splitPlugin Основной топик плагина, в который поступает StepProgress на обработку.
SPLIT_PLUGIN_TEXT_SPLITTER_CONSUMER_GROUP string Нет split_plugin_consumer_group Имя группы-консьюмеров плагина индексации документов в RAG.
SPLIT_PLUGIN_TEXT_SPLITTER_CONSUMER_TOPIC_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
SPLIT_PLUGIN_TEXT_SPLITTER_PLUGIN_INFO_READABLE_NAME string Нет Плагин для индексации текста документа в RAG Значение в поле name у тех. константы плагина.
SPLIT_PLUGIN_TEXT_SPLITTER_PLUGIN_INFO_DESCRIPTION string Нет Передает тесты документов в indexation-service системы RAG Значение в поле description у тех. константы плагина.
SPLIT_PLUGIN_TEXT_SPLITTER_PLUGIN_INFO_VERSION int Нет 1 Значение в поле serviceVersion у тех. константы плагина.
SPLIT_PLUGIN_CREATE_ENTITY_TYPE string Да Код типа сущности, которая будет создана в data-model для каждой статьи
SPLIT_PLUGIN_CREATE_ENTITY_TITLE_FIELD string Нет title Название поля в data-model для хранения заголовка/названия статьи
SPLIT_PLUGIN_CREATE_ENTITY_FILE_FIELD string Нет Название поля в data-model для хранения ссылки на файл статьи в S3
SPLIT_PLUGIN_CREATE_ENTITY_DOC_TYPE string Нет lawbook Тип документа, передаваемый в split-service для выбора корректного алгоритма разделения.
SPLIT_PLUGIN_CREATE_ENTITY_RELATION_FIELD string Нет Название поля в data-model для хранения связи с родительским документом
SPLIT_PLUGIN_CREATE_ENTITY_START_FIELD string Нет Название поля в data-model для хранения начальной позиции сегмента в исходном документе.
SPLIT_PLUGIN_CREATE_ENTITY_END_FIELD string Нет Название поля в data-model для хранения конечной позиции сегмента в исходном документе.
SPLIT_PLUGIN_CREATE_ENTITY_PARALLELISM int Нет 4 Количество потоков одновременно пишущих в сервис data-model
SPLIT_PLUGIN_CREATE_MESSAGE_LIMIT string Да 2000 Количество объектов в пачке сохраняемой в data-model, которое мы можем отправить за раз. Ограничено сверху максимальным размером сообщения kafka
SPLIT_PLUGIN_TEMP_BUCKET string Да Bucket для временных файлов
SPLIT_PLUGIN_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
SPLIT_PLUGIN_JOURNAL_TOPIC string да, если переменная WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.

Список команд сервиса Split-plugin

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

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

RagGenerate

Генерация ответа на основе пользовательского запроса из сервиса RAG.

Команда Путь
splitplugin_http_RagGenerate HTTP POST "/splitplugin_http_RagGenerate"

Payload для команды

{
  "sessionId": "00001111-2222-3333-4444-555566676777",
  "userQuery": "Почему небо синее?",
  "docIds": [
    "2345670987",
    "1235987"
  ],
  "searchOption": true
}

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

{
  "answer": "потому-что",
  "sources": [
    {
      "fileIdentity": {
        "fileId": "d2becec0-13d8-4a5f-be46-b6811461944f",
        "entityType": "project",
        "objectId": "696e5b6c-0bcc-41e8-af0d-e575b691c6a3"
      },
      "segments": [
        {
          "start": 67,
          "end": 420
        },
        {
          "start": 175,
          "end": 335
        }
      ]
    },
    {
      "fileIdentity": {
        "fileId": "2ea83b21-3e7c-481d-8a9c-75e572195856",
        "entityType": "document",
        "objectId": "c0154212-2b54-4409-998e-991b96afe321"
      },
      "segments": [
        {
          "start": 332,
          "end": 343
        }
      ]
    },
    {
      "fileIdentity": {
        "fileId": "e3b3fe4b-c15c-4e04-974a-ecc5b06db4ea",
        "entityType": "note",
        "objectId": "d0ccd5c7-f9a2-485f-bd65-2c12b968f8ac"
      },
      "segments": [
        {
          "start": 383,
          "end": 421
        },
        {
          "start": 243,
          "end": 243
        }
      ]
    }
  ]
}

RagGenerateRequest

Поле Тип Обязательное Описание
sessionId UUID да ID сессии чата
userQuery String да Запрос пользователя
docIds String[] да ID документов, которые загрузил пользователь
searchOption Boolean нет False - искать только по загруженному документу. True - искать по документу и также по БД (по дефолту)

RagGenerateResponse

Поле Тип Обязательное Описание
answer String да Сгенерированный LLM ответ
sources Source[] да Источники, на которые ссылалась модель при генерации ответа

Source

Поле Тип Обязательное Описание
fileIdentity FileIdentity да Идентификация файла
segments Segment[] да Сегменты, которые нужно подсветить на фронте

FileIdentity

Поле Тип Обязательное Описание
fileId String да ID файла
entityType String да Наименование типа объекта
objectId String да ID объекта

Segment

Поле Тип Обязательное Описание
start Int да Начало спана для сегмента
end Int да Конец спана для сегмента

Tolka: сервис аналитики

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

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

Optimistic Lock

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

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

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

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

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

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

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

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

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

Команда Внешние сервисы
tolka_BuildRelatednessAnalytics full-text-search
tolka_BuildRelatednessSummary full-text-search
tolka_BuildRelatednessWidgetData data-model, full-text-search
tolka_BuildSimilaritySummary full-text-search
tolka_CreateWidget data-model, full-text-search (при создании виджета типа BarChart)
tolka_UpdateWidget data-model, full-text-search (при создании виджета типа BarChart)

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

TOLKA_DB_HOST=localhost TOLKA_DB_PORT=5432 TOLKA_DB_NAME=tolka_db TOLKA_DB_USER=postgres TOLKA_DB_PASSWORD=12345 sbt boot/run

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

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

Переменная Тип Обязательная Значение по умолчанию Описание
TOLKA_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
TOLKA_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
TOLKA_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
TOLKA_KAFKA_TOPIC string нет "tolka_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
TOLKA_KAFKA_CONSUMER_GROUP string нет "tolka_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
TOLKA_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
TOLKA_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
TOLKA_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
TOLKA_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Коэффициент величины дополнительной случайной задержки(jitter) относительно основной задержки (При значении 0.2 задержка может быть до 20% больше, чем при 0). Если после умножения задержки на TOLKA_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR получится меньше 1 миллисекунды, то jitter будет приравнен к нулю.
TOLKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS int нет 2 Максимальное количество раз, которое консьюмер перезапустится с неизменной очередью сообщений(в пределах DATA_MODEL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN), прежде чем проигнорировать сообщение, на котором происходит ошибка (Указано количество рестартов, а не прочтений. Если TOLKA_KAFKA_CONSUMER_RESTART_MAX_RESTARTS = 2, то ошибочное сообщение будет обработано 3 раза, после чего произойдет 3ий рестарт и оно будет проигнорировано). Если указать 0, то перезапуск произойдет, но сообщение будет обработано только в первый раз, когда произошла ошибка. Если указать значение меньше 0, то перезапуски все равно будут происходить, но игнорирование сообщений, вызывающих ошибку, будет отключено.
TOLKA_CONSUMER_PER_MESSAGE_RESTART_CACHE_SIZE int нет 100 Для каждого сообщения счетчик перепрочтений хранится в кэше. Максимальное количество значений в этом кэше.
TOLKA_CONSUMER_PER_MESSAGE_RESTART_CACHE_TTL duration string нет 5 minutes Для каждого сообщения счетчик перепрочтений хранится в кэше.Максимальное время жизни элемента в этом кэше. В случае отсутствия значения время жизни элемента не будет ограничено.
TOLKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах TOLKA_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN).После превышения этого числа сервис будет объявлен больным. Все рестарты для каждого отдельного сообщения увеличивают и общий счетчик рестартов консьюмера, поэтому при использовании TOLKA_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS нужно указывать TOLKA_KAFKA_CONSUMER_RESTART_MAX_RESTARTS > TOLKA_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS или не указывать TOLKA_KAFKA_CONSUMER_PER_MESSAGE_RESTART_MAX_RESTARTS совсем.
TOLKA_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который TOLKA_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
TOLKA_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
TOLKA_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
TOLKA_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
TOLKA_KAFKA_AUTH_PRINCIPAL string нет "" Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos).
TOLKA_KAFKA_AUTH_KEYTAB_PATH string нет "" Путь до keytab-файла(в случае соединения с kafka через Kerberos).
TOLKA_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет.
TOLKA_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к хранилищу сертификатов.
TOLKA_KAFKA_AUTH_MODE string нет "static" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
TOLKA_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings.
TOLKA_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
TOLKA_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
TOLKA_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL duration string нет 4 minutes Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом.
TOLKA_KAFKA_CONNECTION_CHECK_INTERVAL duration string нет 60 seconds Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений.
TOLKA_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL duration string нет 5 minutes Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным.
TOLKA_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
TOLKA_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
TOLKA_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
TOLKA_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
TOLKA_DISCOVERABLE_ID string нет "another_TOLKA_service_instance" ID сервиса в ServiceDiscovery
TOLKA_DISCOVERABLE_NAME string нет "tolka" Имя сервиса в ServiceDiscovery
TOLKA_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
TOLKA_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
TOLKA_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
TOLKA_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
TOLKA_SERVICE_TITLE string нет "Tolka" Название сервиса для отображения
TOLKA_SERVICE_DESCRIPTION string нет "Сервис аналитики" Описание сервиса для отображения
TOLKA_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
TOLKA_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
TOLKA_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
TOLKA_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
TOLKA_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
TOLKA_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
TOLKA_DB_HOST string да Хост БД
TOLKA_DB_PORT int да Порт БД
TOLKA_DB_NAME string да Имя базы в БД
TOLKA_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
TOLKA_DB_USER string да Пользователь БД
TOLKA_DB_PASSWORD string да Пароль пользователя БД
TOLKA_DB_THREADS int нет 10 Количество потоков в пуле потоков для соединения с БД
TOLKA_DB_QUEUE_SIZE int нет 300 Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей
TOLKA_DB_CONN_MAX int нет 10 Максимальное количество одновременных подключений к БД
TOLKA_DB_CONN_TIMEOUT duration string нет 20 second Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение.
TOLKA_DB_ISOLATION string нет "READ_COMMITTED" Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
TOLKA_DB_READONLY boolean нет false Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции.
TOLKA_DB_CONN_MIN int нет = DB_THREADS Минимальное количество одновременных подключений к БД
TOLKA_DB_VALIDATION_TIMEOUT duration string нет 1 seconds Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение.
TOLKA_DB_IDLE_TIMEOUT duration string нет 10 minutes Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула.
TOLKA_DB_MAX_LIFETIME duration string нет 30 minutes Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы.
TOLKA_DB_INITIALIZATION_FAIL_FAST string нет false Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0.
TOLKA_DB_LEAK_DETECTION_THRESHOLD int нет 0 Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с.
TOLKA_DB_CONNECTION_TEST_QUERY string нет "SELECT 1" Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid().
TOLKA_DB_AUTO_COMMIT boolean нет true Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а.
TOLKA_DB_SCHEMA string нет "public" Устанавливает schema по умолчанию
TOLKA_DB_ISOLATE_INTERNAL_QUERIES boolean нет false Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен.
TOLKA_DB_INITIALIZATION_FAIL_TIMEOUT int нет 1 Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу.
TOLKA_DB_REGISTER_MBEANS boolean нет false Зарегистрированы ли JMX Management Beans («MBeans»)
TOLKA_FS_URI string да http://localhost:9000/ Адрес файлового хранилища
TOLKA_FS_ACCESS_KEY_ID string да minioadmin Имя пользователя файлового хранилища
TOLKA_FS_SECRET_ACCESS_KEY string да minioadmin Пароль пользователя файлового хранилища
TOLKA_FS_UPLOAD_PARALLELISM int нет 4 Параллелизм для загрузки файлов
TOLKA_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
TOLKA_FS_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep
TOLKA_FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
TOLKA_FS_CACHE_TTL duration string нет Время жизни клиента в кеше
TOLKA_FS_RETRY_ATTEMPTS int нет 5 Количество ретраев, которое будет произведено в случае Exception-а в операции FSClient-а и при вычитывании стрима в get операциях FSClient-а.
TOLKA_FS_RETRY_DELAY duration string нет 10 millis Задержка между ретраями операций FSClient-а.
TOLKA_AUTHZFORCE_ADDR string нет "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
TOLKA_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в AuthZforce server
TOLKA_AUTHZFORCE_CONNECT_TIMEOUT string нет 10 seconds Таймаут на подключение к AuthZforce server
TOLKA_EXTERNAL_MIGRATIONS_RETRY_DELAY duration string нет 15 seconds Задержка между повторными попытками запуска внешних миграций
TOLKA_EXTERNAL_MIGRATIONS_RETRY_ATTEMPTS int нет 5 Максимальное количество попыток запуска внешних миграций
TOLKA_DM_SCHEMA_CACHE_SIZE int нет 128 Максимальный размер кэша для json schema
TOLKA_DM_SCHEMA_CACHE_TTL duration string нет 5 minute Время жизни элементов в кэше для json schema
TOLKA_LAMP_FILE_CACHE_SIZE int нет 64 Максимальный размер кэша для файлов из lamp
TOLKA_LAMP_FILE_CACHE_TTL duration string нет 30 minute Время жизни элементов в кэше для файлов из lamp
TOLKA_FTS_MAPPING_CACHE_SIZE int нет 64 Максимальный размер кэша для маппингов в полнотекстовом поиске
TOLKA_FTS_MAPPING_CACHE_TTL duration string нет 5 minute Время жизни элементов в кэше для маппингов в полнотекстовом поиске
TOLKA_DM_OBJECT_PAGE_SIZE int нет 100 Размер страницы при выборке объектов из data-model
TOLKA_AUTHORIZER_KIND string нет "authzforce" Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию.
TOLKA_SENDERLIB_COMMANDS_HTTP_RETRY_ATTEMPTS int нет 5 Поле attempts из RetrySettings
TOLKA_SENDERLIB_COMMANDS_HTTP_RETRY_DELAY duration string нет "5 seconds" Поле delay из RetrySettings
TOLKA_SENDERLIB_COMMANDS_HTTP_RETRY_KIND string нет "OnSomeExceptions(ConnectException)" CommandResultRetryConditionKind
TOLKA_JOURNAL_MODE string нет WriteToJournal Режим журналирования Nestor. Допустимые значения: WriteToJournal (Отправка в сервис журналирования), WriteToTopic (Отправка события в очередь)
TOLKA_JOURNAL_TOPIC string да, если переменная WriteToTopic "" Название очереди журналирования. Для режима WriteToJournal значение игнорируется.
TOLKA_SENDERLIB_CONSUL_CONNECTION_RETRY_MAX int нет 5 Количество попыток переподключения к Consul
TOLKA_SENDERLIB_CONSUL_CONNECTION_RETRY_DELAY duration string нет 1 second Задержка при попытках переподключения к Consul

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

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

Название команды EntityType Actions UIAction (в attila)
tolka_BuildRelatednessAnalytics RelatednessAnalytics View ViewAnalytics
tolka_BuildRelatednessSummary RelatednessAnalytics View ViewAnalytics
tolka_BuildRelatednessWidgetData RelatednessAnalytics View ViewAnalytics
tolka_BuildSimilaritySummary SimilarityAnalytics View ViewAnalytics
tolka_AddMetricThresholds MetricThreshold Create ChangeAnalyticsSettings
tolka_GetMetricThresholds MetricThreshold View ViewAnalytics
tolka_ListAllWidgets Widget View ViewAnalytics
tolka_CreateWidget Widget Create ChangeAnalyticsSettings
tolka_UpdateWidget Widget Update ChangeAnalyticsSettings
tolka_DeleteWidget Widget Delete ChangeAnalyticsSettings
tolka_ReorderWidgets Widget Update ChangeAnalyticsSettings
tolka_CreateAnalyticsEntity AnalyticsEntity Create ChangeAnalyticsSettings
tolka_UpdateAnalyticsEntity AnalyticsEntity Update ChangeAnalyticsSettings
tolka_DeleteAnalyticsEntity AnalyticsEntity Delete ChangeAnalyticsSettings
tolka_ListAnalyticsEntity AnalyticsEntity View ViewAnalytics

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

BuildRelatednessAnalytics (tolka)

На входе файлы с результатами plagiarismSearch

{
  "data": [
    "processing/10b1011b-9db3-4186-a53c-971016030068",
    "processing/e95024a7-4dc3-4107-8df4-68f47e98679a",
    "processing/c3907091-f0de-4990-ac9b-68f1d9221f7b"
  ],
  "settings": {
    "thresholds": {
      "high": {
        "from": 80,
        "to": 100,
        "color": "#F95959"
      },
      "medium": {
        "from": 50,
        "to": 80,
        "color": "#F2AF4A"
      },
      "low": {
        "from": 10,
        "to": 50,
        "color": "#BB85E5"
      }
    },
    "entities": [
      {
        "code": "document",
        "color": "#2F80ED",
        "fieldName": "publishYear"
      },
      {
        "code": "patent",
        "color": "#27AE60",
        "fieldName": "year"
      }
    ]
  }
}

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

{
  "buckets": {
    "1998": {
      "total": 1,
      "entities": [
        {
          "code": "patent",
          "count": 1
        }
      ]
    },
    "1990": {
      "total": 2,
      "entities": [
        {
          "code": "document",
          "count": 2
        }
      ]
    },
    "1980": {
      "total": 1,
      "entities": [
        {
          "code": "document",
          "count": 1
        }
      ]
    }
  },
  "summary": {
    "total": 4,
    "high": {
      "patent": {
        "total": 1,
        "items": [
          {
            "objectId": "6e896d39-0439-4af4-85fd-115749bdb29a",
            "relatedness": 0.98
          }
        ]
      },
      "document": {
        "total": 1,
        "items": [
          {
            "objectId": "82f79ca0-4caf-4503-8d1c-db3af2718fff",
            "relatedness": 0.82
          }
        ]
      }
    },
    "medium": {
      "document": {
        "total": 1,
        "items": [
          {
            "objectId": "947cb658-f2a1-4bbf-b856-579d80fc1466",
            "relatedness": 0.66
          }
        ]
      }
    },
    "low": {
      "document": {
        "total": 1,
        "items": [
          {
            "objectId": "082d61e6-11ac-4bf5-978d-ff24378fc57f",
            "relatedness": 0.41
          }
        ]
      }
    }
  }
}

Возвращает данные для построения аналитики по близким документам, на основе результатов plagiarismSearch (Lamp).
В данные аналитики попадают только те объекты, которые присутствуют в индексе полнотекстового поиска (FullTextSearch).

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

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

BuildRelatednessSummary (tolka)

На входе файлы с результатами plagiarismSearch, и настройки, если необходимы отличные от настроек по умолчанию.

{
  "data": [
    "processing/10b1011b-9db3-4186-a53c-971016030068",
    "processing/e95024a7-4dc3-4107-8df4-68f47e98679a",
    "processing/c3907091-f0de-4990-ac9b-68f1d9221f7b"
  ],
  "settings": {
    "thresholds": {
      "high": {
        "from": 80,
        "to": 100
      },
      "medium": {
        "from": 50,
        "to": 80
      },
      "low": {
        "from": 10,
        "to": 50
      }
    },
    "entities": [
      "RfbrDocument"
    ]
  }
}

На выходе данные для построения системного виджета сводных данных

{
  "thresholds": {
    "high": {
      "RfbrDocument": {
        "total": 1,
        "items": [
          {
            "objectId": "47d6f786-562b-43f0-9999-5e1098d8cf6e",
            "relatedness": 0.95595397,
            "metric": 0.95595397
          }
        ]
      }
    },
    "medium": {
      "RfbrDocument": {
        "total": 1,
        "items": [
          {
            "objectId": "9465d4f9-c19d-400e-8353-433174e49d81",
            "relatedness": 0.55595397,
            "metric": 0.55595397
          }
        ]
      }
    },
    "low": {
      "RfbrDocument": {
        "total": 2,
        "items": [
          {
            "objectId": "0d6f3e9f-27ef-4bd4-bdd2-2d66a07c707a",
            "relatedness": 0.15188915,
            "metric": 0.15188915
          },
          {
            "objectId": "7840164e-b40a-44ee-8e3f-88fde1a96681",
            "relatedness": 0.025739253,
            "metric": 0.025739253
          }
        ]
      }
    }
  },
  "total": 4
}

Возвращает данные для построения системного виджета сводных данных по близким документам, на основе результатов plagiarismSearch (Lamp).
В данные аналитики попадают только те объекты, которые присутствуют в индексе полнотекстового поиска (FullTextSearch).

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

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

BuildRelatednessWidgetData (tolka)

На входе ID виджета, файлы с результатами Lamp-Similarity, и настройки, если необходимы отличные от настроек по умолчанию.

{
  "widgetId": "3ef4639f-dc0b-4bd8-80f9-ecba44e45aef",
  "data": [
    "temp/5322db77-4cfe-4d6a-a905-e8469bb81dca"
  ],
  "settings": {
    "thresholds": {
      "high": {
        "from": 80,
        "to": 100,
        "color": "#F95959"
      },
      "medium": {
        "from": 50,
        "to": 80,
        "color": "#F2AF4A"
      },
      "low": {
        "from": 0,
        "to": 50,
        "color": "#BB85E5"
      }
    },
    "entities": [
      "RfbrDocument"
    ]
  }
}

На выходе данные для пользовательского виджета

{
  "widgetId": "3ef4639f-dc0b-4bd8-80f9-ecba44e45aef",
  "buckets": {
    "2016": {
      "entities": [
        {
          "code": "RfbrDocument",
          "count": 2
        }
      ],
      "total": 2
    },
    "1999": {
      "entities": [
        {
          "code": "RfbrDocument",
          "count": 1
        }
      ],
      "total": 1
    },
    "2002": {
      "entities": [
        {
          "code": "RfbrDocument",
          "count": 1
        }
      ],
      "total": 1
    }
  }
}

Возвращает данные для построения пользовательского виджета, на основе результатов plagiarism (Lamp).
В данные аналитики попадают только те объекты, которые присутствуют в индексе полнотекстового поиска (FullTextSearch).

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

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

BuildSimilaritySummary (tolka)

На входе файлы с результатами Lamp-Similarity, и настройки, если необходимы отличные от настроек по умолчанию.

{
  "data": [
    "processing/10b1011b-9db3-4186-a53c-971016030068",
    "processing/e95024a7-4dc3-4107-8df4-68f47e98679a",
    "processing/c3907091-f0de-4990-ac9b-68f1d9221f7b"
  ],
  "settings": {
    "thresholds": {
      "high": {
        "from": 80,
        "to": 100
      },
      "medium": {
        "from": 50,
        "to": 80
      },
      "low": {
        "from": 10,
        "to": 50
      }
    },
    "entities": [
      "RfbrDocument"
    ]
  }
}

На выходе данные для построения системного виджета сводных данных

{
  "thresholds": {
    "high": {
      "RfbrDocument": {
        "total": 1,
        "items": [
          {
            "objectId": "47d6f786-562b-43f0-9999-5e1098d8cf6e",
            "metric": 0.95595397
          }
        ]
      }
    },
    "medium": {
      "RfbrDocument": {
        "total": 1,
        "items": [
          {
            "objectId": "9465d4f9-c19d-400e-8353-433174e49d81",
            "metric": 0.55595397
          }
        ]
      }
    },
    "low": {
      "RfbrDocument": {
        "total": 2,
        "items": [
          {
            "objectId": "0d6f3e9f-27ef-4bd4-bdd2-2d66a07c707a",
            "metric": 0.15188915
          },
          {
            "objectId": "7840164e-b40a-44ee-8e3f-88fde1a96681",
            "metric": 0.025739253
          }
        ]
      }
    }
  },
  "total": 4
}

Возвращает данные для построения системного виджета сводных данных по близким документам, на основе результатов similarity (Lamp).
В данные аналитики попадают только те объекты, которые присутствуют в индексе полнотекстового поиска (FullTextSearch).

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

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

AddMetricThresholds (tolka)

На входе настройки порогов для метрик аналитики

{
  "id": "00000000-0000-0000-0000-000000000000",
  "version": 1,
  "thresholds": [
    {
      "name": "high",
      "title": "high",
      "interval": {
        "from": 80,
        "to": 100
      },
      "color": "#F95959"
    },
    {
      "name": "medium",
      "title": "medium",
      "interval": {
        "from": 50,
        "to": 80
      },
      "color": "#F2AF4A"
    },
    {
      "name": "low",
      "title": "low",
      "interval": {
        "from": 10,
        "to": 50
      },
      "color": "#BB85E5"
    }
  ]
}

На выходе результат сохранения настроек

true

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

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

GetMetricThresholds (tolka)

На выходе настоойки порогов для метрик аналитики

{
  "id": "00000000-0000-0000-0000-000000000000",
  "version": 1,
  "thresholds": [
    {
      "name": "high",
      "title": "high",
      "interval": {
        "from": 80,
        "to": 100
      },
      "color": "#F95959"
    },
    {
      "name": "medium",
      "title": "medium",
      "interval": {
        "from": 50,
        "to": 80
      },
      "color": "#F2AF4A"
    },
    {
      "name": "low",
      "title": "low",
      "interval": {
        "from": 10,
        "to": 50
      },
      "color": "#BB85E5"
    }
  ]
}

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

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

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

ListAllWidgets (tolka)

На входе ничего

На выходе список всех виджетов в системе

{
  "status": "Completed",
  "timestamp": 1680860689954,
  "value": [
    {
      "id": "4f2b79f7-4c74-480a-9999-4dac31fcd629",
      "title": "TestWidget1",
      "widgetType": "analyticsWidgetType_barChart",
      "settings": {
        "showLegend": true,
        "entities": [
          {
            "code": "elibBook",
            "fieldName": "bookNote"
          },
          {
            "code": "elibJournalArticle",
            "fieldName": "issueEDN"
          }
        ],
        "fieldType": "string"
      },
      "visibility": true,
      "position": 1,
      "version": 1
    },
    {
      "id": "55b03d4f-2b35-49bc-a754-0b93d3d81642",
      "title": "TestWidget2",
      "widgetType": "analyticsWidgetType_linearBar",
      "settings": {
        "showLegend": true,
        "entities": [
          "elibBook",
          "elibPublication"
        ]
      },
      "visibility": true,
      "position": 2,
      "version": 1
    }
  ]
}

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

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

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

CreateWidget (tolka)

На входе параметры нового виджета

{
  "title": "Test",
  "widgetType": "analyticsWidgetType_barChart",
  "settings": {
    "showLegend": true,
    "fieldType": "string",
    "entities": [
      {
        "code": "elibBook",
        "fieldName": "bookNote"
      },
      {
        "code": "elibJournalArticle",
        "fieldName": "issueEDN"
      }
    ]
  },
  "visibility": true
}

На выходе ID нового виджета

"2112b855-9beb-4f76-8e51-818a16aadf60"

Сохраняет новый виджет аналитики в системе и возвращает его ID.

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

UpdateWidget (tolka)

На входе новые параметры виджета

{
  "id": "2112b855-9beb-4f76-8e51-818a16aadf60",
  "title": "Test",
  "widgetType": "analyticsWidgetType_barChart",
  "settings": {
    "showLegend": false,
    "fieldType": "string",
    "entities": [
      {
        "code": "elibBook",
        "fieldName": "bookNote"
      },
      {
        "code": "elibJournalArticle",
        "fieldName": "issueEDN"
      }
    ]
  },
  "visibility": false,
  "version": 2
}

На выходе признак успешности

true

Обновляет виджет аналитики.

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

DeleteWidget (tolka)

На входе ID удаляемого виджета

"2112b855-9beb-4f76-8e51-818a16aadf60"

На выходе признак успешности

true

Удаляет виджет аналитики из системы.

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

ReorderWidgets (tolka)

На входе данные, необходимые для перестановки местами двух виджетов

{
  "first": {
    "id": "89c1c73e-5051-454d-9557-b6bbedd4d956",
    "newPosition": 9,
    "version": 2
  },
  "second": {
    "id": "a21bf274-dc8c-4f96-91ef-2c3c20e21f6d",
    "newPosition": 10,
    "version": 2
  }
}

На выходе признак успешности

true

Переставляет местами два виджета, изменяя их позицию в списке.

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

CreateAnalyticsEntity (tolka)

На входе настройки сущности в аналитике

{
  "code": "MyEntity",
  "color": "#EBC425",
  "visibleOnDashboard": true
}

На выходе идентификатор созданных настроек

"cdb00bc8-7516-4349-8b88-dc58d0b6e1c1"

Создает настройки для типа сущности в конкретной аналитике.

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

UpdateAnalyticsEntity (tolka)

На входе настройки сущности в аналитике

{
  "id": "cdb00bc8-7516-4349-8b88-dc58d0b6e1c1",
  "version": 1,
  "code": "MyEntity",
  "color": "#FFD40A",
  "visibleOnDashboard": true
}

На выходе результат изменения настроек

true

Изменяет настройки для типа сущности в конкретной аналитике.

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

DeleteAnalyticsEntity (tolka)

На входе идентификатор настройки сущности в аналитике

"cdb00bc8-7516-4349-8b88-dc58d0b6e1c1"

На выходе результат удаления настроек

true

Удаляет настройки для типа сущности в конкретной аналитике.

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

ListAnalyticsEntity (tolka)

На входе фильтры для получения настроек для сущностей в аналитике

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "created",
    "order": "Asc"
  },
  "paging": {
    "page": 1,
    "count": 10
  }
}

На выходе идентификатор созданных настроек

{
  "total": 2,
  "items": [
    {
      "id": "cdb00bc8-7516-4349-8b88-dc58d0b6e1c1",
      "version": 2,
      "code": "MyEntity",
      "color": "#FFD40A",
      "visibleOnDashboard": true
    },
    {
      "id": "75ec78a8-616a-46ce-a270-abfbe0515fd3",
      "version": 1,
      "code": "AnotherEntity",
      "color": "#CC6CDC",
      "visibleOnDashboard": false
    }
  ]
}

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

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

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

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

BuildAnalyticsDTO (tolka)

Исходные данные для построения аналитики.

Поле Тип Обязательное Описание Ограничения
data List[StoredFile] Да Список ссылок на файлы с результатами LAMP - Значения в списке не пустые
- Элементы списка должны быть StoredFile закодированными в виде строки (URL)
settings SummaryAnalysisSettingsOld Да Настройки для построения аналитики

SummaryAnalysisSettingsOld (tolka)

Идентификатор конкретной версии политики.

Поле Тип Обязательное Описание Ограничения
thresholds Thresholds Да Информация об интервалах
entities List[GraphEntity] Да Информация о сущностях, которые требуются в аналитике

Threshold (tolka)

Информация о интервале, который используются для группировки объектов по значению определенной метрики

Поле Тип Обязательное Описание Ограничения
name AsciiCode Да Человекочитаемое наименование интервала Не пустое, 'A-Z' 'a-z' '0-9' '_'
title Title Да Человекочитаемое наименование интервала Не пустое, не длиннее 256 символов
color HexColor Да Цвет для выделения объектов в данном интервале Формат Hexadecimal color
interval Interval Да Пороги значений для интервала Интервалы не должны пересекаться

GraphEntity (tolka)

Информация о сущности.

Поле Тип Обязательное Описание Ограничения
code String Да Код сущности
color String Да Цвет, связанный с данной сущностью
fieldName String Да Название поля, которое содержит значение для целевой метрики

BuildSummaryDTO (tolka)

Параметры для построения системного виджета сводных данных.

Поле Тип Обязательное Описание Ограничения
data List[StoredFile] Да Список ссылок на файлы с результатами LAMP - Значения в списке не пустые
- Элементы списка должны быть StoredFile закодированными в виде строки (URL)
settings AnalysisSettings Нет Настройки для построения аналитики

BuildWidgetDataDTO (tolka)

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

Поле Тип Обязательное Описание Ограничения
widgetId WidgetId Да ID виджета, для которого строятся данные
data List[StoredFile] Да Список ссылок на файлы с результатами LAMP - Значения в списке не пустые
- Элементы списка должны быть StoredFile закодированными в виде строки (URL)
settings AnalysisSettings Нет Настройки для построения аналитики

AnalysisSettings (tolka)

Настройки для построения аналитики. Если какие-либо настройки не указаны, то используется соответствующие глобальные настройки.

Поле Тип Обязательное Описание Ограничения
thresholds Map[String, Interval] Нет Информация об интервалах
entities List[EntityTypeId] Нет Коды сущностей, которые требуются в аналитике

Interval (tolka)

Закрытый интервал [from, to].

Поле Тип Обязательное Описание Ограничения
from Int Да Значение, с которого начинается интервал. Значение входит в интервал. Больше или равно 0
to Int Да Значение, до которого продолжается интервал. Значение входит в интервал. Меньше или равно 100

RelatednessAnalyticsResponse (tolka)

Данные для построения аналитики по relatedness, сгруппированные по интервалам.

Поле Тип Обязательное Описание Ограничения
buckets Map[String, AggregateBucketValue] Да Список бакетов, которые появляются в результате агрегации объектов по определенному значению (key в Map)
summary RelatednessSummaryOld Да Объекты, сгруппированные по типу сущности, которые попадают в интервал. Границы интервала соответствуют настройкам для Relatedness.

RelatednessSummaryOld (tolka)

Данные для построения аналитики по relatedness, сгруппированные по интервалам.

Поле Тип Обязательное Описание Ограничения
total Long Да Общее количество объектов.
high ObjectsRelatedness Да Объекты, сгруппированные по типу сущности, которые попадают в интервал. Границы интервала соответствуют настройкам для Relatedness.
medium ObjectsRelatedness Да Объекты, сгруппированные по типу сущности, которые попадают в интервал. Границы интервала соответствуют настройкам для Relatedness.
low ObjectsRelatedness Да Объекты, сгруппированные по типу сущности, которые попадают в интервал. Границы интервала соответствуют настройкам для Relatedness.

ObjectsSummary (tolka)

Данные для построения сводных данных по объектам, сгруппированные по интервалам, на основе метрики.

Поле Тип Обязательное Описание
total Long Да Общее количество объектов.
thresholds Map[String, ObjectsIntervalByMetric] Да Ключ - код интервала; значение - объекты, которые попадают в интервал

RelatednessWidgetData (tolka)

Данные для пользовательского виджета

Поле Тип Обязательное Описание
widgetId WidgetId Да ID виджета, для которого предназначены данные
buckets Map[String, AggregateBucketValue] Для виджетов типа BarChart Список бакетов, которые появляются в результате агрегации объектов по определенному значению.
summary ObjectsSummary Для виджетов типа LinearBar, PieChart, SummaryTable Данные для построения сводных данных, сгруппированные по интервалам.

ObjectsIntervalByMetric (tolka)

Объекты, сгруппированные по требуемому параметру (например типу сущности или значению поля сущности), которые попадают в интервал.
Соответствует типу Map[String, Page[ObjectIdWithMetric]].

ObjectIdWithMetric (tolka)

Идентификатор объекта и значение метрики. Метрика зависит от вызванной команды.

Поле Тип Обязательное Описание Ограничения
objectId ObjectId Да Идентификатор объекта Не пустое
metric Float Да Значение метрики от 0.0 до 1.0
relatedness Float Да Deprecated. Значение relatedness от 0.0 до 1.0

AnalyticsEntityId (tolka)

Соответствует типу UUID.

AsciiCode (tolka)

Соответствует типу String.
Формат должен соответствовать regular expression "^[A-Za-z0-9_]$".

HexColor (tolka)

Соответствует типу String.
Hexadecimal формат для обозначения цвета: #HexHexHexHex, где Hex это 2 символа в диапазонах 0-9 и a-f (регистр значения не имеет).
Первые три Hex обязательны (общая длина = 1+6), а четверный опционален и редко используется (обозначает прозрачность).

ThresholdsSettingId (tolka)

Соответствует типу UUID.

WidgetId (tolka)

Соответствует типу UUID.

ThresholdsSetting (tolka)

Настройки для порогов метрики в аналитике.

Поле Тип Обязательное Описание Ограничения
id ThresholdsSettingId Нет Идентификатор настройки. Если не задан, будет присвоен ID глобальных настроек "00000000-0000-0000-0000-000000000000".
version Int Нет Версия настройки. Если не задана, будет присвоена "1". Если глобальные настройки уже заданы и ID и версию не задать, то может привести к ошибке, т.к. версия будет отличаться от "1".
thresholds List[Threshold] Да Список интервалов значений для метрики. Интервалы не должны пересекаться.

Widget (tolka)

Данные виджета аналитики

Поле Тип Обязательное Описание Ограничения
id WidgetId Да Идентификатор виджета
title Title Да Название виджета Не пустое, не длиннее 256 символов
widgetType String Да Код типа виджета Должен соответствовать коду из справочника analyticsWidgetType
settings WidgetSettings Да Настройки виджета
visibility Boolean Да Видимость виджета на дашборде
position Int Да Позиция виджета на дашборде Больше 0
version Int Да Версия виджета

CreateWidgetDTO (tolka)

Параметры для создания нового виджета

Поле Тип Обязательное Описание Ограничения
title Title Да Название виджета Не пустое, не длиннее 256 символов
widgetType String Да Код типа виджета Должен соответствовать коду из справочника analyticsWidgetType
settings WidgetSettings Да Настройки виджета
visibility Boolean Да Видимость виджета на дашборде

UpdateWidgetDTO (tolka)

Параметры для обновления виджета

Поле Тип Обязательное Описание Ограничения
id WidgetId Да Идентификатор виджета
title Title Да Название виджета Не пустое, не длиннее 256 символов
widgetType String Да Код типа виджета Должен соответствовать коду из справочника analyticsWidgetType
settings WidgetSettings Да Настройки виджета
visibility Boolean Да Видимость виджета на дашборде
version Int Да Версия виджета

WidgetSettings (tolka)

Настройки виджета. Формат настроек зависит от типа виджета (поле widgetType).

Формат для типов виджета "Круговая диаграмма", "Линейный бар", "Сводная таблица":

Поле Тип Обязательное Описание Ограничения
showLegend Boolean Да Отображать ли легенду
entities List[String] Да Перечень кодов сущностей
fieldName String Нет Если выбрана одна сущность, то поле целевой метрики в этой сущности; иначе не используется.

Формат для типа виджета "Столбчатая диаграмма":

Поле Тип Обязательное Описание Ограничения
showLegend Boolean Да Отображать ли легенду
fieldType String Да Тип данных, по которым строится диаграмма
entities List[BarChartSettingsEntity] Да Перечень кодов сущностей и полей из них Все поля должны соответствовать типу, указанному в fieldType

BarChartSettingsEntity (tolka)

Информация о сущности для настроек виджета типа "Столбчатая диаграмма"

Поле Тип Обязательное Описание Ограничения
code EntityTypeId Да Код сущности
fieldName String Да Название поля, которое содержит значение для целевой метрики Поле должно содержаться в модели сущности, а также в качестве фасета в правилах ее поиска

ReorderWidgetsDTO (tolka)

Данные для перестановки местами двух виджетов

Поле Тип Обязательное Описание Ограничения
first ReorderWidgetDTO Да Первый виджет из пары меняемых местами
second ReorderWidgetDTO Да Второй виджет из пары меняемых местами

ReorderWidgetDTO (tolka)

Данные для изменения положения виджета

Поле Тип Обязательное Описание Ограничения
id WidgetId Да Идентификатор виджета
newPosition Int Да Новая позиция виджета на дашборде Больше 0
version Int Да Версия виджета

AnalyticsEntity (tolka)

Настройки для порогов метрики в аналитике.

Поле Тип Обязательное Описание Ограничения
id AnalyticsEntityId Да Идентификатор настройки Не пустое
version Int Да Версия настройки
code EntityTypeId Да Код сущности Не пустое
color HexColor Да Цвет, связанный с данной сущностью Формат Hexadecimal color
visibleOnDashboard Boolean Да Видимость сущности на дашбордах. В общей статистике объекты все равно учитываются
created TimeStamp Да Дата создания настройки

AnalyticsEntityCreateDTO (tolka)

Настройки для порогов метрики в аналитике.

Поле Тип Обязательное Описание Ограничения
code EntityTypeId Да Код сущности Не пустое
color HexColor Да Цвет, связанный с данной сущностью Формат Hexadecimal color
visibleOnDashboard Boolean Да Видимость сущности на дашбордах. В общей статистике объекты все равно учитываются

AnalyticsEntityUpdateDTO (tolka)

Обновление настроек порогов метрики в аналитике.

Поле Тип Обязательное Описание Ограничения
id AnalyticsEntityId Да Идентификатор настройки Не пустое
version Int Да Версия настройки
code EntityTypeId Да Новый код сущности Не пустое
color HexColor Да Новый цвет, связанный с данной сущностью Формат Hexadecimal color
visibleOnDashboard Boolean Да Новое значение видимости сущности на дашбордах