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

(с) Чарльз Ксавьер

Привет, Хабр! Как и обещали, мы пропадали ненадолго. С вами снова я, Павел Мирошин, тимлид команды разработки «Графини». И сегодня мы поговорим об очередном этапе развития нашего продукта — о его эволюции и мутации. Погнали!

Итак, в последний рабочий день декабря мы решили выпустить новую версию 2025H2 «Приём», преумножив шутку про релиз в пятницу. Тем самым отошли от семантического версионирования (SemVer) в сторону полугодичных релизов (CalVer), так как это лучше отражает наш цикл разработки и вообще — дух команды. Старые версии, соответственно, — 2025H1 «Дебют» и 2025H1.1 «Бал».

Также мы рады сообщить, что «Графиня» официально включена в реестр российского ПО. Давайте разберем новые фичи релиза 2025H2. 

TL;DR Раздаем «Графиню» и отвечаем на вопросы в TG-сообществе.

Минорные изменения 

В первую очередь доработки и улучшения коснулись виджетов «Круговая диаграмма», «Индикатор», «Метрический (Спидометр)» и «Столбчатая диаграмма». 

Также внесли изменения в конструктор и редактор:

  • Поменялся порядок запросов в редакторе виджета.

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

Еще были добавлены новые типы переменных «Текст» и «Константа» и реализован матчинг ролей и организаций в настройках внешней авторизации пользователей через протокол SAML.

Страница настройки параметров авторизации пользователей через SAML
Страница настройки параметров авторизации пользователей через SAML
Пример дашборда с новыми виджетами
Пример дашборда с новыми виджетами

Здесь начинается самое интересное

Первая большая фича — «Трансформации»

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

  • Переименовывать поля для ясности.

  • Объединять временные ряды и табличные данные (по аналогии с SQL JOIN).

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

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

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

Пример настройки трансформаций в редакторе виджета
Пример настройки трансформаций в редакторе виджета

Ну и ключевая фича этого релиза — «Модуль РСМ»

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

Такой подход позволил нам (да и позволит вам в дальнейшем) разрабатывать плагины на чем угодно, размещать их где угодно, что очень удобно, когда у вас есть закрытый контур и сложно пробросить доступ от каждого источника до каждого браузера пользователя. То есть это касалось только данных, но нас постоянно спрашивали: «А как быть с визуалом?». Так родились модули. 

Ради них пришлось мутировать ядро. Мы вынесли shared-ui компоненты и стили в отдельный микрофронт (раньше при FSD-архитектуре фронта мы могли обходиться без микрофронтов).

Нам оставалось реализовать небольшой сервис для добавления модулей «на горячую». Казалось бы, с Module Federation в этом нет никакого вызова. Однако для сборки мы используем Vite, поэтому задача подключить модули через MF в уже собранный проект оказалась весьма нетривиальной. 

В итоге мы решили пойти другим путем: загрузили UMD-модули через <script>-теги прямо в window, проверив версию и билд-таймстамп. Каждый модуль — отдельный .js/.css-файл, который можно обновлять независимо от основного приложения. Не идеальный вариант, но для плагинов и микросервисного фронтенда без пересборки всего проекта — в самый раз.

После всех мучений стараний у нас появилась система модулей. Что же это такое?

  1. Модуль — это, по сути, отделяемый кусок от нашего ядра, содержащий в себе как фронтенд, так и бэкенд.

  2. UI-компоненты модуля используются как для настройки самого модуля, так и для отображения на витрине данных.

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

И тут мы подходим ко второму вопросу: а что такое РСМ?

РСМ — ресурсно-сервисная модель «Пульта»/Zabbix. Это подход, который переводит мониторинг из мира «зеленых» и «красных» лампочек на отдельных серверах в плоскость бизнес-логики. Вместо того чтобы следить за тем, «живы» ли конкретный сервер или база данных, РСМ позволяет смотреть на целостные сервисы: «Работает ли онлайн-оплата?», «Доступен ли клиентский портал?». Это взгляд глазами пользователя, а не системного администратора.

В самом «Пульте»/Zabbix РСМ реализована через табличную иерархию в разделе «Услуги». Вы видите списки и древовидные таблицы, где каждый сервис — это строка с расчётным статусом (OK, WARNING, CRITICAL). Это функционально и информативно, но визуально статично. Чтобы понять причину проблемы, часто приходится вручную прыгать по зависимостям, раскрывая вложенные списки. Связи между элементами — это логические правила в настройках, а не живая картина.

Раздел «Услуг» в системе мониторинга «Пульт» 
Раздел «Услуг» в системе мониторинга «Пульт» 
Раздел «Проблемы» в системе мониторинга «Пульт»
Раздел «Проблемы» в системе мониторинга «Пульт»

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

Пример дашборда с ресурсно-сервисной моделью и связанными проблемами
Пример дашборда с ресурсно-сервисной моделью и связанными проблемами
Детализированная статистика по сервису и SLA
Детализированная статистика по сервису и SLA

Что это дает:

  1. Мгновенную диагностику: Проблемный узел подсвечивается, и вы сразу видите цепочку его зависимостей. Не нужно «ходить» по настройкам — вся топология сервиса перед глазами.

  2. Наглядность сложных связей: Как БД влияет на три разных веб-сервиса? Где единая точка отказа? На графе это видно за секунды.

  3. Интерактивность: Кликнул на узел — увидел детальные метрики. Навел на связь — увидел тип зависимости. Это не отчет для просмотра, а инструмент для анализа.

Именно потому, что это модуль, а не часть ядра, мы смогли реализовать интерактивность, при которой виджет — не черная коробочка, которая не знает, что происходит вокруг, а элемент, который способен влиять на соседние виджеты. Например: нажал на узел в графе, а рядом виджет со списком SLI моментально отфильтровал записи.

Тизерим планы

У многих в голове, наверное, крутится подобный вопрос: «Это все хорошо, а когда можно будет создавать свои плагины/модули?».

Так вот, работа над этим уже идет: скоро планируем выпустить подробный туториал по созданию плагина. А чтобы вы могли начать изучать API уже сейчас, на портале документации доступен соответствующий Swagger.

Но наши планы на следующий релиз не ограничиваются этими улучшениями. Мы готовим много интересного:

  • Новая роль в системе прав.

  • Папки для витрин данных и стартовая витрина.

  • Раздел «Избранное».

  • Новые трансформации и виды SSO.

  • Новый плагин JSON.

  • Импорт витрин из Grafana (знаю, вы очень ждете).

  • Внедрение ИИ для прогнозирования метрик.

  • И, конечно, получение сертификата ФСТЭК — планируем завершить эту процедуру в этом году.

И это далеко не все. Так что не переключайтесь 😊

Пообщаться с нами вживую и увидеть демо продукта можно на отраслевой конференции по мониторингу Observability Conf. Мероприятие состоится 19 марта в Москве. На сцене выступят Yandex Cloud, «Газпромбанк», VK, Ozon, ecom.tеch, «Лаборатория Касперского», «Петрович.Тех», «Инфосистемы Джет» и др.