diff --git a/HISTORY/2026-08-16-session-log.md b/HISTORY/2026-08-16-session-log.md index b763d67..9048090 100644 --- a/HISTORY/2026-08-16-session-log.md +++ b/HISTORY/2026-08-16-session-log.md @@ -767,3 +767,34 @@ store сам создаст таблицу iot_devices. **Следующий шаг:** end-to-end проверка: создать устройство через REST API → MQTT CONNECT (wss) с кредами устройства → publish телеметрии → SQS → consumer → PG → чтение через /v1/.../telemetry. + +--- + +## 24. END-TO-END ПРОЙДЕН (16.08, ~14:02 GMT+03) ✅ + +**Полная цепочка проверена на платформе:** +1. Устройство создано через API: POST /v1/namespaces/test/iot/devices + (dev1, device_id=dev-001) → mqtt_username `test_dev-001`, пароль получен. +2. MQTT-клиент (paho, wss://exqx.containerk8s.dev.nubes.ru:443/mqtt, + transport=websockets) — CONNECT принят (rc=0), publish в + `test/telemetry/dev-001` (rc=0, QoS1). +3. EMQX HTTP-auth → монолит: bridge `iot-bridge` подключён (лог EMQX: + clientid=iot-bridge, WS-MQTT, PINGRESP; монолит: `bridge: MQTT connected`). +4. Bridge → SQS: `forwarded telemetry to SQS` (внутренний endpoint). +5. Consumer → PG: `telemetry saved namespace=test device=dev-001`; + GET /v1/namespaces/test/iot/telemetry → count=1, payload {"e2e":true,"temp":23.5}. + +**Ошибки по пути (исправлены, задокументированы):** +1. `permission denied to create role (42501)` — роль iot_service не имела прав + для per-tenant БД. Исправлено: `ALTER ROLE iot_service CREATEROLE CREATEDB`. + ⚠️ Для чужого кластера: при подготовке БД давать роли эти права. +2. pg_hba SSL — DSN с sslmode=require (см. раздел 23). + +**Открытые хвосты:** +- AUTH_TEST_MODE=true включён для теста (kubectl set env) — вернуть false + (kubectl set env AUTH_TEST_MODE=false или дефолт образа при пересоздании). +- EMQX: dashboard-listener падает с таймаутами (CPU 500m) — убрать из конфига + (v0.2.1) и/или квота CPU ≥1000m при создании в deck. +- Процедура для чужого кластера без kubectl: PG-auth в EMQX (вместо HTTP), + порядок деплоя EMQX→iot-service, UUID из консоли deck, DSN с sslmode=require, + роль с CREATEROLE/CREATEDB, один EXPOSE-порт в образе EMQX.