Files
dashboard/doc/CHAT_CONTEXT_FULL.md
T

7.8 KiB
Raw Blame History

Dashboard Service - Full Chat Context For Next Agent

Updated: 2026-04-16 Owner: naeel

1. Что это за сервис

Cloud Dashboard - отдельный веб-сервис (backend + frontend), который показывает инстансы облака, фильтрацию, детали, историю операций и граф зависимостей.

Текущая реализация:

  • Backend: Python + FastAPI
  • Frontend: статический SPA (HTML/CSS/vanilla JS)
  • Граф: Cytoscape
  • Runtime: контейнер в Kubernetes

2. Бизнес-цель

Сделать рабочий дашборд для повседневной эксплуатации:

  • быстрый вход по API token
  • фильтрация по статусам
  • понятная таблица и карточки статистики
  • просмотр параметров/зависимостей инстанса
  • визуализация зависимостей
  • стабильная работа в PROD

3. Ключевые сделанные фичи

3.1 Аутентификация и сессия

  • Логин по API token.
  • Токен сохраняется в localStorage.
  • Logout очищает токен.

3.2 Выбор стенда (ВАЖНО)

Сделано переключение окружений на экране логина:

Как работает:

  • выбранный стенд сохраняется в localStorage как deck_env
  • frontend отправляет в backend заголовок X-Deck-Env
  • backend выбирает base URL по whitelist
  • если значение некорректное, fallback на test

3.3 Таблица и UX

  • Фильтры статусов с чекбоксами (увеличены).
  • Sticky header и правильный скролл области таблицы.
  • Сортировки по колонкам.
  • Статистика по статусам.
  • Detail row с вкладками: параметры, история, зависимости, граф.

3.4 Зависимости и графы

Добавлены два режима:

  • граф для конкретного инстанса
  • общий граф для running

Оптимизации:

  • lazy-load графа (не считать сразу)
  • кэш графа на backend с TTL
  • клиентская подвыборка subgraph
  • индикаторы загрузки
  • open large graph in modal/fullscreen behavior при большом числе узлов

UI графа:

  • прямоугольные узлы
  • более крупный и читаемый текст
  • улучшенные стрелки/контраст
  • упрощенный layout (grid-подход)

3.5 Визуал и брендинг

  • day/night переключатель темы с сохранением в localStorage
  • favicon/logo из docs assets
  • удалены лишние декоративные элементы

4. Техническая архитектура

Browser

  • SPA рендерит UI
  • вызывает backend по префиксу /dashboard/api
  • хранит deck_token и deck_env в localStorage

Backend (FastAPI)

Главные маршруты:

  • GET /api/instances
  • GET /api/instances/{uid}
  • GET /api/graph

Транспорт:

  • принимает X-Deck-Token
  • принимает X-Deck-Env
  • проксирует запросы в Deck API выбранного окружения

Граф:

  • собирается из списка инстансов и деталей
  • edges из dependencies/dependentInstances
  • кэш in-memory по ключу token+env+statuses

Kubernetes

  • deployment/service/ingress в namespace terra
  • публичный доступ через /dashboard

5. Эксплуатационные детали

  • Сервис не использует БД.
  • Основная интеграция backend - только с Deck API.
  • Узкое место в производительности обычно внешний API, не сам UI.
  • В проекте уже обсужден путь: сначала стабилизировать логику на Python, потом при необходимости переписать backend на Go с сохранением API контрактов.

6. История решений (сжатая)

  1. Сначала починили критичные JS ошибки и нестабильный логин.
  2. Исправили фильтры статусов и прокинули корректный parsing на backend.
  3. Переделали скролл + sticky элементы.
  4. Добавили графы зависимостей, затем несколько итераций UX/производительности.
  5. Сделали lazy загрузку и кэш.
  6. Подчистили визуал (читаемость, стрелки, тема, favicon/logo).
  7. Реализовали выбор стенда PROD/DEV/TEST на логине с end-to-end маршрутизацией.
  8. Вынесли сервис в новую репу-папку dashboard и добавили правила агента + gitignore.

7. Что уже перенесено в новую репу dashboard

Из старого пути cloud-dashboard в новый dashboard перенесены:

  • Dockerfile
  • main.py
  • requirements.txt
  • static/
  • k8s/

Дополнительно создано:

  • .github/copilot-instructions.md (скопированы правила агента)
  • .gitignore (Python/кэши/локальные артефакты)

8. Что важно для нового агента

  1. Не ломать контракт frontend/backend без явного запроса.
  2. Заголовки X-Deck-Token и X-Deck-Env обязательны.
  3. Поддерживать 3 стенда через whitelist.
  4. Не тащить секреты/токены в git.
  5. Для графа сохранять lazy-load и кэш (иначе будет тяжелая загрузка).

9. Рекомендованный план ближайших шагов

  1. Сделать первичный commit в новой репе dashboard.
  2. Настроить CI:
    • lint
    • build image
    • push image
    • deploy (опционально)
  3. Добавить smoke tests:
    • /api/instances с разными env
    • /api/graph с фильтрами
  4. Подготовить migration checklist для возможного будущего Go backend.

10. Definition of Done (текущее состояние)

Сервис:

  • работает в k8s
  • логин и фильтры стабильны
  • графы и тема работают
  • выбор стенда реализован и сохраняется
  • код перенесен в новую папку/repo baseline

11. Операционная дисциплина (КРИТИЧЕСКОЕ)

Для нового агента это обязательное правило:

  • Все команды по проекту выполнять ТОЛЬКО через SSH на ВМ.

SSH-шаблон: ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 naeel@5.172.178.213 КОМАНДА

Локально ЗАПРЕЩЕНО выполнять:

  • git-команды проекта
  • docker-команды
  • kubectl-команды
  • curl к API проекта
  • bash/python/go/тесты проекта

Почему:

  • так исключаются конфликты сред и ложные результаты;
  • единая точка выполнения (ВМ) дает предсказуемость и воспроизводимость.