diff --git a/docs/sprint4-progress.md b/docs/sprint4-progress.md index 3257606..e9db92a 100644 --- a/docs/sprint4-progress.md +++ b/docs/sprint4-progress.md @@ -25,11 +25,45 @@ + ClientSaleId через маркер `pos:GUID32` в `RetailSale.Notes`. Pre-flight на остатки — недостающие позиции попадают в `Failed`, остальные проводятся. 7 интеграционных тестов. -3. [ ] **P1-17 Метрики Prometheus** — `prometheus-net.AspNetCore`, `/metrics`. +3. [x] **P1-17 Метрики Prometheus** — `prometheus-net.AspNetCore`, `/metrics`. `http_requests_total`, `http_request_duration_seconds`, `db_query_duration_seconds` (через EF interceptor), бизнес: `sales_posted_total`, `supplies_posted_total`, `documents_error_total`. `docs/observability.md` с образцом Grafana dashboard. + ✅ `prometheus-net.AspNetCore@8.2.1` + `DbMetricsInterceptor` (singleton, + EF Core `DbCommandInterceptor`). Бизнес-счётчики в `AppMetrics` — + инкрементятся в успешных Post'ах Sales/Supplies/POS. Endpoint + `/metrics` без auth. `docs/observability.md` с scrape-конфигом, + образцом Grafana и alert-rules (HighErrorRate / DbSerializationContention / + NoSalesIn30Min). 3 интеграционных теста. + +## Итог + +**Все 3 пункта выполнены.** Спринт 4 (POS Sync API + observability) завершён 2026-05-28. + +Сводка: +- **P1-12a Контракты POS** — `food-market.shared/Pos/V1/SyncDtos.cs`, версионирование + через namespace, двойная идемпотентность, 3 unit-теста. +- **P1-12b POS Sync API** — `/api/pos/v1/sync` + `/api/pos/v1/sales` с batch- + идемпотентностью (`PosBatchAck`) + per-sale (`ClientSaleId` через `Notes`). + 7 интеграционных тестов. +- **P1-17 Prometheus** — `/metrics`, EF interceptor, бизнес-счётчики, + `docs/observability.md` с Grafana/alerts. 3 интеграционных теста. + +**Сборка:** зелёная. +**Тесты:** 27 unit + 59 integration (49 sprint3 + 7 POS + 3 Metrics) **зелёные**. +**Web:** не трогали в этом спринте. + +### POS-side notes +WPF/POS UI (`food-market.pos`, net8.0-windows) собирается только на Windows +с Windows SDK — оставлен как отдельный шаг на Windows-машине. Сервер +готов принимать кассу через `/api/pos/v1/*`. + +### Что не сделано в спринте (требует внешних участников) +- ОФД-интеграция (нужен оператор данных — `Транском`/`Касса24`); +- MoySklad webhook-токены (production-grade приёмка нотификаций); +- Прод-деплой stage→prod (нужен пользователь для проверки stage сначала); +- WPF/POS UI (Windows-машина с SDK). ## Лог