4.2 KiB
Промпт для ревью (Opus) — IoT готовность к production
Ты ревьюишь Go-проект IoT. Цель — выявить блокеры, мешающие назвать сервис production-ready. Дай ответ МАКСИМАЛЬНО сжато, без воды: списком, короткими строками, с точными ссылками на файл и строку. Никаких пояснений-простыней.
Запрещено:
- Не читай память, историю сессий, заметки, предыдущие анализы,
HISTORY/,LEGACY.md, ничего вlegacy/. Только код и документация из списка ниже. - Не читай старые k8s-манифесты, CRD, оператор — это легаси, не актуально.
- Не предлагай рефакторинг ради рефакторинга — только то, что блокирует прод.
Компоненты продукта (актуально): монолит iot-service (API + MQTT-bridge +
SQS-consumer в одном бинарнике) + EMQX + shared-SQS + managed PostgreSQL.
Конвейер: устройство → wss → EMQX → бридж → SQS → consumer → PG → REST API.
Смотри ТОЛЬКО эти файлы (актуальный код):
Конфигурация и точка входа:
cmd/iot-service/main.gointernal/service/config/config.gointernal/service/config/defaults.go
HTTP API:
internal/service/api/router.gointernal/service/api/middleware/auth.gointernal/service/api/middleware/logging.gointernal/service/api/handler/handler.gointernal/service/api/handler/devices.gointernal/service/api/handler/mqtt_auth.gointernal/service/api/handler/telemetry.gointernal/service/api/handler/admin.gointernal/service/api/handler/sqsstats.go
Хранение:
internal/service/store/open.gointernal/service/store/device.gointernal/service/store/devices.gointernal/service/store/bridge.gointernal/storage/iotpg/iot_telemetry_store.go
Бридж и consumer:
internal/service/bridge/bridge.gointernal/service/bridge/handler.gointernal/service/bridge/sender.gointernal/service/consumer/consumer.gointernal/service/consumer/processor.gointernal/service/sqsclient/sqsclient.go
Инфраструктура:
DockerfileMakefilego.modemqx/emqx.confloadtests/README.md(только для понимания критериев, не весь код)
Вопросы (ответь строго по пунктам, каждому — вердикт + файл:строка):
- Tenant-изоляция: как
subиз JWT связывается с{namespace}в URL? Есть ли путь доступа к чужому namespace валидным токеном? - Гарантии доставки: есть ли окно потери сообщения между буфером записи, ответом об успехе и удалением из SQS? Где именно?
- Идемпотентность: защищён ли вход от дублей при at-least-once SQS?
/health: отражает ли реальную работоспособность bridge/consumer или всегдаok?- Auth JWT: валидация sub/exp/подписи — что при пустом
JWT_HMAC_SECRET? - Пароли устройств: как хранятся, как отдаются через API.
/internal/mqtt/authи/internal/mqtt/acl: нужны ли ещё, защищены ли?- Ошибки записи в PG: что происходит с сообщением при сбое flush-батча?
- Есть ли тесты (
*_test.go), CI, rate-limiting, метрики, TLS-верификация PG?
Формат ответа: по каждому пункту — 1 строка вердикт (OK / ПРОБЛЕМА) +
файл:строка + при проблеме — 1 строка суть. В конце — список
«блокеры для прода» (только критические, без ранжирования по вкусу).