# Creative: Runtime Logs UI (CP-2) 📌 **CREATIVE PHASE START: Runtime Logs Web UI** ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ## 1️⃣ PROBLEM **Description:** Оператору нужен просмотр файлов runtime-логов (`*.log` из sidecar `stack-runtime-logs`), tail/preview и sync-очистка с audit. API будет доступен только на `evobgp-all` с volume; UI должен корректно показывать `503` и направлять к документации. **Requirements:** - Список файлов: имя, размер, mtime - Preview (tail) в dialog или panel - Cleanup с ConfirmDialog (operator) - Просмотр cleanup audit (viewer+) - Empty/unavailable state при `503` **Constraints:** - Не смешивать с PostgreSQL maintenance logs (уже tab `postgres` в Monitoring) - `AppDataTable`, `ScrollPreBlock`, `ConfirmDialog` - Sync DELETE — UI ждёт ответ, показывает spinner на кнопке ## 2️⃣ OPTIONS | Option | Описание | |--------|----------| | **A** | Новая вкладка **«Файловые логи»** в `/monitoring` (`?tab=runtime-logs`) | | **B** | Отдельный route `/runtime-logs` в mainNav | | **C** | Секция в Operations (рядом с jobs) | | **D** | Подвкладка внутри Monitoring → PostgreSQL | ## 3️⃣ ANALYSIS | Criterion | A Monitoring tab | B Own route | C Operations | D Under Postgres | |-----------|------------------|-------------|--------------|------------------| | Логическая группировка | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐ | | Переиспользование Monitoring layout | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | | Не перегружать nav | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | | Рядом с infra observability | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | | Реализация (diff) | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | **Key insights:** - Monitoring уже = health + Postgres; файловые логи — ещё один «операционный» источник диагностики. - Отдельный route раздувает nav (8+ пунктов mainNav). - Operations семантически про ревизии/jobs, не raw FS. ## 4️⃣ DECISION **Selected: Option A** — вкладка в Monitoring. **Structure:** ``` /monitoring ├─ system (существует) ├─ postgres (существует) └─ runtime-logs (новая) ``` **Внутри вкладки `runtime-logs` — nested Tabs:** | Sub-tab | Содержание | |---------|------------| | `files` | AppDataTable файлов + actions: Просмотр / Очистить | | `audit` | Таблица cleanup audit (`GET /v1/runtime-logs/cleanup-audit`) | **Unavailable (`503`):** `EmptyState` с текстом: «Файловые логи доступны только на evobgp-all с примонтированным каталогом runtime-logs» + ссылка на docs. **Preview:** `Dialog` + `ScrollPreBlock`, загрузка `GET .../files/{name}?lines=200` (лимиты из CP-3). **Cleanup:** `ConfirmDialog` — текст с именем файла и размером; `DELETE ?mode=truncate` по умолчанию; опция «Удалить файл» в dropdown для operator. **Rationale:** минимум nav-churn, консистентность с postgres monitoring, один URL `/monitoring?tab=runtime-logs`. ## 5️⃣ IMPLEMENTATION NOTES - `web/src/lib/components/monitoring/RuntimeLogsTab.svelte` - `web/src/lib/runtime-logs/runtime-logs-api.ts` - `monitoring/+page.svelte`: `TabsTrigger value="runtime-logs"` label «Файловые логи» - Parse `?tab=` включить `runtime-logs` - Иконка вкладки: `FileText` или `HardDrive` (уже импортирован в monitoring) - KPI сверху (опционально): суммарный размер, число файлов — из list response ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 **CREATIVE PHASE END: Runtime Logs UI**