11 KiB
11 KiB
План: Coordinator Admin UI и Worker Setup UI
Статус: план. Текущий
/ui— демонстрационный control room (джобы, ворклоады, docs). Два новых UI решают две разные задачи: управление платформой (админка координатора) и подключение машин как воркеров (установочный визард).
1. Цель
- Coordinator Admin UI (
/ui/admin) — полноценная консоль оператора: система, джобы, воркеры, юзеры/роли, ворклоады, настройки, метрики. - Worker Setup UI (
/ui/workers/setup) — пошаговый визард, который превращает любую машину (Linux/macOS/Windows, amd64/arm64) в воркера без чтения документации: выбрать платформу → получить готовую команду → запустить → убедиться, что машина появилась в «My machines».
Оба UI живут в бинарнике координатора (single-binary philosophy), защищены той же сессией (JWT через userservice), браузер по-прежнему не касается БД — только bounded read model от координатора.
2. Принципы
- Не демо: каждый экран работает от реального состояния (репозитории + metrics), без симуляции; пустые состояния информативны.
- Роли: всё в
/ui/admin— толькоadmin;/ui/workers/setup— любой аутентифицированный пользователь (ключи привязаны к аккаунту). - Секреты:
worker.tokenпоказывается только админу, с явным подтверждением и предупреждением; в командах setup-визарда по умолчанию плейсхолдер$(coordinator token). - Новые API —
/ui/admin/api/*(JSON), те же middleware (withUISession,requireAdmin), тот же паттерн bounded read model. - Оба движка БД (sqlite и postgres) поддерживаются одинаково; новые таблицы — миграции в обоих наборах.
3. Coordinator Admin UI (/ui/admin)
3.1 Экран «Обзор системы» — /ui/admin
- движок БД (sqlite/postgres), версия бинарника, data dir, uptime;
- занятое место blob-хранилища (байты по артефактам) и число артефактов;
- чипы: джобы/воркеры/таски по статусам (из существующих business metrics);
- токен воркера: кнопка «Показать worker token» (admin only, подтверждение).
3.2 Экран «Джобы» — /ui/admin/jobs
- таблица: id, ворклоад, статус, владелец, создан, завершён, результат;
- фильтры: статус, ворклоад, владелец; поиск по id (частичное совпадение);
- пагинация (limit/offset), переход в существующий detail-просмотр;
- действие: cancel (существующий usecase).
3.3 Экран «Воркеры» — /ui/admin/workers
- таблица: имя, id, статус (online/busy/offline), capabilities, trust, владелец, последний heartbeat;
- переключение trust (trusted/untrusted) для воркеров — новый usecase;
- индикация «какие ворклоады умеет» (capabilities из реестра).
3.4 Экран «Юзеры и ключи» — /ui/admin/users
- список юзеров через userservice (существующий прокси
callUserserviceAuthed); - verify/unverify, promote/demote (существующие действия);
- worker-ключи юзера: просмотр (без секрета), revoke.
3.5 Экран «Ворклоады» — /ui/admin/workloads
- каталог из embedded
workloads.json(уже есть read view); - enable/disable: новая таблица
workload_settings (workload TEXT PK, enabled BOOLEAN), миграции sqlite + postgres; каталог читается с учётом оверрайдов; - параметры: схема, reduction, upload_ready, ui_elements (read-only).
3.6 Экран «Настройки» — /ui/admin/settings
- read-only конфигурация без секретов: addr, storage dir, docs dir, лимиты (max upload, attempts, quorum), lease/reaper интервалы, engine;
- подсказки: где лежат миграции, как сделать бэкап sqlite (скопировать файл).
3.7 API (все — admin, JSON)
| Метод | Путь | Назначение |
|---|---|---|
| GET | /ui/admin/api/system |
движок, версия, storage usage, counts, worker token (admin) |
| GET | /ui/admin/api/jobs |
пагинированный список с фильтрами |
| GET | /ui/admin/api/workers |
список воркеров |
| POST | /ui/admin/api/workers/{id}/trust |
переключить trust |
| GET | /ui/admin/api/users |
список юзеров (userservice) |
| GET | /ui/admin/api/workloads |
каталог + enabled |
| POST | /ui/admin/api/workloads/{name}/enabled |
enable/disable |
| GET | /ui/admin/api/settings |
конфигурация (без секретов) |
4. Worker Setup UI (/ui/workers/setup)
4.1 Визард (4 шага)
- Платформа: автоопределение (navigator/platform + архитектура), ручной
выбор (linux/darwin/windows × amd64/arm64) → показ установочной команды
(
install.sh | bash -s worker,install.ps1сSCIMESH_COMPONENT=worker). - Способ аутентификации:
- a) токен serve-инстанса: поле ввода + (для admin) кнопка «вставить токен»
— забирает из
/ui/admin/api/system(показывается только админу); - b) worker key: форма создания ключа (существующий
POST /ui/api/worker-keys) — для кластерного режима;
- a) токен serve-инстанса: поле ввода + (для admin) кнопка «вставить токен»
— забирает из
- Готовая команда: полный блок
export ...+worker-agent(COORDINATOR_URL, токен/ключ, WORK_DIR, WORKER_NAME) + кнопка Copy; чек-лист зависимостей: Python 3, scimesh (pip install scimeshилиSCIMESH_PIP_PACKAGE). - Проверка:
worker-agent --check(новый флаг:GET /health+--version, без регистрации) + инструкция «появится в My machines».
4.2 Дополнительно
- сайдбар «My machines» (существующий список ключей с revoke);
- ссылка на этот же флоу из дашборда и из
install.sh worker(печать URL).
4.3 Изменения в агенте
worker-agent --check [--coordinator-url URL]: пингует координатор, печатает версии и пригодность (python3/scimesh видимость), exit 0/1.
5. Компоненты и структура кода
coordinator/internal/transport/http/
ui_admin.go # новые admin-хендлеры + шаблоны admin/*.html
ui_worker_setup.go # setup-визард + worker-setup.html
templates/admin.html # (заменяет текущий минимальный)
templates/worker-setup.html
server.go # роуты /ui/admin/* (requireAdmin), /ui/workers/setup
coordinator/internal/usecase/
admin.go # AdminSystem/ListJobsAdmin/ListWorkersAdmin/WorkloadSettings
ports.go # + PaginatedJobs(ctx, filter, limit, offset)
coordinator/internal/storage/{sqlite,postgres}/
ui_read_repo.go # + ListJobsPaginated, StorageStats
migrations/*.sql # + workload_settings
coordinator/internal/agent/
main.go / daemon # + --check mode
coordinator/cmd/coordinator/main.go # (serve уже отдаёт UI; правки не нужны)
6. Милестоуны
- M1. Admin-фундамент: экран «Система» + таблица джобов (фильтры, пагинация) + storage usage. API + шаблоны + тесты.
- M2. Admin-управление: воркеры (trust), юзеры/ключи (userservice),
ворклоады enable/disable (таблица
workload_settings+ миграции обоих движков), настройки (read-only). - M3. Worker Setup: визард 4 шага +
worker-agent --check+ admin-кнопка «вставить токен» + ключевой флоу (токен/ключ). - M4. Полировка и верификация: пустые состояния, mobile, копирование, E2E в браузере (admin-флоу и setup-флоу с реальным worker-agent), обновление mkdocs/standalone.md, CI зелёный.
7. Тестирование
- Go (unit): usecase admin (memstore + sqlite), permission-тесты
(admin vs user → 403), фильтры/пагинация, enable/disable ворклоадов
(схема учитывается),
--check(с/без координатора). - Go (integration, postgres): пагинация и storage-метрики на реальной БД.
- E2E (браузер): вход админом →
/ui/adminпоказывает реальную систему;/ui/workers/setup→ сгенерированная команда запускаетworker-agentна той же машине → воркер появляется в «My machines» и берёт джоб. - CI: существующие джобы + новые тесты в общем
go test -race; sqlite и postgres пути одинаково зелёные.
8. Открытые решения
- enable/disable ворклоадов: хранить в
workload_settings(миграции обоих движков); решение принято — таблица добавляется в M2. - Токен в UI: только админ, с подтверждением; в командах визарда — плейсхолдер, чтобы не светить секрет в логах истории.
worker-agent --check: без регистрации, только health + версии.- Скоуп v1: без редактирования конфигурации и без управления миграциями
из UI (это задача
setup/CLI).