Решение: вкладка «Файловые логи» в Monitoring с подвкладками files и audit. Co-authored-by: Cursor <[email protected]>
85 lines
4.2 KiB
Markdown
85 lines
4.2 KiB
Markdown
# 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**
|