Страница /reports трансформирована в Центр статусов задач:
Backend:
- GET /api/reports/summary — агрегированные счётчики тип×статус (5 корзин)
- GET/PUT /api/settings/reports — глобальные настройки отчётов
- _filter_tasks_by_rbac() — row-level фильтрация по роли
- normalize_task_report: LLM-валидация с ошибками → FAILED/PARTIAL
- get_summary(): 5 корзин pending/running/awaiting_input/success/failed
Frontend:
- TaskCenterModel.svelte.ts (400 строк) — Screen Model
- SummaryPanel — сводная панель с цветовым кодированием и active filter
- ReportCard — humanized labels, duration, task_id, failed border
- FilterBar — search + sort + time range с label'ами
- Pagination — showingText, уникальные id для select
- Quick views: «Упавшие», «В работе», «Успешные»
- TaskDrawer: scroll-to-error, footer скрыт для terminal, «Н/Д» fix
Тесты: 48 backend + 38 frontend (2521 всего)
Build: ✅ Console errors: 0
134 lines
4.7 KiB
Markdown
134 lines
4.7 KiB
Markdown
#region Quickstart [C:2] [TYPE ADR] [SEMANTICS quickstart, development, setup, task-status-center]
|
|
@BRIEF Developer quickstart for the Task Status Center feature — setup, verification commands, and key file locations.
|
|
|
|
## Prerequisites
|
|
|
|
- Docker + Docker Compose (for full stack)
|
|
- Python 3.13+ with venv (for backend-only development)
|
|
- Node.js 22+ (for frontend-only development)
|
|
- Git branch: `034-task-status-center`
|
|
|
|
## Quick Start (Docker)
|
|
|
|
```bash
|
|
# 1. Switch to feature branch
|
|
git checkout 034-task-status-center
|
|
|
|
# 2. Start full stack
|
|
docker compose up -d
|
|
|
|
# 3. Frontend at http://localhost:5173
|
|
# 4. Backend API at http://localhost:8000
|
|
# 5. WebSocket at ws://localhost:8000/ws/task-events?token=...
|
|
```
|
|
|
|
## Development Setup (without Docker)
|
|
|
|
```bash
|
|
# Backend
|
|
cd backend
|
|
python -m venv .venv && source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
python -m uvicorn src.app:app --reload --port 8000
|
|
|
|
# Frontend (separate terminal)
|
|
cd frontend
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
## Verification Gates
|
|
|
|
```bash
|
|
# Backend: run all tests
|
|
cd backend && source .venv/bin/activate && python -m pytest -v
|
|
|
|
# Backend: run reports-specific tests
|
|
python -m pytest tests/api/routes/test_reports.py -v
|
|
python -m pytest tests/services/reports/ -v
|
|
|
|
# Backend: lint
|
|
python -m ruff check .
|
|
|
|
# Frontend: run all tests
|
|
cd frontend && npm run test
|
|
|
|
# Frontend: run reports-specific tests
|
|
npm run test -- src/lib/components/reports/
|
|
|
|
# Frontend: lint
|
|
npm run lint
|
|
```
|
|
|
|
## Key Files
|
|
|
|
### Backend (to create/modify)
|
|
|
|
| File | Change | Purpose |
|
|
|------|:------:|---------|
|
|
| `backend/src/api/routes/reports.py` | MODIFY | Add `/summary` endpoint; enhance `list_reports` with RBAC |
|
|
| `backend/src/services/reports/report_service.py` | MODIFY | Add `get_summary()`, `_filter_tasks_by_rbac()` |
|
|
| `backend/src/models/report.py` | MODIFY | Add `TaskSummary`, `StatusCounts`, `TaskTypeSummary` schemas |
|
|
| `backend/tests/api/routes/test_reports.py` | MODIFY | Add summary endpoint tests |
|
|
| `backend/tests/services/reports/test_report_service.py` | MODIFY | Add RBAC filtering tests |
|
|
|
|
### Frontend (to create/modify)
|
|
|
|
| File | Change | Purpose |
|
|
|------|:------:|---------|
|
|
| `frontend/src/lib/models/TaskCenterModel.svelte.ts` | **NEW** | Screen Model — state, WebSocket, filtering, actions |
|
|
| `frontend/src/types/reports.ts` | **NEW** | TypeScript DTOs matching backend schemas |
|
|
| `frontend/src/lib/api/reports.ts` | MODIFY | Add `getReportsSummary()`, add types |
|
|
| `frontend/src/routes/reports/+page.svelte` | **REWRITE** | Thin render layer with summary + filters + list |
|
|
| `frontend/src/routes/reports/+page.ts` | **NEW** | Load function for URL query param parsing |
|
|
| `frontend/src/lib/components/reports/SummaryPanel.svelte` | **NEW** | Summary dashboard grid component |
|
|
| `frontend/src/lib/components/reports/FilterBar.svelte` | **NEW** | Filter bar component |
|
|
| `frontend/src/lib/components/reports/TaskList.svelte` | MODIFY | Add pagination, active-first sort |
|
|
| `frontend/src/lib/components/reports/reportTypeProfiles.ts` | MODIFY | Add `clean_release` profile |
|
|
| `frontend/tests/lib/components/reports/SummaryPanel.test.ts` | **NEW** | Component UX tests |
|
|
| `frontend/tests/lib/components/reports/FilterBar.test.ts` | **NEW** | Component UX tests |
|
|
| `frontend/tests/lib/models/TaskCenterModel.test.ts` | **NEW** | Model unit tests |
|
|
|
|
## Manual Testing Scenarios
|
|
|
|
### 1. Summary Dashboard (US1)
|
|
1. Create tasks of different types (migration, backup, validation) via the API/UI.
|
|
2. Open `/reports` — verify summary cards show correct counts.
|
|
3. Complete a running task — verify count updates via WebSocket within 2 seconds.
|
|
|
|
### 2. Filtering (US2)
|
|
1. Click a summary card — verify task list filters to matching type+status.
|
|
2. Use multi-select dropdowns — verify combination filtering.
|
|
3. Type in search box — verify text filtering.
|
|
4. Select time range — verify temporal filtering.
|
|
|
|
### 3. Task Drill-Down (US3)
|
|
1. Click a FAILED task — verify Task Drawer opens with logs.
|
|
2. Click a RUNNING task — verify live log streaming in Drawer.
|
|
3. Hover over a task row — verify tooltip with details.
|
|
|
|
### 4. RBAC (TSC-FR-009)
|
|
1. Login as viewer — verify only own tasks visible.
|
|
2. Login as analyst — verify own + system tasks visible.
|
|
3. Login as admin — verify all tasks visible.
|
|
|
|
### 5. WebSocket Recovery
|
|
1. Open `/reports` with WebSocket connected.
|
|
2. Kill backend (`docker compose stop backend`).
|
|
3. Verify: yellow reconnecting indicator → red disconnected indicator.
|
|
4. Restart backend — verify auto-reconnect within 5 seconds (SC-005).
|
|
|
|
## Test Data
|
|
|
|
```python
|
|
# Create test tasks via API:
|
|
POST /api/tasks
|
|
{
|
|
"plugin_id": "superset-migration",
|
|
"action": "migrate_dashboard",
|
|
"params": {"source_env": "prod", "target_env": "staging", "dashboard_id": 42}
|
|
}
|
|
```
|
|
|
|
#endregion Quickstart
|