Files
homelab-monitor/Promt.md
2026-06-24 15:22:27 +03:00

92 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Контекст и задача:
Необходимо разработать self-hosted веб-приложение для мониторинга и динамической визуализации топологии домашней сети и устройств умного дома. Сеть состоит из разнородного оборудования (гетерогенная среда):
Роутеры WiFi: Asus, MikroTik, Ubiquiti, OpenWRT
Коммутаторы: D-Link, SNR, Cisco
Серверы: Linux-сервер с Docker-контейнерами, серверы VM Proxmox
NAS: Synology
IoT-устройства: Zigbee и Matter, заведенные в Home Assistant
Главная цель приложения — опрашивать все системы, приводить данные к единому формату:
Узлы (Nodes)
Связи (Edges)
Отрисовка интерактивной живой карты сети:
Толщина линий зависит от скорости сетевого интерфейса (10G/1G/100M и т.д.)
Цвет линии отражает нагрузку
Тап по узлу показывает его состояние и сервисы (например, список Docker-контейнеров или VM)
Тап по линии — график нагрузки
Возможность автоматического сопоставления MAC-адресов (например, между коммутатором и сервером) и ручного редактирования карты.
Архитектура системы:
Backend (Python / FastAPI)
Скрипт-коллектор, который по расписанию (раз в 3060 секунд) собирает данные из источников
Эндпоинт /api/topology — отдает JSON для фронтенда
База данных (Redis / SQLite)
Кэширование последнего состояния сети
Предотвращение частых запросов к роутерам при обновлении страницы
Frontend (HTML5 / JS)
Одна страница с использованием библиотеки vis.js или Cytoscape.js
Запрашивает JSON и строит граф с поддержкой физики
Требования к модулям сбора данных (Backend):
Модуль роутеров и коммутаторов (Asus, MikroTik, Ubiquiti, OpenWRT, D-Link, Cisco, SNR):
Реализовать абстрактный класс или универсальный метод сбора через SNMPv1/v2/v3 (используя pysnmp или аналоги)
Собирать:
Список подключенных MAC-адресов по интерфейсам/портам
Сопоставлять с другими устройствами
Утилизацию трафика (In/Out octets)
Для MikroTik — дополнительно собирать Wi-Fi клиентов через RouterOS v7 REST API
Модуль Docker:
Использовать docker-py
Собирать список запущенных контейнеров, их ID, статус и связывать с “родительским” узлом — сервером
Модуль умного дома (Zigbee/Matter):
Интеграция с Home Assistant REST API
Запрашивать /api/states, фильтровать устройства по признаку интеграции (например, zha, zigbee2mqtt)
Привязывать устройства к узлу “Home Assistant”
Требования к структуре данных (JSON вывода):
Выходной JSON должен соответствовать формату для vis.js:
```
{
"nodes": [
{
"id": "уникальный_ключ",
"label": "Имя устройства (или IP/MAC)",
"group": "категория_для_стилей",
"status": "online/offline"
}
],
"edges": [
{
"from": "id_источника",
"to": "id_приемника",
"label": "Метрика трафика (например, 45 Mbps)",
"value": "число_для_цвета_линии"
}
]
}
```
Что нужно сгенерировать:
Чистая архитектура проекта — структура файлов
Полный рабочий код бэкенда на FastAPI с реализацией модулей сбора данных (с заглушками под реальные IP/токены)
Пример фронтенд-страницы (index.html) — обновление графа каждые 10 секунд без перезагрузки
Docker-compose файл — для быстрого деплоя всей системы (FastAPI + Redis + Frontend) одной командой
Дополнительные требования:
Код должен быть написан с соблюдением принципов SOLID
Обработка исключений — чтобы падение одного устройства не ломало весь сбор
Подробные комментарии на русском языке