Files
ayurishchevandClaude Sonnet 5 4c1841b61b ros_control: централизованное управление парком MikroTik RouterOS
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>
2026-09-19 13:13:29 +03:00

2.6 KiB

Итоги: 007 — быстрое обнаружение недоступности

Сделано

  • Таймаут соединения 4 с отдельно от таймаута чтения 30 с (RosClient, ROS_CONNECT_TIMEOUT).
  • Фоновый опрос (app/services/poller.py, запускается в lifespan): период POLL_INTERVAL=30 с, лёгкий и полный режимы (ops.poll_device); сбой одного устройства не останавливает остальных, при остановке приложения задача корректно отменяется.
  • Автообновление страницы «Устройства» каждые 15 с без перезагрузки и без потери выбора/открытых меню (static/app.js, HX-Push-Url при автообновлении не отправляется).
  • Новые настройки в .env.example: ROS_CONNECT_TIMEOUT, POLL_INTERVAL, UPDATE_CHECK_INTERVAL (значения по умолчанию заданы в коде — существующий .env менять не нужно).

Проверено

  • pytest: 9 из 9 (добавлен тест опроса: недоступно → возврат с полным опросом → лёгкий опрос обновляет uptime, остальные поля сохраняются; в тестах опрос выключен).
  • Вживую: статусы обновляются каждые 30 с без обращений пользователя; адрес без ответа определяется за 4,0 с (было до 30 с); новое недоступное устройство помечается offline за ≤24 с без ручного опроса; в браузере страница сама показала «1 offline» через 15 с, история не засорена, ошибок JS нет. Тестовые устройства удалены.

Ограничения

  • Худшее время обнаружения: POLL_INTERVAL + ROS_CONNECT_TIMEOUT (≈34 с) плюс до 15 с до обновления страницы.
  • Во время перезагрузки устройства (обновление ROS/FW) оно кратковременно отображается как offline — это ожидаемо.
  • Интервал 30 с при большом парке даёт по одному лёгкому запросу на устройство в 30 с; нагрузку ограничивает MAX_CONCURRENCY.