Control Server (FastAPI) с WEB UI (Jinja2 + HTMX) и JSON API для группового администрирования устройств RouterOS 7 через REST. - Устройства: список, статус (модель, канал, версии ROS/FW, uptime, доступные обновления), примечания, пароли шифруются (Fernet); фоновый опрос каждые 30 с и быстрое обнаружение недоступности (таймаут соединения 4 с). - Группы устройств и фильтры (устройства, резервные копии). - Резервные копии: .backup и .rsc (show-sensitive) создаются через REST, скачиваются сервером и загружаются в S3 (Yandex Object Storage). - Обновление ROS/FW и выбор канала, групповые операции задачами. - Интерфейс по утверждённому макету: светлая/тёмная темы, окна, шрифты IBM Plex локально. Docker Compose, SQLite в томе, минимальный набор тестов. - Планы и итоги каждого изменения — в docs/changes/. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1.8 KiB
1.8 KiB
План: 007 — быстрое обнаружение недоступности устройств
Контекст
Раньше опроса по расписанию не было: статус обновлялся только по действию пользователя, а недоступное (не отвечающее) устройство определялось по общему таймауту 30 с.
Решение (согласовано: оба пункта, интервал 30 с)
- Раздельные таймауты: соединение — 4 с (
ROS_CONNECT_TIMEOUT), чтение — 30 с (долгие операции не затронуты). - Фоновый опрос каждые 30 с (
POLL_INTERVAL, 0 — выключить): параллельно, не болееMAX_CONCURRENCY.- Лёгкий опрос (один запрос
system/resource): online/offline, uptime, версия ROS. - Полный опрос: если устройство было offline или не опрошено (версии могли измениться), и раз в
UPDATE_CHECK_INTERVAL(30 мин) — с проверкой обновлений.
- Лёгкий опрос (один запрос
- UI: таблица и счётчики в заголовке обновляются сами каждые 15 с (только чтение БД); пауза при выбранных строках, открытом меню/окне, фокусе в фильтрах и скрытой вкладке; история браузера не засоряется.
Шаги
Клиент RouterOS (connect-таймаут) → ops.poll_device → services/poller.py и запуск в lifespan → автообновление в app.js (OOB-подзаголовок) → тест, README, итоги.