docs(history): e2e телеметрия пройдена (API -> wss MQTT -> EMQX -> SQS -> consumer -> tenant PG -> API)

This commit is contained in:
Repinoid
2026-10-11 19:45:37 +03:00
parent 351d8e7c34
commit 8e35f9fe5c
+28
View File
@@ -177,3 +177,31 @@ jlib.k8s [correctReplicaActive] | Под(ы) не работают: 'containerk8
Осталось (не блокеры): end-to-end телеметрия (устройство → MQTT → SQS → per-tenant PG), Осталось (не блокеры): end-to-end телеметрия (устройство → MQTT → SQS → per-tenant PG),
домен EMQX `wss://exqx-iot/mqtt` для внешних устройств, Terraform на PROD. домен EMQX `wss://exqx-iot/mqtt` для внешних устройств, Terraform на PROD.
## 8. E2E-тест телеметрии — ✅ ПРОЙДЕН (2026-10-11)
Проверен полный путь снаружи кластера: HTTP API → MQTT (`wss`) → EMQX → bridge → SQS →
consumer → per-tenant PostgreSQL → HTTP API.
1. **Устройство через API** (`/tmp/e2e_api.py`, PyJWT HS256 `sub=<ns>`):
`POST /v1/namespaces/e2e-nubes/iot/devices {"name":"dev1","device_id":"d-01"}` → **201**,
выданы `mqtt_username=e2e-nubes_d-01`, `mqtt_password=347425f2…753e`,
`telemetry_topic=e2e-nubes/telemetry/d-01`.
⚠ `GET …/devices/dev1` пароль НЕ возвращает (как и задокументировано ранее).
2. **Публикация через внешний MQTT** `wss://exqx-iot.containerk8s.dev.nubes.ru/mqtt`
(`/tmp/e2e_mqtt.py`; MQTT-over-WS написан вручную на stdlib — локально нет
paho/websockets): `HTTP/1.1 101 Switching Protocols` → **`CONNACK rc=0`**
(auth прошёл: bcrypt-хеш сверен EMQX напрямую с `iot_devices`) → `PUBLISH
e2e-nubes/telemetry/d-01 {"temp":21.5,…}`.
ACL: разрешён только свой топик — публикация в него не отклонена.
3. **Доставка**: лог iot-service — `iotpg: created tenant DB namespace=e2e-nubes
db=tenant_e2e_nubes`; в `iotdb` появилась строка `e2e-nubes/dev1 (d-01)`.
4. **Чтение**: `GET /v1/namespaces/e2e-nubes/iot/telemetry?device_id=d-01` → **200**
`{"count":1,"items":[{"id":1,"device_id":"d-01","payload":{"ts":1791737028,
"src":"e2e-manual","temp":21.5}}]}`; в PG `tenant_e2e_nubes.iot_telemetry` —
1 строка, `payload` совпадает побайтово, `message_id=30cf2047a060…` (SHA256-дедуп).
Следствия: внешний MQTT-домен EMQX годится для устройств; SQS-креды, PG-DSN, ACL и
дедуп работают. Тестовые артефакты: устройство `e2e-nubes/dev1`, БД `tenant_e2e_nubes`.
Осталось (не блокеры): Terraform на PROD; чистка тестовых артефактов e2e (по команде).