Задача [AS43]: Визуализация данных форм

Формулировка проблемы: необходим инструментарий для поддержки визуализации данных, содержащихся в документах по формам Synergy.

Связанные задачи:

Решение:

Визуализация данных в Synergy производится в три этапа:

  1. Индексация данных форм на основе Elasticsearch

  2. Отображение индексированных данных с использованием Kibana

  3. Публикация диаграмм и дашбордов в Synergy

Весь процесс подключения и использования инструментов для визуализации данных рассмотрен в Руководстве по разработке с использованием Arta Synergy.

Индексация данных форм на основе Elasticsearch

Загрузка данных в ES осуществляется с помощью процесса индексации данных форм (Административное приложение -> Обслуживание системы -> Управление индексом форм). В это время для каждой формы и каждого компонента этой формы в Synergy создается несколько индексов. Каждый из этих индексов будет отображен в Kibana со своим кодом, как используемое поле.

Названия индексов и alias-ы
  • Для всех данных по форме, принадлежащих реестру с идентификатором someRegistryID, создаётся индекс с именем <index-prefix>-r-someRegistryID.

  • Для всех данных по форме с идентификатором someFormID создаётся индекс с именем <index-prefix>-f-someFormID.

Таким образом, для каждого реестра и для каждой формы, по которым есть данные, будет создано по индексу. Если по форме создан реестр, а также созданы какие-то данные вне реестра, то в этом случае будет создано два индекса:

  1. <index-prefix>-r-IdOfRegistryWithOtherForm

  2. <index-prefix>-f-otherID.

Замечание:

Здесь описано, как получить названия всех имеющихся индексов в Elasticsearch

Кроме этого, для удобства использования и возможности переноса конфигурации для каждого из вышеперечисленных индексов создаётся alias. Имена alias-ов формируются так:

  • Для данных реестров: r-нормализованный_код_реестра

  • Для данных форм без реестров: f-нормализованный_код_формы где нормализованый_код_реестра и нормализованный_код_формы - коды, соответственно, реестра и формы, в которых специальные символы , ., [, ], {, }, (, ), +, -, ?, ^, $, | заменяются на _.

Предупреждение

При этом возможна ситуация, когда нормализованные коды разных реестров совпадут и alias будет создан на на все соответветствующие индексы. Эта маловероятное затруднение может быть решено изменением кода соответствующих реестров или форм. В случае, если это невозможно, необходимые alias-ы можно создать вручную.

При изменении кода реестра или формы в Synergy имя соответствующего alias-а также изменяется.

Структура документа в индексе

Одна единица данных в индексе Elasticsearch называется Документ. Документ содержит поля определённых типов. Каждый документ в текущем индексе соответствует одной единице данных по форме (=файлу по форме, записи реестра) и содержит следующие поля:

  • asfDataId - идентификатор данных по форме, тип keyword;

  • formId - идентификатор формы, тип keyword;

  • formCode - код формы, тип keyword;

  • registryId - идентификатор реестра, тип keyword (содержит значение -1 для данных по форме, не связанных с реестром);

  • documentId - идентификатор документа Synergy, тип keyword;

  • status - статус записи реестра, тип number:

    • 0 - "Подготовка" (NO_ROUTE) - это значение также устанавливается для данных по форме, не связанных с реестром

    • 1 - "В процессе" (STATE_NOT_FINISHED)

    • 2 - "Активная" (STATE_SUCCESSFUL)

    • 3 - "Неуспешная" (STATE_UNSUCCESSFUL)

  • deleted - признак удаления записи реестра (0 - не удалено, 1 - удалено), тип number (0 для данных по форме, не связанных с реестром);

  • created - дата и время создания данных по форме, тип date;

  • modified - дата и время изменения данных по форме, тип date.

Далее следуют поля, соответствующие компонентам формы:

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

  • Название полей, соответствующих компоненту формы, формируется так: идентфикаторкомпонентаформывнижнемрегистре_key_постфикс и идентфикаторкомпонентаформывнижнемрегистре_value_постфикс (данные для которых берутся, соответственно, из полей key и value данных по форме).

  • Для каждого поля *_key и *_value создаются поля с нижеперечисленными постфиксами.

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

Постфиксы для полей *_key:

  • _exact - поле содержит значение key, приведенное к нижнему регистру, тип keyword;

  • _sort - поле содержит точное значение key, тип keyword;

  • _number - поле содержит значение key, приведенное к числу, тип number;

Примечание:

Если поле key в документе пусто, в данное поле будет записано максимальное значение для типа long: 9 223 372 036 854 775 807

  • _date - поле содержит значение key, приведенное к дате; поле присутствует только для компонентов Synergy типа "Дата/время"; тип date;

  • _double - поле содержит значение key, приведенное к числу, тип double;

Примечание:

Данное поле создается только в том случае, если из значения key удалось выделить число (т.е. есть хотя бы один документ, использующий это поле, содержит числовое значение);

  • пустой постфикс - поле содержит n-граммы значения key, через пробел, тип text.

Постфиксы для полей *_value:

  • _exact - поле содержит значение value, приведенное к нижнему регистру, тип keyword;

  • _sort - поле содержит точное значение value, тип keyword;

  • _number - поле содержит значение value, приведенное к числу, тип number;

Примечание:

Если поле key в документе пусто, в данное поле будет записано максимальное значение для типа long: 9 223 372 036 854 775 807

  • _prefix - поле содержит возможные префиксы из значения value, через пробел, тип text;

  • _postfix - поле содержит возможные постфиксы из значения value, через пробел, тип text;

  • пустой постфикс - поле содержит n-граммы значения value, через пробел, тип text

Индексы изменения данных (историчные индексы)

Индексы изменения данных создаются только для тех форм и реестров, коды которых подпадают под шаблоны (секции в конфигурационном файле arta/elasticConfiguration.xml, см. описание выше).

Имя индекса <index-prefix>-rh-someRegistryID и <index-prefix>-fh-someFormID, для реестров и форм, соответственно. Alias-ы: rh-нормализованный_код_реестра и fh-нормализованный_код_формы.

Отличие индексов изменения данных от текущих индексов - на каждое изменение данных по форме создаётся новый документ в индексе. Кроме этого, для компонентов формы создаются только поля со следующими постфиксами:

  • Для *_key:

    • _exact

    • _number

    • _date

    • _double

  • Для *_value:

    • _exact

    • _number

Типы данных и условия создания полей такие же, как и в текущем индексе.

Отображение индексированных данных с использованием Kibana

Процесс создания диаграмм описан в руководстве.

Для использования индексов Elasticsearch в диаграммах Kibana необходимо указать эти индексы, используя шаблоны индексов (Index patterns). Они представляют собой маску имени, которой должны соответствовать индексы, входящие в этот шаблон. Каждая диаграмма в Kibana стоится строго на основе одного шаблона индекса или результата поиска по данным.

Kibana позволяет создавать следующие типы диаграмм:

  1. Area chart - предназначена для отображения общего изменения данных во времени, когда выявление суммарного значения всех данных важнее, чем сравнение любых двух или более последовательностей. Например, полезна для отображения использвания ресурсов сервера.

  2. Data table - отображение данных как разультата агрегации в виде таблицы.

  3. Line chart - используется для отображения данных в виде линий (графиков). В отличие от Area charts, удобна для сравнения последовательностей между собой.

  4. Markdown widget - вставка произвольной информации, используя синтаксис языка Markdown.

  5. Metric - отображение одного числа - результата агрегации числовых данных.

  6. Pie Chart - предназначена для отображения вклада нескольких частей в некоторый общий результат. Может принимать вид круговой (pie) или кольцевой (donut) диаграммы.

  7. Tag cloud - отображение данных таким образом, чтобы их размер зависел от некоторого числового показателя этих данных (например, количества упоминаний).

  8. Tile map - специфический тип диаграмм, использующий агрегацию географических данных (тип поля geo_point) для их отображения на карте.

  9. Timeseries - специфический тип диаграмм, визуализирующий временные ряды.

  10. Vertical bar chart - наиболее универсальная диаграмма, отображающая числовые показатели произвольных полей в виде вертикальной гистограммы.

Публикация диаграмм и дашбордов в Synergy

Kibana предоставляет средства для публикации диаграмм и дашбордов как встраиваемого HTML-шаблона или URL-ссылки. При этом возможна публикация интерактивной визуализации или снимка состояния данных на момент публикации (shapshot). Данные для публикации располагаются в панели меню, пункт Share.

Встраивание как дашборда, так и его снимка возможно двумя способами:

  1. как фрейма html - код для вставки содержится в поле Embedded iframe;

  2. как ссылки - URL страницы содержится в поле Link.

Примечание:

По URL, автоматически генерируемому Kibana, пользователям предоставляется дашборд в режиме редактирования, с правом доступа ко всем разделам Kibana. Для того, чтобы предоставить пользователям доступ к дашборду только в режиме просмотра, необходимо в URL ссылки добавить параметр:

&embed=true

Один из способов публикации дашборда в Synergy - добавление его как внешнего модуля. При этом каждый дашборд должен быть оформлен как отдельный внешний модуль. В качестве адреса приложения необходимо использовать URL дашборда.

Другой способ - включение фрейма с дашбордом в пользовательский компонент. В этом случае в качестве HTML-кода необходимо использовать код из поля Embedded iframe.

Примечание:

По умолчанию в код фрейма включены границы 800х600 пикселей. Для того, чтобы дашборд занимал все доступное место, необходимо изменить эти параметры:

height="100%" width="100%"

Параметр embed=true, означающий доступ к дашборду только в режиме просмотра, включается Kibana в код фрейма по умолчанию.