docs: HISTORY — END-TO-END пройден: устройство→EMQX→bridge→SQS→consumer→PG→API; хвосты: AUTH_TEST_MODE, dashboard, процедура чужого кластера

This commit is contained in:
“Naeel”
2026-08-16 15:04:02 +04:00
parent af0ebdfebc
commit 31a7db18b2
+31
View File
@@ -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.