diff --git a/HISTORY/2026-08-16-session-log.md b/HISTORY/2026-08-16-session-log.md index 7a276f7..bdbe56c 100644 --- a/HISTORY/2026-08-16-session-log.md +++ b/HISTORY/2026-08-16-session-log.md @@ -1221,3 +1221,21 @@ paho connect() rc=0 даже при CONNACK≠0 (on_connect обязателен - «MQTT endpoint (exqx)»: почему 400 в браузере и что делать. - v0.1.9 (digest fb488a8666ab) задеплоен, страница проверена в браузере (структура отрисована корректно). + +--- + +## 35. SVG-схема пайплайна на лендинге (v0.1.12) (20:10 GMT+03) + +- Две попытки Gemini дали негодные схемы (первая — всё сжато в одну строку + с обрезками; вторая — «бридж»/«потребитель» стали отдельными узлами, + дублирование, оторванные подписи). Решение: схема нарисована ВРУЧНУЮ. +- `internal/service/api/ui/static/pipeline.svg` — 1440x300, 5 блоков + (Устройство | EMQX | Очередь | PostgreSQL | API/Консоль), подложка + «ПЛАТФОРМА» пунктиром вокруг трёх внутренних блоков, 4 стрелки с + ярлыками (MQTT over wss / бридж / потребитель / REST) и подписями + переходов, подвал «бридж и потребитель — части сервиса iot-service». + Палитра дизайн-системы (#2563eb/#eff6ff/#bfdbfe/#d1d5db/#6b7280). +- landing.html: схема вставлена через + (по правилу дизайн-системы — файлом, НЕ инлайн), CSS-флоу удалён. +- v0.1.12 (digest b6a44303f9f5) задеплоен; проверка: landing 200, + pipeline.svg 200 (image/svg+xml, 4591 байт). diff --git a/Makefile b/Makefile index 33fb9f1..a55878f 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Makefile — монолит iot-service (образ naeel/iot-service). # Старые k8s-цели — в legacy/Makefile.old. -VERSION ?= v0.1.9 +VERSION ?= v0.1.12 IMAGE ?= naeel/iot-service LDFLAGS = -X main.version=$(VERSION) diff --git a/internal/service/api/ui/landing.html b/internal/service/api/ui/landing.html index 46dd76f..cb0d321 100644 --- a/internal/service/api/ui/landing.html +++ b/internal/service/api/ui/landing.html @@ -143,6 +143,41 @@ pre code { background: none; border: none; padding: 0; } line-height: 1.7; } .hint-box code { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 13px; } +/* Схема пайплайна */ +.flow { + display: flex; + flex-wrap: wrap; + gap: 4px; + align-items: stretch; + margin: 10px 0 4px; +} +.flow-node { + border: 1px solid var(--brand-gray); + border-radius: 10px; + background: #fff; + padding: 10px 12px; + min-width: 110px; + text-align: center; + box-shadow: 0 1px 2px rgba(0,0,0,0.04); +} +.flow-node .fn-title { font-weight: 600; font-size: 13.5px; } +.flow-node .fn-sub { + font-family: ui-monospace, Menlo, Consolas, monospace; + font-size: 11.5px; + color: var(--text-muted); + margin-top: 3px; + word-break: break-all; +} +.flow-node.acc { border-color: #bfdbfe; background: #eff6ff; } +.flow-node.acc .fn-title { color: var(--brand-primary); } +.flow-arrow { + align-self: center; + color: var(--text-muted); + font-size: 16px; + padding: 0 2px; +} +.flow-caption { color: var(--text-muted); font-size: 12px; margin-top: 6px; } +.pipeline { width: 100%; max-width: 760px; display: block; margin: 12px auto 4px; } @@ -172,10 +207,20 @@ pre code { background: none; border: none; padding: 0; }

Устройство (датчик, бойлер, счётчик) отправляет показания по протоколу MQTT. Дальше показания проходят по цепочке и попадают в базу данных:

-
- устройство → MQTT (wss) → очередь iot-telemetry - → PostgreSQL → API / консоль + Схема пайплайна IoT +
+ Между брокером и базой работают бридж и потребитель (части iot-service): + бридж кладёт показания в очередь, потребитель пишет их в базу.
+

+ Очередь iot-telemetry — внутренний буфер сервиса: она + защищает показания от потерь при всплесках и сбоях базы. Пользователю + креды очереди НЕ нужны — сервис ходит в неё сам. Если требуется + посмотреть сообщения вручную — консоль очереди: + sqs.containerk8s.dev.nubes.ru/ui + (вход по API-токену Nubes; описание — на + sqs.containerk8s.dev.nubes.ru). +

У каждого устройства — свои логин и пароль, поэтому чужое устройство не сможет писать в ваш топик. Данные разных проектов (namespace) лежат в diff --git a/internal/service/api/ui/static/pipeline.svg b/internal/service/api/ui/static/pipeline.svg new file mode 100644 index 0000000..45161dd --- /dev/null +++ b/internal/service/api/ui/static/pipeline.svg @@ -0,0 +1,71 @@ + + + + + + + + + + ПЛАТФОРМА + + + + + + + + + + + MQTT over wss + + + бридж + + + потребитель + + + REST + + + {namespace}/ + telemetry/{device_id} + + кладёт показания + пишет в базу + чтение истории + + + + Устройство + датчик · MQTT-клиент + + + + EMQX + брокер · wss /mqtt + + + + Очередь + iot-telemetry + + + + PostgreSQL + база на namespace + + + + API / Консоль + чтение истории + + + бридж и потребитель — части сервиса iot-service +