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

5.2 KiB
Raw Blame History

Контекст и задача:

Необходимо разработать 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 Обработка исключений — чтобы падение одного устройства не ломало весь сбор Подробные комментарии на русском языке