From 31a7db18b2e0d7d55d1ce1e2c0bca30e6e914291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sun, 16 Aug 2026 15:04:02 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20HISTORY=20=E2=80=94=20END-TO-END=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B9=D0=B4=D0=B5=D0=BD:=20=D1=83=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=BE=E2=86=92EMQX?= =?UTF-8?q?=E2=86=92bridge=E2=86=92SQS=E2=86=92consumer=E2=86=92PG?= =?UTF-8?q?=E2=86=92API;=20=D1=85=D0=B2=D0=BE=D1=81=D1=82=D1=8B:=20AUTH=5F?= =?UTF-8?q?TEST=5FMODE,=20dashboard,=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D1=80=D0=B0=20=D1=87=D1=83=D0=B6=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-08-16-session-log.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) 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.