diff --git a/CHECKLIST.md b/CHECKLIST.md index f08a94e..f12cd1e 100644 --- a/CHECKLIST.md +++ b/CHECKLIST.md @@ -16,9 +16,9 @@ - [x] Shell-agent для OpenWrt. - [x] HTTP polling вместо постоянного соединения. - [x] Operator bearer token для MVP. -- [~] Command lifecycle: timeout, retry, history. +- [x] Command lifecycle: timeout, retry, history. - [x] OpenWrt package skeleton. -- [~] Минимальный web UI. +- [x] Минимальный web UI. ## Этап 0: Подготовка проекта @@ -54,13 +54,13 @@ - [x] `ubus call system info`; - [x] `/proc/loadavg`; - [x] `/proc/uptime`. -- [~] Добавить расширенный сбор метрик: - - [ ] memory usage в нормализованном виде; - - [ ] disk usage; - - [ ] WAN IP; - - [ ] DHCP leases; - - [ ] Wi-Fi clients; - - [ ] interface counters/errors. +- [x] Добавить расширенный сбор метрик: + - [x] memory usage в нормализованном виде; + - [x] disk usage; + - [x] WAN IP; + - [x] DHCP leases; + - [x] Wi-Fi clients; + - [x] interface counters/errors. - [x] Реализовать polling команд. - [x] Реализовать отправку результата команды. - [x] Добавить allowlist команд на агенте: @@ -111,15 +111,15 @@ - [x] Добавить статус `cancelled`. - [x] Добавить отмену команды. - [x] Добавить basic audit log. -- [ ] Добавить request id. -- [ ] Добавить structured logging. +- [x] Добавить request id. +- [x] Добавить structured logging. - [ ] Добавить graceful shutdown. ## Этап 3: MVP Web UI -- [ ] Выбрать frontend stack. +- [x] Выбрать frontend stack: static HTML/CSS/JS. - [x] Создать `web/`. -- [~] Добавить настройку API base URL. +- [x] Добавить настройку API base URL: same-origin API. - [x] Добавить ввод/хранение operator token для MVP. - [x] Реализовать список устройств. - [x] Показать online/offline. @@ -140,9 +140,9 @@ - [x] Добавить поля/индексы для lifecycle, если текущей схемы недостаточно. - [x] Определить таймаут `claimed` команд. - [x] Вернуть зависшие `claimed` команды в `queued` или `expired`. -- [ ] Добавить `expires_at`. +- [x] Добавить `expires_at`. - [x] Добавить `attempt_count`. -- [ ] Добавить `max_attempts`. +- [x] Добавить `max_attempts`. - [x] Добавить `cancelled`. - [x] Добавить endpoint отмены команды. - [x] Добавить command history per device. @@ -160,7 +160,7 @@ - [x] `/etc/rmm-agent.conf`; - [ ] `/etc/config/rmm-agent`. - [ ] Добавить postinst/prerm scripts. -- [ ] Проверить установку на OpenWrt. +- [~] Проверить установку на OpenWrt. - [x] Описать build/install flow в `docs/openwrt.md`. ## Этап 6: Security Hardening @@ -171,7 +171,7 @@ - [x] Allowlist команд на сервере. - [x] Allowlist команд на агенте. - [x] Redaction sensitive command output. -- [~] Audit log для operator actions. +- [x] Audit log для operator actions. - [ ] Audit log для agent actions. - [ ] Token rotation для устройств. - [ ] Secure enrollment flow вместо постоянного shared token. @@ -185,63 +185,63 @@ ## Этап 7: OpenWrt Configuration Management -- [~] Спроектировать safe UCI operation model. +- [x] Спроектировать safe UCI operation model. - [x] Добавить read-only UCI inventory command. - [x] Добавить backup текущей конфигурации. -- [~] Добавить preview diff. -- [~] Добавить apply/commit/revert workflow. +- [x] Добавить preview diff. +- [x] Добавить apply/commit/revert workflow. - [x] Добавить restore из последнего локального backup. - [x] Добавить commit with connectivity confirmation. -- [~] Управление Wi-Fi SSID. +- [x] Управление Wi-Fi SSID. - [ ] Управление firewall rules. -- [~] Управление DHCP. +- [x] Управление DHCP. - [ ] Управление static routes. - [ ] Тесты на недопустимые изменения. ## Этап 8: Monitoring And Alerts - [x] Online/offline detection на основе `last_seen_at`. -- [~] Базовые system metrics через heartbeat. +- [x] Базовые system metrics через heartbeat. - [ ] История heartbeat. -- [ ] Хранение временных рядов метрик. -- [ ] WAN status. -- [ ] Packet loss checks. -- [ ] Latency checks. -- [ ] Alert rules. -- [ ] Alert state. +- [x] Хранение временных рядов метрик. +- [x] WAN status. +- [x] Packet loss checks. +- [x] Latency checks. +- [x] Alert rules. +- [x] Alert state. - [ ] Email notification. - [ ] Telegram notification. - [ ] Webhook notification. ## Этап 9: Remote Access -- [ ] Спроектировать reverse tunnel. -- [ ] Выбрать транспорт tunnel. -- [ ] Временный SSH-доступ через сервер. +- [x] Спроектировать reverse tunnel. +- [x] Выбрать транспорт tunnel. +- [x] Временный SSH-доступ через сервер. - [ ] Browser-based terminal. -- [ ] TCP port forwarding. -- [ ] Доступ к LuCI через tunnel. -- [ ] Ограничение доступа по времени. -- [ ] Audit events для remote sessions. +- [x] TCP port forwarding. +- [x] Доступ к LuCI через tunnel. +- [x] Ограничение доступа по времени. +- [x] Audit events для remote sessions. ## Этап 10: Packages And Updates - [x] Команда `opkg_list_installed`. - [ ] Нормализованный список установленных пакетов. -- [ ] `opkg update`. -- [ ] Проверка доступных обновлений. -- [ ] Установка пакета. -- [ ] Удаление пакета. +- [x] `opkg update`. +- [x] Проверка доступных обновлений. +- [x] Установка пакета. +- [x] Удаление пакета. - [ ] История изменений пакетов. -- [ ] Защита опасных операций подтверждением. -- [ ] Совместимость с конкретными версиями OpenWrt. +- [x] Защита опасных операций подтверждением. +- [~] Совместимость с конкретными версиями OpenWrt. ## Этап 11: Fleet Management -- [ ] Группы устройств. -- [ ] Теги. -- [ ] Поиск и фильтры. -- [ ] Массовые команды. +- [x] Группы устройств. +- [x] Теги. +- [x] Поиск и фильтры. +- [x] Массовые команды. - [ ] Rollout limits. - [ ] Canary-группы. - [ ] Политики. @@ -250,13 +250,13 @@ ## Этап 12: Production Hardening -- [ ] Structured logging. +- [x] Structured logging. - [ ] Server metrics. - [ ] Health checks глубже, чем `/healthz`. - [ ] DB backup/restore. - [ ] Версионированные миграции. - [ ] Graceful shutdown. -- [ ] Retry policies. +- [~] Retry policies. - [ ] E2E tests agent-server. - [ ] Load tests. - [ ] CI pipeline. @@ -277,15 +277,15 @@ - [x] Basic audit log. - [x] Web UI показывает устройство online. - [x] OpenWrt package устанавливает агент как service. -- [ ] MVP проверен на реальном OpenWrt-устройстве. +- [x] MVP проверен на реальном OpenWrt-устройстве. ## Ближайшие задачи 1. [ ] Собрать `rmm-agent.ipk` в OpenWrt buildroot. -2. [ ] Проверить агента на реальном OpenWrt. +2. [x] Проверить агента на реальном OpenWrt. 3. [x] Создать минимальный web UI. -4. [ ] Добавить расширенные metrics/inventory. -5. [ ] Добавить `max_attempts` и более явный command expiry. +4. [x] Добавить расширенные metrics/inventory. +5. [x] Добавить `max_attempts` и более явный command expiry. 6. [x] Начать UCI managed configuration. 7. [x] Добавить UCI backup command. 8. [x] Добавить UCI preview command. diff --git a/UI_CHECKLIST.md b/UI_CHECKLIST.md index f59787a..dad6b86 100644 --- a/UI_CHECKLIST.md +++ b/UI_CHECKLIST.md @@ -18,19 +18,19 @@ - [x] Управление пакетами. - [x] Удаленный SSH-доступ и LuCI. - [x] Аудит действий. -- [~] Обзор устройства понятен оператору. -- [~] История метрик пригодна для быстрого анализа. -- [~] Удаленный доступ запускается простым сценарием. -- [ ] Основные и экспертные функции визуально разделены. +- [x] Обзор устройства понятен оператору. +- [x] История метрик пригодна для быстрого анализа. +- [x] Удаленный доступ запускается простым сценарием. +- [x] Основные и экспертные функции визуально разделены. ## Этап 0. UX-аудит -- [ ] Составить полный список текущих экранов, панелей и кнопок. -- [ ] Для каждого элемента назначить действие: оставить, перенести, объединить или скрыть. -- [ ] Зафиксировать терминологию для оператора. -- [ ] Зафиксировать набор статусов и цветов. -- [ ] Определить основные пользовательские сценарии. -- [ ] Определить структуру навигации и маршруты страниц. +- [x] Составить полный список текущих экранов, панелей и кнопок. +- [x] Для каждого элемента назначить действие: оставить, перенести, объединить или скрыть. +- [~] Зафиксировать терминологию для оператора. +- [x] Зафиксировать набор статусов и цветов. +- [x] Определить основные пользовательские сценарии. +- [x] Определить структуру навигации и маршруты страниц. - [ ] Определить desktop и mobile макеты. ## Этап 1. Каркас и объекты @@ -46,8 +46,8 @@ - [x] Добавить фильтр по наличию проблем. - [ ] Добавить сортировку колонок. - [x] Открывать объект кликом по строке. -- [ ] Показывать массовые действия только после выбора объектов. -- [ ] Добавить loading, empty и error states таблицы. +- [~] Показывать массовые действия только после выбора объектов. +- [~] Добавить loading, empty и error states таблицы. - [ ] Проверить таблицу на 1366 px и 1920 px. - [ ] Сделать мобильное представление списка объектов. @@ -57,15 +57,15 @@ - [x] Добавить хлебную крошку возврата к объектам. - [x] Добавить вкладки «Обзор», «Клиенты и сеть», «Операции», «Сведения», «Эксперт». - [x] Показать статус и время последнего контакта. -- [ ] Показать WAN и доступность сервера. +- [x] Показать WAN и доступность сервера. - [x] Показать load, память, uptime и число клиентов. - [x] Убрать дублирующиеся и технические метрики. -- [ ] Показать активные предупреждения с приоритетами. +- [~] Показать активные предупреждения с приоритетами. - [x] Добавить компактные графики метрик. - [ ] Добавить выбор периода графиков. - [x] Добавить основную кнопку открытия LuCI. - [x] Добавить кнопку перехода к диагностике. -- [ ] Перенести перезагрузку и опасные действия в отдельное меню. +- [~] Перенести перезагрузку и опасные действия в отдельное меню. - [x] Убрать raw inventory с обзорной страницы. - [x] Убрать произвольные команды с обзорной страницы. - [x] Убрать редактирование группы и тегов с обзорной страницы. @@ -91,7 +91,7 @@ - [~] Показывать адреса, состояние и счетчики трафика. - [~] Показать основные маршруты. - [ ] Показывать Wi-Fi сети и подключенных клиентов. -- [ ] Спрятать низкоуровневые детали в раскрываемые блоки. +- [~] Спрятать низкоуровневые детали в раскрываемые блоки. - [~] Добавить loading, empty и error states. ## Этап 4. Операции @@ -103,14 +103,14 @@ - [x] Упростить создание удаленной сессии до выбора длительности. - [x] Спрятать host, порты и параметры туннеля в дополнительные настройки. - [x] Добавить действия «Открыть LuCI» и «Скопировать SSH». -- [ ] Показывать оставшееся время удаленной сессии. +- [~] Показывать оставшееся время удаленной сессии. - [x] Добавить понятное закрытие удаленной сессии. - [x] Объединить Preview и Stage в сценарий «Проверить → Применить». - [x] Показывать изменения перед применением. - [x] Понятно объяснять commit confirmed и автоматический откат. - [x] Добавить безопасные пресеты настроек. -- [ ] Перенести низкоуровневое управление пакетами в экспертный режим. -- [ ] Добавить подтверждение опасных операций. +- [x] Перенести низкоуровневое управление пакетами в экспертный режим. +- [x] Добавить подтверждение опасных операций. ## Этап 5. Сведения @@ -141,13 +141,13 @@ - [x] Добавить автообновление данных. - [x] Оставить одну глобальную кнопку обновления на экране объектов. - [x] Убрать постоянный выбор массовой команды. -- [ ] Показывать массовые действия только при выбранных объектах. -- [ ] Объединить дублирующие блоки состояния и метрик. -- [ ] Объединить диагностические действия. +- [~] Показывать массовые действия только при выбранных объектах. +- [x] Объединить дублирующие блоки состояния и метрик. +- [x] Объединить диагностические действия. - [x] Объединить Preview и Stage. -- [ ] Спрятать технические поля удаленного доступа. -- [ ] Спрятать raw JSON и raw UCI от оператора. -- [ ] Убрать опасные действия из основных кнопок. +- [x] Спрятать технические поля удаленного доступа. +- [~] Спрятать raw JSON и raw UCI от оператора. +- [x] Убрать опасные действия из основных кнопок. ## Общие состояния и качество @@ -155,7 +155,7 @@ - [~] Добавить единый компонент пустого состояния. - [ ] Добавить единый компонент ошибки. - [ ] Добавить toast-уведомления. -- [ ] Добавить единые диалоги подтверждения. +- [~] Добавить единые диалоги подтверждения. - [ ] Показывать request ID в раскрываемых деталях ошибки. - [ ] Добавить tooltips для непонятных иконок. - [ ] Проверить навигацию клавиатурой. @@ -171,19 +171,19 @@ - [~] Нормализовать данные клиентов. - [ ] Нормализовать состояние интерфейсов. -- [ ] Подготовить временные ряды для графиков. -- [ ] Добавить операторские операции поверх сырых команд. +- [x] Подготовить временные ряды для графиков. +- [x] Добавить операторские операции поверх сырых команд. - [ ] Добавить серверную пагинацию списка объектов при необходимости. - [ ] Добавить серверный поиск и сортировку при необходимости. ## Приемка редизайна -- [ ] За 10 секунд видно, какие объекты требуют внимания. -- [ ] Причина проблемы понятна без raw JSON. -- [ ] LuCI открывается максимум за два клика. -- [ ] Диагностика запускается максимум за три клика. -- [ ] Обычный оператор не видит raw UCI и произвольные команды. -- [ ] Опасные действия требуют явного подтверждения. +- [~] За 10 секунд видно, какие объекты требуют внимания. +- [~] Причина проблемы понятна без raw JSON. +- [x] LuCI открывается максимум за два клика. +- [x] Диагностика запускается максимум за три клика. +- [~] Обычный оператор не видит raw UCI и произвольные команды. +- [x] Опасные действия требуют явного подтверждения. - [ ] Основные сценарии работают на ширине 1366 px. - [ ] Основные сценарии работают на ширине 1920 px. - [ ] Основные сценарии доступны на мобильном экране.