From a7ed350734a033632f0dc18b729836d7952f9386 Mon Sep 17 00:00:00 2001 From: Rustam Khalimov Date: Sun, 13 Sep 2026 18:13:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dev-=D1=81=D1=82=D0=B5=D0=BA:=20frontend=20=D0=B8=20ob?= =?UTF-8?q?servability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В dev-стек добавлены deal-frontend (:8080, SPA через Caddy) и storage-service; профиль observability расширен Loki/Promtail/Grafana. Статус Telegram: account из живого сервиса (KV — фолбэк), connected = phase ready. --- Техническая-документация.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Техническая-документация.md b/Техническая-документация.md index 9b17463..e458951 100644 --- a/Техническая-документация.md +++ b/Техническая-документация.md @@ -286,7 +286,7 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) -- compose.prod; конфиг `deploy/observability/prometheus.yml` — job `deal` с таргетами `core/telegram-service/ai-service/ml-service:9464` (target-метка `service`), retention 15 суток (volume `deal_prometheus_data`). UI — `127.0.0.1:9090` (оператору по SSH-туннелю). В dev тот же сервис - добавлен в `deploy/compose.dev.yml` (профиль `observability`, UI `localhost:9090`). + добавлен в `deploy/compose.dev.yml` (профиль `observability`): в dev также `loki`/`promtail`/`grafana` (Grafana `localhost:3001`, admin/admin), `tempo`/`otel-collector` (трейсы, UI :3200) и `cadvisor`/`node-exporter` (ресурсы); Prometheus — `localhost:9090`. - **Grafana-провижининг**: `datasources/datasources.yml` — датасорсы Loki (uid `loki`, default) и Prometheus (uid `prometheus`, `http://prometheus:9090`); дашборд `Deal-Metrics-Overview` (uid `deal-metrics`) в папке «Дейл»: RPS/p95/5xx по сервисам, токены и вызовы AI/ML, глубины очередей, активные сессии, @@ -321,12 +321,16 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) -- | `deal-minio` | 9000/9001 | MinIO (вложения; в Local-режиме необязателен) | | `deal-core` | 5080 / 5082 | Deal.Api: HTTP `/api` + gRPC-ингресс telegram | | `deal-telegram-service` / `deal-ai-service` / `deal-ml-service` | 5101/5102/5103 | автономные сервисы этапа 6 | +| `deal-storage-service` | **5104** | хранилище вложений (storage-service) | +| `deal-frontend` | **8080** | SPA (Vite) через Caddy: статика + `/api → core:5080` | `docker compose -f deploy/compose.dev.yml up -d --build` — весь стек в сквозном gRPC-режиме (`Services__*__UseLocal=false`); `sh scripts/dev-smoke.sh` — одна команда (подъём → health → login → `/api/tg/status` → `POST /api/cards` → trash → флашер MlOutbox → `/api/ml/status`; trap → down). Host-режим (core с хоста, Local-заглушки) — §13.1–13.6. +Профиль `observability` (`--profile observability`) добавляет `prometheus`/`tempo`/`otel-collector`/`cadvisor`/`node-exporter` и `loki`/`promtail`/`grafana`: локально UI `http://localhost:8080`, Grafana `http://localhost:3001` (admin/admin), Prometheus `:9090`, Loki `:3100`, Tempo `:3200`. + ### Prod-стек (`deploy/compose.prod.yml`) - Одна внутренняя сеть; наружу — только **caddy** (80/443): TLS (шапка `deploy/caddy/Caddyfile` — @@ -988,6 +992,8 @@ ml 36/36 PASS; build 0/0 всех четырёх sln; `docker compose -f deploy/ | `deal-telegram-service` | **5101** | Telegram: сессии/QR/диалоги/мониторинг/backfill/discovery-операции | | `deal-ai-service` | **5102** | LLM-фасад: Filter/Classify/GenerateKeywords/EvaluateFit | | `deal-ml-service` | **5103** | инкрементальная модель per-tenant: predict/train/status/reset | +| `deal-storage-service` | **5104** | хранилище вложений (storage-service) | +| `deal-frontend` | **8080** | SPA (Vite) через Caddy: статика + `/api → core:5080` | Порт каждого сервиса — env `GRPC_PORT` (контейнерный 5101/5102/5103), порт ингресса core — env `GRPC_INGRESS_PORT` (5082). Health-проверки контейнеров — встроенный gRPC-health (`grpc_health_probe` @@ -1035,7 +1041,7 @@ ml 36/36 PASS; build 0/0 всех четырёх sln; `docker compose -f deploy/ ```sh cd /c/telbase -docker compose -f deploy/compose.dev.yml up -d --build # весь стек (первый прогон собирает 4 образа) +docker compose -f deploy/compose.dev.yml --profile observability up -d --build # весь стек: 5 процессов + frontend + observability sh scripts/dev-smoke.sh # сквозной smoke и авто-очистка (trap → down) docker compose -f deploy/compose.dev.yml down # погасить стек вручную (volumes сохраняются) ``` @@ -1062,7 +1068,7 @@ docker compose -f deploy/compose.dev.yml down # погасить ст > `Deal.Api/Sources/SourceIngressGrpcService` (`sources.proto` → `PushSource`, proto → домен через > `SourceProtoMapper`, тенант — `IngressTenantResolver`, превью — `TelegramSourceIngestObserver`). > `TelegramIngressService` обслуживает только `SyncDialogs`/`ReportStatus`. -- Эндпоинты 1:1 api-map §3.3 (14 шт.): статус (§4.9 — live-поля фазы, `account` из KV, `monitored` из +- Эндпоинты 1:1 api-map §3.3 (14 шт.): статус (§4.9 — live-поля фазы, `account` — живое имя из telegram-service (KV `tgAccount` — фолбэк), `connected` = авторизация `phase=ready` (не транспортный флаг), `monitored` из `count(Dialogs WHERE Monitor)`, `keysSet`), start-phone/start-qr/send-code/send-password/logout, QR-image (SVG, Net.Codecrete.QrCodeGenerator; 404 «QR не активен — начните вход по QR»), dialogs/refresh/ monitor-all/backfill-all/{id}/monitor/{id}/backfill (сервер-only)/preview. Boot-заглушка `GET /api/tg/status`