Визуализация структуры приложения![](anchor.svg)
Модуль Визуализация структуры приложения позволяет провести глубокий анализ взаимосвязанных элементов приложения или решения на базе платформы SberMobile.
Например, ссылки в языке выражений позволяют использовать в отдельном выражении данные из различных контекстов. В качестве другого примера можно привести привязки в моделях, классах, инструментальных панелях или на уровне сервера, которые позволяют оркестровать сложные контекстные взаимодействия в мощных приложениях. Модуль визуализации структуры приложения позволяет идентифицировать эти взаимосвязанные контексты и исследовать характер их взаимодействия.
Модуль визуализации структуры приложения предлагает контекст Структура , содержащий две переменные, Узлы структуры и Связи структуры, которые предоставляют информацию о взаимодействии между различными контекстами. Эти взаимодействия собираются динамически, а это значит, что всякий раз, когда контексты взаимодействуют друг с другом, соответствующая информация записывается модулем визуализации структуры приложения и выводится через контекст Структура.
Взаимодействия контекстов, которые не были активированы с момента последнего запуска сервера или выполнения функции Очистить структуру, не будут записаны до тех пор, пока они не будут активированы.
![]() | Когда структура приложения была обновлена, взаимодействия, произошедшие в его предыдущей структуре и записанные в базу данных визуализации структуры приложения, остаются нетронутыми. Запустите функцию контекста Очистить структуру, чтобы очистить базу данных структуры и убедиться, что она содержит только соответствующие взаимодействия. |
Узлы структуры![](anchor.svg)
Переменная Узлы структуры контекста структуры указывает на контексты, которые взаимодействуют с другими контекстами. Существует несколько типов отношений, которые могут существовать между узлами, каждый из которых объясняется ниже.
Каждый узел представляет собой контекст сущности (переменной, события или функции), на которую ссылается или на которую ссылается другой контекст. В связи с этим на один узел может быть множество ссылок, и даже узлы могут ссылаться сами на себя. Например, привязка модели, которая обновляет переменную в той же модели, а значит, в том же контексте.
Полное описание переменной Узлы структуры можно найти по ссылке на контекст Структуры. Поле Идентификатор конечной вершины является уникальным идентификатором узла и не повторяется в таблице Узлы структуры. Поля Источник и Цель в таблице Связи структуры ссылаются на значение Идентификатора узла, и каждый Идентификатор узла будет соответствовать хотя бы одному значению в полях Источник или Цель. Не появится ни один узел, не имеющий хотя бы одного соединения.
Доступ к переменной Узлы структуры на языке выражений можно получить следующим образом:
{structure:structureNodes}
Связи структуры![](anchor.svg)
Таблица Связи структуры содержит подробности для каждой ссылки, а также текущий подсчет того, сколько раз ссылка была активирована с момента запуска сервера или вызова контекстной функции Очистить сруктуру. Существует несколько различных типов собираемых ссылок:
Получение и установка переменных обозначается
переменной
value в поле kind, со значением действия либоGET
, либоСЭТ
. Если переменная имеет значениеСЭТ
, это означает, что значение исходной сущности было применено к значению целевой переменной. Тип действияGET
указывает на то, что значение целевой переменной было получено во время вычисления выражения в исходном контексте.Вызов функции обозначается значением
function
в поле kind и значениемCALL
в поле действие. Выражение, вызвавшее функцию, расположено в исходном контексте, а вызываемая функция является функцией целевого контекста. Имя функции указывается в поле сущность.Произошедшие события обозначаются
событием
значения в поле вида и значениемFIRE
в поле действия. Событие, названное в поле сущности, является событием целевого контекста и было запущено контекстом, указанным в pinpoint.
Информация о ссылках собирается с различными уровнями детализации, в зависимости от типов свойств, участвующих во взаимодействии.
Ссылки в выражениях позволяют собрать наибольшее количество информации, включая номер строки и столбца в выражении, в котором происходит ссылка, указанный в поле pinpoint.
Ссылки, возникающие в переходных контекстах, не содержат полных подробностей об источнике ссылки, а содержат только контекст и имя сущности происхождения ссылки. Примером переходного контекста может служить ситуация, когда ссылка вызывает функцию модуля, а эта функция содержит ссылку на переменную, тогда ссылка из функции является переходным контекстом. В текущем случае будет доступен только контекст и имя функции, без подробной точной информации.
Когда устройство начинает синхронизацию и пытается получить или установить переменную, контекст структуры записывает только контекстную информацию устройства и информацию о переменной, с которой взаимодействовало устройство. Подробности о том, какие свойства устройства были задействованы в синхронизации, не записываются.
Доступ к переменной Связи структуры на языке выражений можно получить следующим образом:
{structure:structureLinks}.
Визуализация структуры приложения с помощью компонента Граф![](anchor.svg)
Ниже показано использование компонента Граф для визуализации данных из контекста Структура. Создавая четкие и информативные визуальные образы, он помогает раскрыть взаимосвязи между различными элементами данных.
Конфигурирование примера модели и устройства![](anchor.svg)
Текущий пример предполагает настройку следующих контекстов:
Виртуальное устройство с именем
structure_example
и контекстным путемusers.admin.devices.structure_example
.Модель с именем
structure_example
с одной переменной с именемvar
и контекстным путемusers.admin.models.structure_example
.Модель
structure_example
содержит привязку, которая активируется при обновлении переменнойrandom
виртуального устройства и устанавливает переменнуюvar
модели равной значениюrandom
.
Чтобы проверить правильность работы привязки, откройте Дополнительные свойства модуля и убедитесь, что переменная var
регулярно обновляется при изменении значения random
виртуального устройства.
Создание Инструментальной панели и настройка компонента Граф![](anchor.svg)
Чтобы эффективно визуализировать ссылки, захваченные контекстом Структура, создайте инструментальную панель Web UI с компонентом Граф. В руководстве "Создание инструментальной панели для мониторинга устройства" содержатся инструкции по созданию инструментальной панели и добавлению компонентов.
Редактор свойств компонента графа дает доступ к нескольким ключевым свойствам для визуализации ссылок, захваченных контекстом Структура. Настройте указанные свойства компонента графа, как показано в таблице ниже:
Свойство графа | Значение | Заметки |
---|---|---|
Выражение узла | {structure:structureNodes} | Использует таблицу "Узлы структуры" в качестве узлов графа. |
Выражение связей | {structure:structureLinks} | Использует таблицу Связи структуры в качестве ссылок для графа. |
Выражение идентификаторов связей | {id} | Указывает имя поля таблицы Связи структуры, которое содержит Идентификатор связи. |
Выражение идентификаторов узлов | {id} | Укажите имя поля таблицы Узлы структуры, которое содержит идентификатор узла. |
Выражение источника | {source} | Укажите имя поля таблицы "Структурные связи", содержащее идентификатор конечной вершины. |
Выражение расширенного поиска | {target} | Укажите имя поля таблицы структурных связей, содержащее идентификатор конечной вершины. |
Выражение описания узла | {id} | Указывает имя поля таблицы Узлы структуры, используемое для описания узла. |
Текущая конфигурация захватывает все ссылки, активные онлайн в системе, что создает несколько сложный граф:
![](image-20231020-131538.png)
Интерпретация этого графа может быть затруднена из-за множества взаимосвязанных узлов и ребер, часто с перекрывающимися метками.
Фильтрация узлов и связей![](anchor.svg)
Фильтрация списков узлов и связей для включения в них только определенного подмножества графа - один из способов улучшить процесс анализа. Существует несколько способов фильтрации элементов графа, но наиболее простым является применение фильтра непосредственно к таблицам {structure:structureNodes}
и {structure:structureLinks}
в Выражении расширенного поиска узлов и Выражении связей графа.
Для того чтобы показать только узлы и связи, относящиеся к модели structure_example
и виртуальному устройству structure_example
, достаточно использовать функцию обработки таблицы filter(DataTable table, String filterExpression)
, как показано в следующей таблице.
Свойство графа | Значение |
---|---|
Выражение расширенного поиска | filter( {structure:structureNodes}, "contains( {path}, 'structure_example' )" ) |
Выражение связи | filter( {structure:structureLinks}, "contains( {id}, 'structure_example' )" ) |
Функция filter(DataTable table, String filterExpression)
принимает два аргумента - таблицу
, которую нужно отфильтровать, и filterExpression
, которое оценивается для каждой строки таблицы данных, и возвращает таблицу. Результирующая таблица содержит только те строки, для которых фильтрВыражение
имеет значение True
.
Для Выражения узлов фильтрующее выражение "contains({path},'structure_example')"
оценивается в True
, если поле path
строки содержит строку structure_example
. Аналогично, Выражение расширенного поиска связей использует фильтрующее выражение для поля id
таблицы ссылок. В результате новый граф содержит только те ссылки и узлы, которые содержат structure_example
в контекстном пути.
![](image-20231023-033438.png)
Другой случай использования может быть при анализе привязок инструментальной панели Web UI, чтобы отфильтровать только пути, относящиеся к этой конкретной панели, например отфильтровать только узлы и ссылки, которые включают users.admin.dashboards.<имя панели>
в свой Id.
![]() | Обратите внимание, что ссылки на текущую панель автоматически отфильтровываются из переменных структуры при оценке. Чтобы проанализировать ссылки в данной панели, необходимо создать другую панель для проведения анализа, где будут видны ссылки в анализируемой панели. |