Files
ros_control/docs/changes/001-initial-implementation/summary.md
T
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

3.0 KiB
Raw Blame History

Итоги: 001 — первая версия ros_control

Сделано

  • Control Server на FastAPI: JSON API /api/v1 (Bearer-токен) и WEB UI (Jinja2 + HTMX, вход по логину/паролю).
  • Local Metadata DB (SQLite): устройства с зашифрованными (Fernet) паролями, кэш статуса, бэкапы, задачи.
  • RouterOS REST-клиент: статус (модель, канал, ROS, FW, uptime), бэкап, смена канала, обновление ROS и FW.
  • Бэкап: .backup (без шифрования) + .rsc → устройство само загружает в S3 по presigned PUT → файлы удаляются с устройства.
  • S3 (Yandex Object Storage): список, скачивание (presigned GET), удаление.
  • Долгие и групповые операции через таблицу jobs с ограничением параллелизма (MAX_CONCURRENCY).
  • Docker Compose, venv для разработки, README, 4 автотеста.

Проверено

  • pytest: 4 теста (шифрование, разбор статуса, порядок шагов бэкапа с моками RouterOS/S3, авторизация API и отсутствие пароля в ответах) — пройдены.
  • Дымовой прогон сервера: редирект на логин, вход, добавление недоступного устройства (offline + причина), задача бэкапа завершается failed с понятной ошибкой, страница бэкапов открывается.

НЕ проверено (нужно устройство и бакет)

  • Реальная работа с RouterOS 7 и Yandex Object Storage. Главный риск — /tool/fetch с http-method=put upload=yes на целевой версии ROS.
  • Обновления ROS/FW (поведение при обрыве соединения на перезагрузке реализовано по документации).
  • Сборка и запуск Docker-образа не выполнялись.

Отклонения от плана

  • Администратор UI берётся из переменных окружения (ADMIN_USER/ADMIN_PASSWORD), таблицы users нет — достаточно для одного администратора.
  • Кнопки в строке устройства и групповые кнопки используют hx-include вместо общей формы (иначе значения каналов разных устройств смешивались).

Ограничения

  • Только RouterOS 7.x. Один администратор. HTMX-скрипт лежит локально (app/ui/static), внешние CDN не нужны.
  • Долгие задачи выполняются внутри процесса сервера; при перезапуске незавершённые помечаются failed.