Обновить Promt.md
This commit is contained in:
104
Promt.md
104
Promt.md
@@ -1,34 +1,92 @@
|
|||||||
Контекст и задача:
|
Контекст и задача:
|
||||||
Мне нужно разработать self-hosted веб-приложение для мониторинга и динамической визуализации топологии домашней сети и устройств умного дома. Сеть состоит из разнородного оборудования (гетерогенная среда): роутер Asus, точки доступа MikroTik и Ubiquiti, домашний Linux-сервер с Docker-контейнерами, NAS Synology, а также IoT-устройства (Zigbee и Matter), заведенные в Home Assistant.
|
|
||||||
|
|
||||||
Главная цель приложения — опрашивать все эти системы, приводить данные к единому формату "Узлы (Nodes)" и "Связи (Edges)" и отрисовывать интерактивную живую карту сети, где толщина линий зависит от текущей скорости сетевого интерфейса, а цвет линка нагрузку. Тап по элементу Node отображает его состояние и сервисы с вложениями (Node > docker > continer list, node > vm list ), тап по линку отображает график нагрузки. Отрисовка линка между узлами как по автоматичекому сопастовлению мак адресов устройств(например switch port 1 arp mac list есть мак сервера - рисуем линию в соответствии со скоростью линка 10g/1g/100m ) так и ручное редактирование на карте.
|
Необходимо разработать 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-адресов (например, между коммутатором и сервером) и ручного редактирования карты.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Архитектура системы:
|
Архитектура системы:
|
||||||
1. Backend (Python / FastAPI): Скрипт-коллектор, который по расписанию (раз в 30-60 секунд) собирает данные из источников. Должен иметь эндпоинт `/api/topology`, отдающий JSON для фронтенда.
|
|
||||||
2. База данных (Redis/SQLite): Для кэширования последнего состояния сети, чтобы не перегружать роутеры частыми запросами при обновлении страницы пользователем.
|
|
||||||
3. Frontend (HTML5 / JS): Одна страница с использованием библиотеки vis.js (или Cytoscape.js), которая запрашивает JSON и строит граф с поддержкой физики.
|
|
||||||
|
|
||||||
Требования к модулям сбора данных (Бэкенд):
|
Backend (Python / FastAPI)
|
||||||
- Модуль Роутеров и коммутаторов (Asus, MikroTik, Ubiquiti, OpenWRT, d-link, SNR, cisco): Реализуй абстрактный класс или универсальный метод сбора данных через SNMPv1/v2/v3 (используя библиотеку pysnmp или аналоги). Нужно собирать: список подключенных MAC-адресов по интерфейсам/портам сопоставляя с другими роутеми/коммутуторами и текущую утилизацию трафика (In/Out octets) на этих интерфейсах. Для MikroTik дополнительно предусмотри альтернативный сбор Wi-Fi клиентов через RouterOS v7 REST API.
|
|
||||||
- Модуль Docker: Используй официальный docker-py. Собирай список запущенных контейнеров, их ID, статус (running/stopped) и связывай их с "родительским" узлом — домашним сервером.
|
|
||||||
- Модуль Умного дома (Zigbee/Matter): Реализуй интеграцию с Home Assistant REST API. Скрипт должен запрашивать состояние объектов (`/api/states`), фильтровать устройства умного дома (например, по признаку интеграции zha или zigbee2mqtt в атрибутах) и привязывать их к узлу "Home Assistant".
|
|
||||||
|
|
||||||
|
Скрипт-коллектор, который по расписанию (раз в 30–60 секунд) собирает данные из источников
|
||||||
|
Эндпоинт /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 вывода):
|
||||||
Выходной JSON должен строго соответствовать формату для vis.js:
|
|
||||||
|
Выходной JSON должен соответствовать формату для vis.js:
|
||||||
|
```
|
||||||
{
|
{
|
||||||
"nodes": [
|
"nodes": [
|
||||||
{"id": "уникальный_ключ", "label": "Имя устройства (или IP/MAC)", "group": "категория_для_стилей", "status": "online/offline"}
|
{
|
||||||
],
|
"id": "уникальный_ключ",
|
||||||
"edges": [
|
"label": "Имя устройства (или IP/MAC)",
|
||||||
{"from": "id_источника", "to": "id_приемника", "label": "Метрика трафика (например, 45 Mbps)", "value": "число_для_цвета_линии"}
|
"group": "категория_для_стилей",
|
||||||
]
|
"status": "online/offline"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"from": "id_источника",
|
||||||
|
"to": "id_приемника",
|
||||||
|
"label": "Метрика трафика (например, 45 Mbps)",
|
||||||
|
"value": "число_для_цвета_линии"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Что нужно сгенерировать:
|
```
|
||||||
1. Чистую архитектуру проекта (структуру файлов).
|
|
||||||
2. Полный рабочий код бэкенда на FastAPI с реализацией вышеописанных модулей сбора данных (с заглушками под реальные IP/токены).
|
|
||||||
3. Пример фронтенд-страницы (index.html), которая раз в 10 секунд запрашивает бэкенд и плавно обновляет граф без перезагрузки страницы.
|
|
||||||
4. Docker-compose файл для быстрого деплоя всей системы (FastAPI + Redis + Frontend) в одну команду.
|
|
||||||
|
|
||||||
Пиши код с соблюдением принципов SOLID, обработкой исключений (чтобы падение одного роутера не ломало весь сбор) и подробными комментариями на русском языке.
|
Что нужно сгенерировать:
|
||||||
|
|
||||||
|
Чистая архитектура проекта — структура файлов
|
||||||
|
Полный рабочий код бэкенда на FastAPI с реализацией модулей сбора данных (с заглушками под реальные IP/токены)
|
||||||
|
Пример фронтенд-страницы (index.html) — обновление графа каждые 10 секунд без перезагрузки
|
||||||
|
Docker-compose файл — для быстрого деплоя всей системы (FastAPI + Redis + Frontend) одной командой
|
||||||
|
Дополнительные требования:
|
||||||
|
|
||||||
|
Код должен быть написан с соблюдением принципов SOLID
|
||||||
|
Обработка исключений — чтобы падение одного устройства не ломало весь сбор
|
||||||
|
Подробные комментарии на русском языке
|
||||||
Reference in New Issue
Block a user