Категория: feature · Приоритет: medium · Размер: M · Ранг: 6/10
Что построить
Новая первая вкладка «Обзор» со stat-карточками: всего пользователей, активных/отключённых/истёкших, онлайн сейчас, суммарный трафик флота (вверх/вниз), число узлов и недоступных панелей. Чисто read-only лендинг.
Паритет с конкурентами
Remnawave (Home overview: online users, active/expired, трафик Today/Week/Month), Marzneshin/Marzban (users monitoring + online), 3x-ui (дашборд с графиками). Стартовая сводная страница есть у всех.
Чего не хватает сейчас (код)
В SPA ровно три вкладки (index.html: Пользователи / Узлы / Конфиг Mihomo) — стартового обзора нет. Данные для агрегатов уже в кэше флита (число подписчиков, суммарный Up/Down, истёкшие/отключённые), но нигде не сводятся. Read-эндпоинта со сводкой нет.
Зачем
Сводка с первого взгляда — здоровье и рост: оператор сразу видит, кто активен, сколько истекло и какова нагрузка, без листания таблицы. Самая запрашиваемая операторами фича дашборда; у subgen стартовой страницы нет вообще.
Предлагаемая реализация
Новая ручка dashboard_get (GET /admin/api/dashboard, openapi → ogen) — тонкий хендлер, агрегирующий по кэшу флита (fleet.Fleet) и счётчику юзеров: статусы, суммарный трафик, число узлов/недоступных панелей. Онлайн-число — из #110 (онлайн-монитор), при его отсутствии секция скрыта. Во Vue — новая вкладка с grid карточек в существующих токенах темы (app.css).
Затронутые файлы
openapi/dashboard_get.yaml (новый) + openapi.yaml
internal/handlers/dashboard_get/ (новый) + contract.go, internal/service/fleet/ (агрегаты)
internal/handlers/web/static/{index.html,app.js,app.css}
Продуктовый ресёрч: изучены аналоги (Marzban/Marzneshin, 3x-ui, Remnawave, Hiddify, sub-store + клиентские стандарты импорта). Паритет и subgen-gap код-обоснованы. Ранг = продуктовый приоритет.
Категория: feature · Приоритет: medium · Размер: M · Ранг: 6/10
Что построить
Новая первая вкладка «Обзор» со stat-карточками: всего пользователей, активных/отключённых/истёкших, онлайн сейчас, суммарный трафик флота (вверх/вниз), число узлов и недоступных панелей. Чисто read-only лендинг.
Паритет с конкурентами
Remnawave (Home overview: online users, active/expired, трафик Today/Week/Month), Marzneshin/Marzban (users monitoring + online), 3x-ui (дашборд с графиками). Стартовая сводная страница есть у всех.
Чего не хватает сейчас (код)
В SPA ровно три вкладки (
index.html: Пользователи / Узлы / Конфиг Mihomo) — стартового обзора нет. Данные для агрегатов уже в кэше флита (число подписчиков, суммарный Up/Down, истёкшие/отключённые), но нигде не сводятся. Read-эндпоинта со сводкой нет.Зачем
Сводка с первого взгляда — здоровье и рост: оператор сразу видит, кто активен, сколько истекло и какова нагрузка, без листания таблицы. Самая запрашиваемая операторами фича дашборда; у subgen стартовой страницы нет вообще.
Предлагаемая реализация
Новая ручка
dashboard_get(GET /admin/api/dashboard, openapi → ogen) — тонкий хендлер, агрегирующий по кэшу флита (fleet.Fleet) и счётчику юзеров: статусы, суммарный трафик, число узлов/недоступных панелей. Онлайн-число — из #110 (онлайн-монитор), при его отсутствии секция скрыта. Во Vue — новая вкладка с grid карточек в существующих токенах темы (app.css).Затронутые файлы
openapi/dashboard_get.yaml(новый) +openapi.yamlinternal/handlers/dashboard_get/(новый) +contract.go,internal/service/fleet/(агрегаты)internal/handlers/web/static/{index.html,app.js,app.css}Продуктовый ресёрч: изучены аналоги (Marzban/Marzneshin, 3x-ui, Remnawave, Hiddify, sub-store + клиентские стандарты импорта). Паритет и subgen-gap код-обоснованы. Ранг = продуктовый приоритет.