5.5 KiB
Техническая документация: mklab_base_indicators_report
name: mklab_base_indicators_report
version: 19.0.2025.11.24
author: MK.Lab
depends: base, mklab_base_indicators_extended
Внешние Python-пакеты: networkx, matplotlib
Архитектура
Модуль не вводит новых моделей данных. Состоит из трёх компонентов: расширения существующей модели hg.index, HTTP-контроллера и визарда.
mklab_base_indicators_report
├── hg.index (расширение) — метод generate_graph_image()
├── NodeMetricsReportController — HTTP-контроллер /node_metrics/report/<id>
└── node_report_wizard — визард выбора показателя и запуска отчёта
Компоненты
hg.index — расширение
Файл: models/hg_index.py
Добавляет метод generate_graph_image() к существующей модели hg.index.
Метод generate_graph_image()
Строит направленный граф зависимостей для текущего показателя и возвращает PNG-изображение в виде base64-строки. Последовательность шагов:
1. Сбор данных
- Находит все
hg.linkгдеsource_idравен вершине текущего показателя (self.node_id) - Находит все
hg.indexс тем жеinternal_code_idчто у текущего показателя
2. Построение графа (networkx.DiGraph)
Для каждой связи hg.link:
- Добавляет вершину-источник (
source_id.name) с меткой — суммойcurrent_valueвсех показателей по коду - Для каждой вершины-приёмника (
target_ids): добавляет вершину с меткой — суммойcurrent_valueпоказателей по коду, отфильтрованных по данному узлу - Добавляет направленное ребро от источника к приёмнику
3. Рендеринг
| Параметр | Значение |
|---|---|
| Расположение вершин | spring_layout, seed=1 (фиксированный, воспроизводимый) |
| Размер холста | 10 × 8 дюймов |
| Размер вершины | 3000 |
| Цвет вершины | lightblue |
| Метка вершины | "название\nZZZZ.ZZ" (название + числовое значение с двумя знаками) |
4. Вывод
Сохраняет изображение в BytesIO в формате PNG, кодирует в base64 и возвращает строку.
NodeMetricsReportController — HTTP-контроллер
Файл: report/index_report.py
| Параметр | Значение |
|---|---|
| Маршрут | /node_metrics/report/<int:index_id> |
| Тип | http |
| Авторизация | user (требует входа в систему) |
Получает index_id, загружает запись hg.index, вызывает generate_graph_image() и возвращает HTML-страницу с тегом <img> где изображение встроено как base64.
При отсутствии записи с указанным index_id возвращает строку "Record not found".
node_report_wizard — Визард
Файл: wizard/report_wizard.py
Тип: models.TransientModel
| Поле | Тип | Описание |
|---|---|---|
index_id |
Many2one → hg.index |
Выбранный показатель для построения графа |
Метод action_generate_report()
Читает web.base.url из системных параметров, формирует URL вида:
{web.base.url}/node_metrics/report/{index_id}
Возвращает ir.actions.act_url с target='new' — отчёт открывается в новой вкладке браузера.
Представления и меню
Файл: wizard/report_wizard.xml
Форма визарда с полем index_id и кнопками «Показать отчёт» / «Отмена». Пункт меню добавляется в раздел отчётов модуля mklab_base_indicators_extended:
Слои показателей → Отчёты → Отчет показателей по узлам
Права доступа
Файл: security/ir.model.access.csv
| Модель | Группа | Права |
|---|---|---|
node_report_wizard |
group_indicators_admin |
CRUD |
Тесты
Файл: tests/test_report_wizard.py
| Класс | Метод | Что проверяет |
|---|---|---|
TestReportWizard |
test_wizard_create |
Создание визарда с index_id |
TestReportWizard |
test_action_generate_report_returns_url_action |
Тип ir.actions.act_url, наличие index_id в URL, target='new' |
TestReportWizard |
test_action_url_contains_base_url |
URL содержит значение web.base.url |
TestHgIndexGraphImage |
test_generate_graph_image_returns_base64 |
Метод возвращает base64-строку |