Мутация — это ключ к разгадке тайны эволюции. Путь развития от простейшего организма до господствующего биологического вида длится тысячелетия. Но через каждую сотню тысяч лет в эволюции происходит резкий скачок вперед.
(с) Чарльз Ксавьер

Привет, Хабр! Как и обещали, мы пропадали ненадолго. С вами снова я, Павел Мирошин, тимлид команды разработки «Графини». И сегодня мы поговорим об очередном этапе развития нашего продукта — о его эволюции и мутации. Погнали!
Итак, в последний рабочий день декабря мы решили выпустить новую версию 2025H2 «Приём», преумножив шутку про релиз в пятницу. Тем самым отошли от семантического версионирования (SemVer) в сторону полугодичных релизов (CalVer), так как это лучше отражает наш цикл разработки и вообще — дух команды. Старые версии, соответственно, — 2025H1 «Дебют» и 2025H1.1 «Бал».
Также мы рады сообщить, что «Графиня» официально включена в реестр российского ПО. Давайте разберем новые фичи релиза 2025H2.
TL;DR Раздаем «Графиню» и отвечаем на вопросы в TG-сообществе.
Минорные изменения
В первую очередь доработки и улучшения коснулись виджетов «Круговая диаграмма», «Индикатор», «Метрический (Спидометр)» и «Столбчатая диаграмма».
Также внесли изменения в конструктор и редактор:
Поменялся порядок запросов в редакторе виджета.
Появилась поддержка регулярных выражений в запросах статистики.
Еще были добавлены новые типы переменных «Текст» и «Константа» и реализован матчинг ролей и организаций в настройках внешней авторизации пользователей через протокол SAML.


Здесь начинается самое интересное
Первая большая фича — «Трансформации».
Мы планомерно наращиваем функционал, и такая возможность, как трансформация данных, не могла обойти нас стороной. Это мощный инструмент для манипуляции данными, полученными из запроса перед их отправкой на визуализацию. С их помощью получается:
Переименовывать поля для ясности.
Объединять временные ряды и табличные данные (по аналогии с SQL JOIN).
Выполнять математические операции между результатами разных запросов.
Создавать цепочки обработки, где выход одной трансформации становится входом для следующей.
В этом релизе мы закладываем фундамент и представляем три базовые, но критически важные трансформации: «Временные ряды в таблицу», «Агрегация» и «Организация полей». Думаю, теперь их цель очевидна: они берут исходные данные и преобразуют их согласно заданным условиям, открывая новые способы анализа и визуализации.

Ну и ключевая фича этого релиза — «Модуль РСМ».
В прошлой статье я уже рассказывал про плагины — самостоятельные программы, которые берут данные из источников и посредством HTTP/HTTPS отдают их в нужном формате ядру «Графини».
Такой подход позволил нам (да и позволит вам в дальнейшем) разрабатывать плагины на чем угодно, размещать их где угодно, что очень удобно, когда у вас есть закрытый контур и сложно пробросить доступ от каждого источника до каждого браузера пользователя. То есть это касалось только данных, но нас постоянно спрашивали: «А как быть с визуалом?». Так родились модули.
Ради них пришлось мутировать ядро. Мы вынесли shared-ui компоненты и стили в отдельный микрофронт (раньше при FSD-архитектуре фронта мы могли обходиться без микрофронтов).

Нам оставалось реализовать небольшой сервис для добавления модулей «на горячую». Казалось бы, с Module Federation в этом нет никакого вызова. Однако для сборки мы используем Vite, поэтому задача подключить модули через MF в уже собранный проект оказалась весьма нетривиальной.
В итоге мы решили пойти другим путем: загрузили UMD-модули через <script>-теги прямо в window, проверив версию и билд-таймстамп. Каждый модуль — отдельный .js/.css-файл, который можно обновлять независимо от основного приложения. Не идеальный вариант, но для плагинов и микросервисного фронтенда без пересборки всего проекта — в самый раз.
После всех мучений стараний у нас появилась система модулей. Что же это такое?
Модуль — это, по сути, отделяемый кусок от нашего ядра, содержащий в себе как фронтенд, так и бэкенд.
UI-компоненты модуля используются как для настройки самого модуля, так и для отображения на витрине данных.
Так как это не часть ядра, виджетам модуля не нужно быть настолько гибкими, как виджетам ядра, что позволяет расширить их функционал.
И тут мы подходим ко второму вопросу: а что такое РСМ?
РСМ — ресурсно-сервисная модель «Пульта»/Zabbix. Это подход, который переводит мониторинг из мира «зеленых» и «красных» лампочек на отдельных серверах в плоскость бизнес-логики. Вместо того чтобы следить за тем, «живы» ли конкретный сервер или база данных, РСМ позволяет смотреть на целостные сервисы: «Работает ли онлайн-оплата?», «Доступен ли клиентский портал?». Это взгляд глазами пользователя, а не системного администратора.
В самом «Пульте»/Zabbix РСМ реализована через табличную иерархию в разделе «Услуги». Вы видите списки и древовидные таблицы, где каждый сервис — это строка с расчётным статусом (OK, WARNING, CRITICAL). Это функционально и информативно, но визуально статично. Чтобы понять причину проблемы, часто приходится вручную прыгать по зависимостям, раскрывая вложенные списки. Связи между элементами — это логические правила в настройках, а не живая картина.


В нашем модуле для «Графини» мы превратили эту таблицу в интерактивный граф зависимостей. Вместо строк — визуальные узлы, связанные линиями. Вместо статичного дерева — живая карта сервиса, которую можно двигать, масштабировать и мгновенно анализировать.


Что это дает:
Мгновенную диагностику: Проблемный узел подсвечивается, и вы сразу видите цепочку его зависимостей. Не нужно «ходить» по настройкам — вся топология сервиса перед глазами.
Наглядность сложных связей: Как БД влияет на три разных веб-сервиса? Где единая точка отказа? На графе это видно за секунды.
Интерактивность: Кликнул на узел — увидел детальные метрики. Навел на связь — увидел тип зависимости. Это не отчет для просмотра, а инструмент для анализа.
Именно потому, что это модуль, а не часть ядра, мы смогли реализовать интерактивность, при которой виджет — не черная коробочка, которая не знает, что происходит вокруг, а элемент, который способен влиять на соседние виджеты. Например: нажал на узел в графе, а рядом виджет со списком SLI моментально отфильтровал записи.
Тизерим планы
У многих в голове, наверное, крутится подобный вопрос: «Это все хорошо, а когда можно будет создавать свои плагины/модули?».
Так вот, работа над этим уже идет: скоро планируем выпустить подробный туториал по созданию плагина. А чтобы вы могли начать изучать API уже сейчас, на портале документации доступен соответствующий Swagger.
Но наши планы на следующий релиз не ограничиваются этими улучшениями. Мы готовим много интересного:
Новая роль в системе прав.
Папки для витрин данных и стартовая витрина.
Раздел «Избранное».
Новые трансформации и виды SSO.
Новый плагин JSON.
Импорт витрин из Grafana (знаю, вы очень ждете).
Внедрение ИИ для прогнозирования метрик.
И, конечно, получение сертификата ФСТЭК — планируем завершить эту процедуру в этом году.
И это далеко не все. Так что не переключайтесь 😊
Пообщаться с нами вживую и увидеть демо продукта можно на отраслевой конференции по мониторингу Observability Conf. Мероприятие состоится 19 марта в Москве. На сцене выступят Yandex Cloud, «Газпромбанк», VK, Ozon, ecom.tеch, «Лаборатория Касперского», «Петрович.Тех», «Инфосистемы Джет» и др.
