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>
2.6 KiB
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.