This website requires JavaScript.
bbec23c3fb
chore: update ignore rules
backup/2026-10-05-feature-sqs
Repinoid
2026-10-27 14:15:14 +03:00
32b6cd3bf2
chore: update ignore rules
feature/replace-kafka-with-sqs
Repinoid
2026-10-27 14:15:14 +03:00
f082bd3bf9
chore: update ignore rules
localed
Repinoid
2026-10-27 14:15:14 +03:00
ca6a03d72e
chore: update ignore rules
master
Repinoid
2026-10-27 14:15:14 +03:00
068896c2bc
chore: update ignore rules
Repinoid
2026-10-27 14:08:52 +03:00
78646cbf24
chore: update ignore rules
Repinoid
2026-10-27 14:08:52 +03:00
b85c67b75a
chore: update ignore rules
Repinoid
2026-10-27 14:08:52 +03:00
4c2f2e0e86
chore: update ignore rules
Repinoid
2026-10-27 14:08:52 +03:00
eeee7a5ea2
docs(history): §11 — фикс валидации namespace, doc/device-integration.md, образ v0.1.14
Repinoid
2026-10-11 20:29:40 +03:00
52a93da95d
docs: интеграция устройства — MQTT/ACL, требование ts/seq в payload (дедуп по содержимому), лимиты
Repinoid
2026-10-11 20:26:30 +03:00
6b9f397746
fix(api): валидировать {namespace} во всех эндпоинтах (было только в POST) + регрессионные тесты
Repinoid
2026-10-11 20:26:30 +03:00
4c24c6351c
docs(history): расширенный прогон PASS=49 KNOWN=1 — дедуп по содержимому, валидация namespace только в POST
Repinoid
2026-10-11 20:23:32 +03:00
fa16b02455
docs(history): проверки развёрнутого IoT — PASS=12 FAIL=0 (auth/ACL/tenant-изоляция/дедуп)
Repinoid
2026-10-11 19:49:33 +03:00
8e35f9fe5c
docs(history): e2e телеметрия пройдена (API -> wss MQTT -> EMQX -> SQS -> consumer -> tenant PG -> API)
Repinoid
2026-10-11 19:45:37 +03:00
351d8e7c34
docs(history): деплой IoT на Nubes ✅ — EMQX + iot-service созданы, /health /ready = 200
Repinoid
2026-10-11 19:40:09 +03:00
58cede5716
docs(history): правка дефолтов SQS_ENDPOINT/MQTT_HOST
Repinoid
2026-10-11 19:33:28 +03:00
26621f5d08
fix(config): дефолт SQS_ENDPOINT -> https://sqs.sinefo.ru ; MQTT_HOST теперь обязателен (пустой дефолт — EMQX в другом namespace)
Repinoid
2026-10-11 19:33:15 +03:00
e1804c9b97
fix(deploy): MQTT_HOST = containerk8s.<uid> (сервис платформы не называется resource_name) + разбор падения iot-service (PG: владелец таблиц)
Repinoid
2026-10-11 19:21:12 +03:00
5978d80ab2
docs(deploy): требование ровно одного EXPOSE + iot-emqx v0.2.5 в чек-листе
Repinoid
2026-10-11 15:01:53 +03:00
582902e47a
fix(emqx): образ с одним EXPOSE (scratch) + конфиг без salt_rounds — платформа требует ровно один порт
Repinoid
2026-10-11 15:01:31 +03:00
0832d7e0cb
feat(deploy): Terraform-стек IoT (nubes_http: EMQX + iot-service) — провайдер nubes-test 3.1.0
Repinoid
2026-10-11 14:20:13 +03:00
c06fb3a8e2
docs: PG для IoT готов — user iotservice + db iotdb созданы через Nubes API (test)
Repinoid
2026-10-11 14:03:38 +03:00
e0a5c77f16
docs: чек-лист деплоя IoT на Nubes (образы Gitea, SQS очередь+DLQ, env)
Repinoid
2026-10-11 10:07:22 +03:00
73dc51b7f5
chore: игнорировать *.key (креды PG/секреты)
Repinoid
2026-10-11 09:54:19 +03:00
16b9f05a86
build: registry → gitea.services.ngcloud.ru/nail (Makefile/Dockerfile/дока)
Repinoid
2026-10-11 09:51:08 +03:00
fdb9fa86b8
docs(history): зафиксировать решения по оставленным пунктам (16/12)
Repinoid
2026-10-11 09:19:50 +03:00
f781de75cf
docs(history): внешнее ревью и исправления 2026-10-11
Repinoid
2026-10-11 09:14:12 +03:00
e510e93099
iotpg: валидировать namespace (safeNamespaceRe) в getTenantDB на всех путях чтения/записи
Repinoid
2026-10-11 08:49:00 +03:00
4c1b9b7b9e
IoT: maxReceiveCount ко всем ошибкам consumer, ждать Shutdown до deferred Close, не 500 после успешного create
Repinoid
2026-10-11 08:48:29 +03:00
93d47376b1
bridge: MessageID=хэш(дедуп), классификация permanent/transient SQS-ошибок, бесконечный ретрай подписки, валидация ns/deviceID
Repinoid
2026-10-11 08:46:22 +03:00
89b5660a8b
iotpg: не возвращать ошибку при постоянной (poison) ошибке flush — данные уже обработаны построчно
Repinoid
2026-10-11 08:37:17 +03:00
994fc054b1
console: namespace = sub (убрать sless-SHA256) и удалить несуществующий /ensure
Repinoid
2026-10-11 08:06:20 +03:00
fc26ca1954
docs(HISTORY): хвосты 2026-10-11 закрыты, осталось обновлено
Repinoid
2026-10-11 07:55:35 +03:00
e83d804501
test(iot): безопасность enqueue↔closeAndWait под race (фикс 🔴 3)
Repinoid
2026-10-11 07:55:08 +03:00
ba14d4a767
fix(iot): консоль — убрать старые домены kube5s/sless
Repinoid
2026-10-11 07:53:02 +03:00
3e1d981614
fix(iot): пустое тело сообщения → DLQ (вместо молчаливого подтверждения)
Repinoid
2026-10-11 07:51:57 +03:00
c3106d6e20
fix(iot): ReceivedAt в RFC3339Nano (порядок телеметрии, non-FIFO)
Repinoid
2026-10-11 07:51:38 +03:00
099900580b
docs(HISTORY): журнал сессии 2026-10-10 — легаси, ветка master, ревью и фиксы
Repinoid
2026-10-10 19:29:06 +03:00
85bcf26220
chore(iot): MaxReconnectInterval 30с + Debug для health-проб и телеметрии (ревью)
Repinoid
2026-10-10 19:24:12 +03:00
aac36bab39
docs(iot): деплой-дока — пароль отдаётся один раз, в БД bcrypt-хэш
Repinoid
2026-10-10 19:23:25 +03:00
7c80c7b7f8
test(iot): юнит-тесты валидации идентификаторов и разбора DSN (P1-11)
Repinoid
2026-10-10 19:23:09 +03:00
3a73207abd
fix(iot): 409 различает конфликт name vs device_id (ревью)
Repinoid
2026-10-10 19:21:47 +03:00
3b7c8a0a63
feat(iot): bcrypt-хэш паролей устройств и бриджа + EMQX на bcrypt (P0-3 ч.1)
Repinoid
2026-10-10 19:21:10 +03:00
59bd743c87
feat(iot): PATCH обновляет metadata (Terraform)
Repinoid
2026-10-10 19:18:01 +03:00
38e3f65c21
fix(iot): пагинация — tiebreaker ts DESC,id DESC + потолок limit; точный лог (Этап 5)
Repinoid
2026-10-10 19:17:25 +03:00
f3927fdf11
fix(iot): готовность consumer по SQS + ограничение wg.Wait + идемпотентный Close (Этап 3)
Repinoid
2026-10-10 19:16:30 +03:00
c725676f85
chore(iot): удаление сообщений пакетами DeleteMessageBatch (Этап 5)
Repinoid
2026-10-10 19:15:08 +03:00
4a0372ff05
chore(iot): лимит тела запроса + запрет неизвестных полей + таймауты сервера (Этап 5)
Repinoid
2026-10-10 19:14:47 +03:00
e429f11e7f
chore(iot): убрать мёртвый mqtt_auth.go + constant-time админ-токен (Этап 5)
Repinoid
2026-10-10 19:14:16 +03:00
faba28f824
fix(iot): replaceDSNDatabase (смешение тенантов) + guard namespace (Этап 4)
Repinoid
2026-10-10 19:13:35 +03:00
c3492cb0f1
fix(iot): JWT — обязательный exp, 401 вместо 403, guard тест-режима, JSON-ошибки (Этап 4)
Repinoid
2026-10-10 19:12:48 +03:00
6ff5576e7d
fix(iot): /ready отражает факт подписки MQTT (находка #3 )
Repinoid
2026-10-10 19:10:44 +03:00
d7701f2845
fix(iot): ограничить повторы ядовитого сообщения (находка #2 )
Repinoid
2026-10-10 19:10:12 +03:00
dc56a9c2e2
fix(iot): run() int вместо os.Exit — финальный flush не теряется (находка #1 )
Repinoid
2026-10-10 19:09:33 +03:00
946600238b
fix(iot): ретрай GetQueueUrl на старте + выход ≠0 при сбое подсистемы (🔴 5)
Repinoid
2026-10-10 19:05:08 +03:00
572988a2a1
fix(iot): слить остаток буфера bridge при shutdown + безопасное закрытие канала (🔴 3)
Repinoid
2026-10-10 19:02:30 +03:00
5600646db3
fix(iot): ретраи отправки SQS до shutdown + таймаут на попытку (🔴 4)
Repinoid
2026-10-10 18:59:37 +03:00
ab146861d3
fix(iot): не терять битые сообщения при недоступной DLQ (🔴 7)
Repinoid
2026-10-10 18:58:26 +03:00
6048777a9e
fix(iot): не рвать автореконнект при сбое подписки (🔴 6)
Repinoid
2026-10-10 18:55:34 +03:00
2cca7cb856
fix(iot): семантическая валидация envelope (пустые поля → DLQ)
Repinoid
2026-10-10 18:53:59 +03:00
e31f88ba6b
fix(iot): построчный fallback при постоянной ошибке батча (🔴 2)
Repinoid
2026-10-10 18:53:34 +03:00
7407de5fd3
fix(iot): сериализовать flush (гонка с фоновым flusher'ом — потеря данных)
Repinoid
2026-10-10 18:52:43 +03:00
8335afb617
fix(iot): валидация namespace/name/device_id (запрет _, +, #, /)
Repinoid
2026-10-10 18:50:56 +03:00
2aef884d02
fix(iot): telemetry_topic в ответе + нормализация metadata
Repinoid
2026-10-10 18:49:40 +03:00
e2bb642df2
fix(iot): created_at в RFC3339 + перечитывание после Create
Repinoid
2026-10-10 18:48:52 +03:00
76f0230f5d
fix(iot): отдавать MQTT-пароль при создании + писать phase в БД
Repinoid
2026-10-10 18:48:07 +03:00
4290ecfb0a
Merge remote-tracking branch 'origin/master'
Repinoid
2026-10-10 18:39:10 +03:00
56fadf6ca3
style(iot-admin): переформатирование HTML (форматтер)
Repinoid
2026-10-10 18:38:12 +03:00
a510522660
chore(iot): убрать старое (Kafka/K8s) из живого админ-UI и .gitignore
Repinoid
2026-10-10 18:15:13 +03:00
b205f886b6
chore(iot): удалить легаси-код (оператор/CRD/старый API/standalone bridge)
Repinoid
2026-10-10 18:11:05 +03:00
ecf6b41131
docs(review): Opus code-review of iot-service (bridge->SQS->consumer) verbatim
Repinoid
2026-10-10 18:02:59 +03:00
18e4352a47
chore(P2-14/п.4): удалён legacy cmd/sqs-consumer
Repinoid
2026-10-07 07:50:29 +03:00
59ed2d59d0
doc(HISTORY): п.2 сделан; п.4 — открытая развилка (NOT NULL vs nullable+удалить legacy)
Repinoid
2026-10-07 07:47:36 +03:00
e8873fa24d
fix(telemetry): ts = время приёма (ReceivedAt), а не момент INSERT
Repinoid
2026-10-07 07:47:10 +03:00
f2768568d3
doc(HISTORY): реализация п.1 (retryable/permanent) и п.3 (DLQ) зафиксирована
Repinoid
2026-10-07 07:41:22 +03:00
4ee0fc3b61
fix(telemetry): различать retryable/permanent ошибки flush (не залипать на ядовитом батче)
Repinoid
2026-10-07 07:41:05 +03:00
4031882cae
feat(consumer): битые envelope → DLQ вместо потери
Repinoid
2026-10-07 07:40:09 +03:00
2b3838680f
doc(HISTORY): архитекторский разбор телеметрии — 5 проблем и решение
Repinoid
2026-10-07 07:38:27 +03:00
b6c083e80f
fix(telemetry): не терять строки при ошибке flush (flushAll + InsertTelemetry)
Repinoid
2026-10-07 07:32:00 +03:00
38602b7560
P0-8: идемпотентность телеметрии (dedup по message_id)
Repinoid
2026-10-07 07:26:50 +03:00
3036572ccc
P1-9: readiness-проба /ready отражает состояние bridge/consumer
Repinoid
2026-10-07 07:25:09 +03:00
f19ab47c29
HISTORY: журнал сессии 2026-10-07 (IoT P0-1/P0-2, P1-4, P0-3.2, P0-7)
Repinoid
2026-10-07 07:23:52 +03:00
3175605931
P0-7: подтверждение из SQS только после успешного flush телеметрии в БД
Repinoid
2026-10-07 07:23:25 +03:00
a4e786d03b
P0-3 (часть 2): не отдавать пароль устройства повторно через GET
Repinoid
2026-10-06 19:06:02 +03:00
c97b63b190
P1-4: убрать неаутентифицированные /internal/mqtt/auth|acl из роутера
Repinoid
2026-10-06 19:05:12 +03:00
4afee5cdf9
P0-1/P0-2: tenant-граница по sub + обязательная подпись JWT
Repinoid
2026-10-06 19:04:54 +03:00
2e52f0fa6b
chore: игнорировать сборочный бинарник ws-probe
Repinoid
2026-10-05 20:09:38 +03:00
110d49effe
docs(thinking): IoT↔SQS handoff — сводка находок и порядок работ
Repinoid
2026-10-05 20:04:20 +03:00
33077ad326
docs(thinking): readiness assessment, remediation plan, Opus review prompt
Repinoid
2026-10-05 15:53:29 +03:00
f76383a2ef
chore: убрать __pycache__ из трекинга, расширить .gitignore (pyc/бинарники/мусор)
“Naeel”
2026-08-17 08:20:44 +04:00
da4c3d10d0
docs(thinking): Nubes DevOps report — network issues + fixes
“Naeel”
2026-08-16 20:43:03 +04:00
ce9e20266c
feat(landing): vertical large pipeline diagram; v0.1.13
“Naeel”
2026-08-16 19:16:58 +04:00
30e7da8cf8
feat(landing): hand-drawn pipeline SVG diagram; v0.1.12
“Naeel”
2026-08-16 19:11:17 +04:00
0f71e715be
docs(landing): rewrite as clear how-to (4 steps with copy-paste commands); v0.1.9
“Naeel”
2026-08-16 18:51:59 +04:00
ce01b6f9f8
feat(api): landing page with Nubes design (logo+favicon), /static; v0.1.8
“Naeel”
2026-08-16 18:46:17 +04:00
68becfd6bc
fix: review findings (async SQS dispatcher, backoff, batch insert, shutdown order, pagination, HMAC) + loadtest fixes; v0.1.6
“Naeel”
2026-08-16 18:24:09 +04:00
10716aeace
test(loadtests): 10 load scenarios + verifier; docs: Sonnet review findings
“Naeel”
2026-08-16 16:59:29 +04:00
649a880182
docs: no-kubectl deployment procedure (tail 4) + HISTORY 28-29
“Naeel”
2026-08-16 16:20:07 +04:00
8b3f3ab5df
feat(emqx): PG-auth in EMQX v0.2.4 + EnsureBridgeDevice v0.1.2 (tail 3)
“Naeel”
2026-08-16 16:18:49 +04:00
12b43e7999
fix(bridge): resubscribe on every (re)connect; emqx v0.2.1 dashboard off; iot-service v0.1.1
“Naeel”
2026-08-16 15:24:26 +04:00