Commit Graph
16 Commits
Author SHA1 Message Date
Repinoid 351d8e7c34 docs(history): деплой IoT на Nubes ✅ — EMQX + iot-service созданы, /health /ready = 200 2026-10-11 19:40:09 +03:00
Repinoid 58cede5716 docs(history): правка дефолтов SQS_ENDPOINT/MQTT_HOST 2026-10-11 19:33:28 +03:00
Repinoid e1804c9b97 fix(deploy): MQTT_HOST = containerk8s.<uid> (сервис платформы не называется resource_name) + разбор падения iot-service (PG: владелец таблиц) 2026-10-11 19:21:12 +03:00
Repinoid 582902e47a fix(emqx): образ с одним EXPOSE (scratch) + конфиг без salt_rounds — платформа требует ровно один порт 2026-10-11 15:01:31 +03:00
Repinoid fdb9fa86b8 docs(history): зафиксировать решения по оставленным пунктам (16/12) 2026-10-11 09:19:50 +03:00
Repinoid f781de75cf docs(history): внешнее ревью и исправления 2026-10-11 2026-10-11 09:14:12 +03:00
Repinoid fc26ca1954 docs(HISTORY): хвосты 2026-10-11 закрыты, осталось обновлено 2026-10-11 07:55:35 +03:00
Repinoid 099900580b docs(HISTORY): журнал сессии 2026-10-10 — легаси, ветка master, ревью и фиксы
Полная трассировка: чистка легаси, переименование в master, правки по ревью Opus,
PRO-ревью (3 находки), Этап 3/4/5, P0-3 bcrypt, тесты, открытые находки (§5),
осталось (§6).
2026-10-10 19:29:06 +03:00
Repinoid 18e4352a47 chore(P2-14/п.4): удалён legacy cmd/sqs-consumer
Не собирался Dockerfile/Makefile (только ./cmd/iot-service/) → в образ/деплой
не попадал; логика поглощена internal/service/consumer/. Был источником пустого
message_id (обход дедупа). message_id оставлен nullable — единственный пишущий
путь (bridge) всегда ставит UUID. LEGACY.md обновлён. Плюс исправлена неточность
в HISTORY про поведение без DLQ.
2026-10-07 07:50:29 +03:00
Repinoid 59ed2d59d0 doc(HISTORY): п.2 сделан; п.4 — открытая развилка (NOT NULL vs nullable+удалить legacy) 2026-10-07 07:47:36 +03:00
Repinoid f2768568d3 doc(HISTORY): реализация п.1 (retryable/permanent) и п.3 (DLQ) зафиксирована 2026-10-07 07:41:22 +03:00
Repinoid 2b3838680f doc(HISTORY): архитекторский разбор телеметрии — 5 проблем и решение 2026-10-07 07:38:27 +03:00
Repinoid b6c083e80f fix(telemetry): не терять строки при ошибке flush (flushAll + InsertTelemetry)
flushAll и InsertTelemetry (путь заполнения батча) вынимали строки из буфера и
подменяли буфер ДО записи: при ошибке flushTenant строки исчезали. Хуже —
фоновый flusher мог забрать строки, которые consumer ждал в Flush, тогда Flush
видел пустой буфер, возвращал nil, и consumer подтверждал SQS-сообщение с
незаписанными данными (потеря). Теперь при ошибке строки возвращаются в буфер
в обоих путях. ctx проброшен в flushAll/flushTenant. Consumer хранит receipt
handle значением (string), не указателем SDK.
2026-10-07 07:32:00 +03:00
Repinoid 38602b7560 P0-8: идемпотентность телеметрии (dedup по message_id)
Envelope получил MessageID (UUID); таблица iot_telemetry — столбец message_id +
UNIQUE(device_id,message_id); батч-INSERT ON CONFLICT DO NOTHING. Дубли при
at-least-once повторе из SQS больше не вставляются. Пустой message_id → NULL
(без ложного дедупа).
2026-10-07 07:26:50 +03:00
Repinoid 3036572ccc P1-9: readiness-проба /ready отражает состояние bridge/consumer
/health остаётся liveness (процесс жив); /ready возвращает 503, если bridge или
consumer не в строю (горутина упала/не поднялась). Добавлен api.Readiness с
atomic-флагами, NewRouter принимает *Readiness, main поднимает/опускает флаги
вокруг фоновых горутин.
2026-10-07 07:25:09 +03:00
Repinoid f19ab47c29 HISTORY: журнал сессии 2026-10-07 (IoT P0-1/P0-2, P1-4, P0-3.2, P0-7) 2026-10-07 07:23:52 +03:00