3737- безопасную auth-логику (JWT access + refresh, Argon2, rate limit)
3838- чистую слоистую архитектуру (routes/services/repositories/models)
3939- полноценную наблюдаемость (logs + metrics + tracing)
40+ - измеримую производительность (Locust, Redis cache, Prometheus, Grafana)
4041- production-ready инфраструктуру (Docker, CI/CD, GHCR)
4142
4243## Что реализовано
4344
4445- Регистрация, логин, refresh, logout, endpoint ` /me `
4546- CRUD задач с валидацией дедлайна и ownership-check
47+ - Фильтрация, сортировка и пагинация списка задач
4648- CRUD тегов и связь many-to-many ` Task <-> Tag `
49+ - Dashboard endpoint с параллельной агрегацией задач, тегов и счётчиков по статусам
50+ - Readiness-check для БД и Redis (` /health/ready ` )
51+ - Redis-кэш списка задач ` /tasks ` с TTL, hit/miss-метриками и инвалидацией при изменениях
4752- Ограничение запросов по IP для auth-ручек через Redis Lua script
4853- Корреляция запросов через ` X-Request-ID `
4954- Структурированные JSON-логи с ` trace_id ` и ` span_id `
119124- ` PATCH /tags/{tag_id} `
120125- ` DELETE /tags/{tag_id} `
121126
127+ ### Dashboard
128+
129+ - ` GET /dashboard `
130+
122131### Service endpoints
123132
124133- ` GET /metrics `
125134- ` GET /api/v1/health/db `
126135- ` GET /api/v1/health/redis `
136+ - ` GET /api/v1/health/ready `
127137
128138## Локальный запуск через Docker Compose
129139
@@ -148,6 +158,7 @@ SECRET_KEY=your_secret_key_min_32_chars
148158``` env
149159ALGORITHM=HS256
150160REDIS_URL=redis://localhost:6379/0
161+ TASKS_LIST_CACHE_TTL_SECONDS=60
151162ACCESS_TOKEN_EXPIRE_MINUTES=10
152163REFRESH_TOKEN_EXPIRE_DAYS=7
153164GRAFANA_ADMIN_USER=admin
@@ -197,6 +208,28 @@ uv run uvicorn app.main:app --reload
197208- базовые метрики:
198209 - ` http_requests_total `
199210 - ` http_request_duration_seconds `
211+ - метрики кэша списка задач:
212+ - ` tasks_cache_hits_total `
213+ - ` tasks_cache_misses_total `
214+
215+ ## Производительность
216+
217+ Нагрузочный прогон для сравнения кэша списка задач ` /api/v1/tasks ` :
218+
219+ - профиль нагрузки: ` Locust ` , ` 100 users ` , ` ramp-up 10/s ` , ` 5 минут `
220+ - сравнение режимов: ` TASKS_LIST_CACHE_TTL_SECONDS=60 ` и ` TASKS_LIST_CACHE_TTL_SECONDS=0 `
221+
222+ Зафиксированный эффект:
223+
224+ - ` GET /api/v1/tasks p95 ` : ` 120 ms -> 80 ms ` (` -33.3% ` )
225+ - ` GET /api/v1/tasks avg ` : ` 46.96 ms -> 31.76 ms ` (` -32.4% ` )
226+ - ` GET /api/v1/tasks RPS ` : ` 49.7 -> 53.9 ` (` +8.5% ` )
227+ - ` Aggregated p95 ` : ` 120 ms -> 84 ms ` (` -30.0% ` )
228+ - ` Aggregated avg ` : ` 45.14 ms -> 33.62 ms ` (` -25.5% ` )
229+ - ` Cache hit ratio ` : ` 42.9% `
230+
231+ Формулировка эффекта:
232+ - Redis-кэш ускоряет чтение списка задач и снижает задержку без деградации error rate под смешанной нагрузкой.
200233
201234### Tracing
202235
0 commit comments