Раздел 3. Функции частей программного обеспечения¶
3.1. Реестр интерфейсов¶
Реестр фиксирует основные интерфейсы между частями программного обеспечения BOX5-DIT-MGSN, инфраструктурными компонентами и внешними системами. Перечень согласован со структурой ПО из раздела 2, реестром сервисов ПД и OpenAPI-приложением. На этом уровне endpoint-ы не дублируются поштучно: детальный состав REST API приведён в приложении OpenAPI, а в таблице ниже показаны границы обмена и применяемые протоколы.
| Код | Источник | Получатель | Назначение обмена | Тип обмена | Протокол | Формат данных | Направление |
|---|---|---|---|---|---|---|---|
PA-IF-01 |
Пользователь / внешний API-клиент | ui-nginx |
Доступ к web-интерфейсу, REST API, GraphQL, WebSocket, файлам и медиа через единую опубликованную точку входа. | Синхронный, потоковый | HTTP/HTTPS, WebSocket | HTML, CSS, JavaScript, JSON, multipart, бинарные файлы, HLS/WebRTC media | Входящий внешний |
PA-IF-02 |
ui-nginx |
ui-react |
Выдача SPA, статических ресурсов, конфигурации UI, логотипов и статического раздела документации. | Синхронный | HTTP | HTML, JavaScript, CSS, JSON, изображения | Внутренний |
PA-IF-03 |
ui-nginx |
ui-rest-to-gprc |
Проксирование browser-facing API: /api/*, /api/graphql, /api/ws/, /api/base/*, /api/config/*, /api/consul/*. |
Синхронный, потоковый | HTTP/REST, GraphQL, WebSocket | JSON, multipart, бинарные ответы, WebSocket-сообщения | Внутренний |
PA-IF-04 |
ui-rest-to-gprc |
Сервисы statistics |
Авторизация, права доступа, камеры, события, отчёты, аудит, комментарии, статистика событий и виртуальные камеры. | Синхронный | HTTP/gRPC, REST | JSON, protobuf/gRPC, файловые и отчётные бинарные ответы | Внутренний |
PA-IF-05 |
ui-rest-to-gprc |
Сервисы inference и extended-inference |
Получение изображений, сведений о моделях, состояния inference, HLS/WebRTC и данных балансировщика. | Синхронный, потоковый | HTTP/gRPC, REST, HLS/WebRTC | JSON, protobuf/gRPC, изображения, HLS-фрагменты, SDP/WebRTC payload | Внутренний |
PA-IF-06 |
ui-rest-to-gprc |
Сервисы severstal |
Customer-domain API: сценарии, ассеты, запуски, реестр моделей, переводы и интеграционные операции заказчика. | Синхронный | HTTP/gRPC, REST | JSON, protobuf/gRPC, файловые метаданные | Внутренний |
PA-IF-07 |
ui-rest-to-gprc, ui-nginx, доменные сервисы |
data-storage, ds-minio, ds-data-temporary-storage, st-domain-gateway |
Загрузка, временное хранение и выдача изображений, видеофрагментов, отчётов и объектных ссылок /api/s3/*, /api/data-storage/*. |
Синхронный, файловый | HTTP, S3-compatible API | Бинарные объекты, JSON-метаданные, UUID временных объектов | Внутренний / опубликованный через gateway |
PA-IF-08 |
ui-rest-to-gprc |
Consul KV / локальная конфигурация gateway | Чтение и изменение клиентской конфигурации и служебных параметров UI/API gateway. | Синхронный | HTTP/REST, Consul HTTP API, файловое чтение | JSON, key-value | Внутренний |
PA-IF-09 |
statistics, inference, severstal, ui-rest-to-gprc |
inf-kafka |
Асинхронная доставка событий инференса, команд, heartbeats, audit-сообщений, статусов, синхронизации справочников и WebSocket-уведомлений. | Асинхронный | Kafka | Protobuf, JSON, служебные ключи сообщений | Внутренний двунаправленный |
PA-IF-10 |
Сервисы statistics, inference, severstal, node-red-sandbox |
Доменные PostgreSQL sidecar | Хранение пользователей, прав, камер, событий, отчётов, сценариев, моделей, ассетов, запусков и служебных таблиц. | Синхронный | PostgreSQL wire protocol | Реляционные таблицы, SQL-запросы, транзакции | Внутренний |
PA-IF-11 |
Сервисы statistics, inference, data-storage, node-red-sandbox |
Доменные Redis sidecar | Кэш, блокировки, очереди задач, временное состояние и координация фоновых процессов. | Синхронный | Redis RESP/TCP | Key-value, TTL-записи, очереди/служебные структуры | Внутренний |
PA-IF-12 |
Сервисы statistics, inference, ui-rest-to-gprc |
ClickHouse sidecar | Аналитические витрины событий, ускорение выборок, зеркала событий и lookup-таблицы. | Синхронный | ClickHouse native TCP, ClickHouse HTTP | Табличные данные, SQL-запросы, агрегаты | Внутренний / технический |
PA-IF-13 |
Сервисы BOX5-DIT-MGSN, Docker log driver | log-prometheus, log-loki |
Передача метрик и журналов для эксплуатационного мониторинга и диагностики. | Периодический сбор, поток логов | HTTP /metrics, Docker Loki driver |
Prometheus text exposition, строки журналов, labels | Внутренний эксплуатационный |
PA-IF-14 |
IP-камеры и виртуальные источники видео | inf-mediaserver, inf-load-balancer, inf-nri-inference |
Получение live-видеопотоков и файловых/HTTP-источников для online-инференса и формирования событий. | Потоковый | RTSP, HTTP/MP4, внутренние media URI | Видео/аудиопоток, MP4/фрагменты media | Входящий внешний |
PA-IF-15 |
CSVN/VMS Cisco, Milestone, Macroscop | svr-severstal-integration, svr-severstal-org-sync, st-camera-storage, st-virt-cam-video-upload |
Синхронизация топологии камер, обязательных камер, архивной информации и архивных видеозаписей. | Синхронный, файловый | SOAP/WSDL, HTTP VMS API, локальный connector VIRTUAL |
XML/SOAP, JSON/HTTP, бинарные видеофрагменты | Входящий внешний |
PA-IF-16 |
ПК-КОТ | svr-postgres-pk-kot, svr-severstal-integration, svr-severstal-org-sync |
Чтение справочников нарушений, опасностей, зон и камер; передача статусов и подтверждённых событий во внешнюю систему. | Синхронный | PostgreSQL read-only, HTTP/REST push | SQL-строки, JSON payload, статусы обработки | Внешний двунаправленный |
PA-IF-17 |
АСУ ТП | svr-asutp-kafka, svr-asutp, svr-asutp-schema-registry |
Приём _meta и _data сигналов, проверка схем, расчёт состояний ASUTP-юнитов и публикация результата в основной контур. |
Асинхронный | Kafka, Avro, Schema Registry HTTP API | Avro-сообщения, схемы, JSON/служебные метаданные | Входящий внешний |
PA-IF-18 |
Браузер пользователя, st-auth, ui-rest-to-gprc |
Keycloak / OpenID Connect | SSO-авторизация пользователя, обмен authorization code на локальные токены BOX5-DIT-MGSN и получение параметров внешнего провайдера. | Синхронный | OIDC/OAuth2 authorization code, HTTP/gRPC | Redirect parameters, JSON, JWT, локальные access/refresh tokens | Внешний двунаправленный |
PA-IF-19 |
st-auth, st-report-email, отчётные сервисы |
SMTP / Email | Отправка служебных писем, сброса пароля, email-уведомлений и отчётов. | Синхронный / регламентный | SMTP | MIME-сообщения, вложения PDF/XLSX/CSV | Исходящий внешний |
PA-IF-20 |
svr-severstal-integration, сервисы событий и отчётов |
Внешние системы-получатели данных заказчика | Передача событий, статусов, отчётов, ссылок на медиа и выгрузок данных по согласованным интеграционным сценариям. | Синхронный, файловый | HTTP/REST, S3/HTTP-ссылки | JSON, файлы отчётов, ссылки на объекты, статусы | Исходящий внешний |
PA-IF-21 |
ui-nginx |
node-red-sandbox |
Доступ к песочнице подготовки NRI-сценариев через /sandbox/, включая UI sandbox и backend-интерфейсы. |
Синхронный, потоковый | HTTP, WebSocket | HTML/JS/CSS, JSON, flow JSON, служебные сообщения | Внутренний / технический |
PA-IF-22 |
node-red-sandbox |
Основной API BOX5-DIT-MGSN, MinIO, sandbox Kafka/Redis | Публикация подготовленных flows и сценарных артефактов, работа с временными файлами и проверочными запусками. | Синхронный, асинхронный, файловый | HTTP/REST, S3 API, Kafka, Redis | JSON flow, файлы, модели, служебные сообщения | Внутренний технический |
Низкоуровневый реестр интерфейсов ведётся по типам контрактов:
| Тип контракта | Где описан полный перечень | Обязательные поля реестра | Применение для контуров |
|---|---|---|---|
| REST/OpenAPI endpoint-ы | Приложение OpenAPI, разделы 2-3: 23 подсистемы и 206 операций. | Подсистема, метод, путь, назначение, авторизация, параметры, тело запроса, успешный ответ, типовые ошибки. | Единый REST-контракт версии поставки для DEV, TEST и PROD; отличаются base URL и эксплуатационные настройки. |
| GraphQL и WebSocket gateway | PA-IF-01, PA-IF-03, реестр сервисов ПД и gateway-конфигурация. |
Канал, endpoint, инициатор, формат сообщений, авторизация, reconnect/error handling. | Используются через опубликованный gateway; внутренние upstream-адреса не являются публичным контрактом. |
| Kafka topic / Redis queue / Celery task | Подраздел 3.4 и реестр сервисов ПД. | Topic/queue, producer, consumer, назначение, формат, retention, retry, DLQ/обработка ошибок. | Имена и retention берутся из конфигурации версии поставки; топология брокеров может отличаться по контуру. |
| Файловый и S3-обмен | PA-IF-07, PA-IF-20, приложение OpenAPI для /api/s3/* и /api/data-storage/*, В7. |
Владелец, путь/URL, формат, срок хранения, связь с БД, правила удаления и восстановления. | Bucket/prefix и физические каталоги задаются эксплуатационной конфигурацией; API-маршруты остаются типовыми. |
| SQL/ClickHouse/Redis внутренние интерфейсы | В7 и реестр сервисов ПД. | Владелец схемы, клиент, назначение, критичность, backup/restore, ограничения прямого доступа. | Внутренний контракт сервисов; не публикуется как внешний API. |
3.2. Детальное описание интерфейсов¶
Детализация ниже дополняет реестр 3.1. Для REST endpoint-ов указан уровень групп и базовых префиксов; полный перечень методов, схем запросов и ответов приведён в OpenAPI-приложении. Чувствительная информация, включая JWT, пароли, ключи Kafka/S3/SMTP/OIDC и реальные адреса внешних систем, в документ не включается. Таймауты, лимиты размера запроса, параметры retry, TLS-терминация и целевые показатели доступности задаются эксплуатационной конфигурацией конкретного контура; в ПА фиксируется применяемый механизм и граница ответственности без публикации чувствительной информации.
Для каждого интерфейса PA-IF-* обязательные атрибуты трактуются следующим
образом:
| Код | Наименование | Источник | Получатель | Тип / протокол / формат | Метод, endpoint, topic или queue | Защита | Таймауты, retry и ошибки | SLA/доступность и ограничения |
|---|---|---|---|---|---|---|---|---|
PA-IF-01 |
Публичный вход UI/API | Пользователь, внешний API-клиент | ui-nginx |
HTTP/HTTPS, WebSocket; HTML/JSON/binary/media | /, /login, /api/*, /api/graphql, /api/ws/, /api/s3/* |
Bearer JWT для защищённых API; TLS на периметре контура | HTTP 4xx/5xx, client reconnect; retry безопасен для GET |
Доступность зависит от gateway и периметра; внутренние сервисы не публикуются напрямую. |
PA-IF-02 |
Статический UI | ui-nginx |
ui-react, UI-config |
HTTP; HTML/JS/CSS/JSON/assets | /config.json, /settings.json, /logo/*, статические ресурсы |
Сетевой периметр, без Bearer для статических файлов | Повтор безопасен; ошибки nginx 4xx/5xx | Проверяется загрузкой UI и runtime-конфигурации. |
PA-IF-03 |
Gateway REST/GraphQL/WebSocket | ui-nginx |
ui-rest-to-gprc |
REST, GraphQL, WebSocket; JSON/multipart/binary | /api/*, /api/graphql, /api/ws/, /api/base/ping/ |
Bearer JWT, service/sync keys для отдельных входов | Upstream/gRPC errors транслируются в HTTP; WebSocket reconnect | Browser-facing API проверяется через /api/base/ping/ и read-only операции. |
PA-IF-04 |
API statistics |
ui-rest-to-gprc |
statistics |
REST/gRPC; JSON/protobuf/files | /api/statistics/auth/*, access, camera-storage, event-storage, audit, report-* |
Bearer JWT, service keys для sync | 401/403/404/422/5xx; retry по идемпотентности метода | Схемы endpoint-ов и ошибки фиксируются в OpenAPI-приложении. |
PA-IF-05 |
API inference |
ui-rest-to-gprc |
inference, extended-inference |
REST/gRPC, HLS/WebRTC; JSON/images/media | /api/inference/*, /api/thermal/mediaserver/video/* |
Bearer JWT, внутренний Docker DNS | Stream reconnect, upstream media errors, 4xx/5xx | Зависит от GPU, медиасервера, моделей и состояния камер. |
PA-IF-06 |
API severstal |
ui-rest-to-gprc |
severstal |
REST/gRPC; JSON/files | Customer-domain маршруты сценариев, ассетов, запусков, ПК-КОТ/CSVN/АСУ ТП | Bearer JWT и параметры внешних интеграций | Retry только с контролем версии/идентификатора | Состав маршрутов зависит от включённых сервисов домена. |
PA-IF-07 |
Файлы и S3/DTS | UI/gateway/сервисы | data-storage, MinIO, DTS |
HTTP, S3-compatible; binary/JSON UUID | /api/s3/*, /api/data-storage/* |
Bearer/gateway checks, bucket credentials внутри контура | Ошибки 403/404/5xx; retry загрузки после проверки состояния | Бинарные данные должны быть согласованы с БД-владельцем. |
PA-IF-08 |
Конфигурация gateway/UI | ui-rest-to-gprc |
Consul KV, локальные config files | HTTP/REST, KV, file read; JSON | /api/config/*, /api/consul/* |
Административные права, сетевой периметр | Изменения проверяются чтением конфигурации | Контурные значения не публикуются в ПА. |
PA-IF-09 |
Основная Kafka | statistics, inference, severstal, gateway |
inf-kafka, consumers |
Kafka; protobuf/JSON | camera_*, KAFKA_TOPIC_*, add_audit_record, event/status topics |
Внутренняя сеть bx_default |
At-least-once, retry consumer-а, dedup по UUID | Retention и consumer groups задаются конфигурацией версии поставки. |
PA-IF-10 |
PostgreSQL sidecar | Доменные сервисы | Доменные PostgreSQL | PostgreSQL wire; SQL rows | DSN/host aliases доменов | Внутренняя сеть, DB credentials | Транзакционные ошибки; retry только для read-only/идемпотентных операций | Схемами владеют сервисы; внешний доступ не публикуется. |
PA-IF-11 |
Redis sidecar / очереди | Доменные сервисы | Redis sidecar | Redis RESP; key-value/TTL/queues | Redis DB/keyspace, Celery broker/result backend | Внутренняя сеть, credentials при наличии | TTL/connection errors; повтор зависит от владельца задачи | Redis не является долговечным источником истины. |
PA-IF-12 |
ClickHouse | statistics, gateway |
ClickHouse sidecar | ClickHouse native/HTTP; SQL rows | ClickHouse tables/views из В7 | Внутренняя сеть, DB credentials | Ошибки запросов/мутаций; retry read-only | Производное зеркало; восстановление согласуется с PostgreSQL/MinIO. |
PA-IF-13 |
Метрики и логи | Сервисы, Docker log driver | Prometheus, Loki | HTTP /metrics, Loki driver; text/log labels |
/metrics, Loki push/query API |
Внутренняя сеть, доступы observability | Scrape errors, log delivery retry | Наблюдаемость не заменяет functional health конкретного API. |
PA-IF-14 |
Видеопотоки | IP-камеры/VMS | inf-mediaserver, NRI |
RTSP, HTTP media; video stream | RTSP URL, virtual/file media URI | Камерные credentials в конфигурации | Reconnect media/inference; ошибки источника видео | Качество зависит от сети, FPS, кодека и доступности камеры. |
PA-IF-15 |
CSVN/VMS | VMS/CSVN | severstal, st-camera-storage |
SOAP/WSDL, HTTP, file; XML/JSON/media | Connector-specific endpoints, upload routes | Credentials внешней системы | Retry sync по внешнему ID; ошибки VMS логируются | Реальные endpoints задаются эксплуатационной конфигурацией. |
PA-IF-16 |
ПК-КОТ | ПК-КОТ | svr-postgres-pk-kot, severstal |
PostgreSQL read-only, HTTP push; SQL/JSON | Tables ПК-КОТ, status push endpoint | DB/HTTP credentials | Retry push статусов, dedup по внешнему ID | Отказ ПК-КОТ деградирует интеграцию, но не весь inference. |
PA-IF-17 |
АСУ ТП | ASUTP Kafka | svr-asutp-* |
Kafka, Avro, Schema Registry | <topic>_meta, <topic>_data, asutp_unit_* |
Изолированный Kafka-контур | Retry consumer-а, Schema Registry errors | Схемы и topics согласуются для версии поставки. |
PA-IF-18 |
OIDC/Keycloak | Браузер, st-auth |
Keycloak/OIDC | OAuth2/OIDC, HTTP; JWT/JSON | /api/statistics/auth/keycloak/*, OIDC endpoints |
OIDC client settings | Ошибки redirect/code/token; retry входа пользователем | Внешний провайдер управляется вне BOX5-DIT-MGSN. |
PA-IF-19 |
SMTP/email | st-auth, report services |
SMTP relay | SMTP; MIME/PDF/XLSX/CSV | SMTP host/port, report send operations | SMTP credentials | Retry зависит от SMTP/сервиса | Отказ SMTP деградирует уведомления и рассылку. |
PA-IF-20 |
Внешние получатели | severstal, events/reports |
Системы заказчика | HTTP/REST, S3/HTTP links; JSON/files | Согласованные external API endpoints | Credentials внешней системы | Retry по идемпотентному внешнему ID | Точные адреса и SLA задаются эксплуатационным соглашением. |
PA-IF-21 |
Sandbox UI | ui-nginx |
node-red-sandbox |
HTTP/WebSocket; HTML/JSON/flow | /sandbox/*, /sandbox/socket.io/ |
Gateway/perimeter, sandbox auth при наличии | Reconnect UI/Socket.IO, 4xx/5xx | Технический контур подготовки сценариев. |
PA-IF-22 |
Публикация сценариев | node-red-sandbox |
API BOX5-DIT-MGSN, MinIO, sandbox Kafka/Redis | REST/S3/Kafka/Redis; JSON/files/models | processings_status_topic, processings_control_topic, Box API routes |
Внутренние credentials и service settings | Celery/Kafka retry, dedup по session/task id | Результаты sandbox не считаются рабочими до публикации и проверки. |
| Код | Каналы, методы и endpoint-ы | Частота и объём данных | Авторизация и защита | Ошибки, таймауты, retry и идемпотентность | Логирование, мониторинг, доступность и ограничения |
|---|---|---|---|---|---|
PA-IF-01 |
Пользовательский вход через ui-nginx: /, /login, /api/*, /api/graphql, /api/ws/, /api/s3*, файловые маршруты, HLS/WebRTC. |
По действиям пользователя и потокам UI. Объём от малых JSON-запросов до бинарных файлов, видеофрагментов и WebSocket-сообщений. | Защищённые REST-операции используют Bearer JWT; часть публичных статических маршрутов доступна без токена. TLS/HTTPS включается эксплуатационной конфигурацией периметра. | HTTP-коды gateway и upstream-сервисов; повтор безопасен для GET, для изменяющих операций выполняется на уровне прикладного сценария. WebSocket переподключается клиентом. |
Access/error logs ui-nginx, логи gateway, проверки /login, /config.json, /api/base/ping/. Внутренние сервисы напрямую пользователю не публикуются. |
PA-IF-02 |
ui-nginx выдаёт ui-react и статические файлы: SPA, /config.json, /settings.json, /logo/*, статические ресурсы и /docs/. |
При открытии интерфейса, обновлении страницы и загрузке ассетов; объём зависит от размера frontend-бандлов и статических файлов. | Обычно без Bearer-токена, так как это статический контент. Защита внешнего доступа обеспечивается сетевым периметром и настройками ui-nginx. |
Ошибки отдаются HTTP-кодами ui-nginx; повтор безопасен и идемпотентен. |
Access/error logs ui-nginx; контроль доступности статических файлов и корректности runtime-конфигурации UI. |
PA-IF-03 |
Проксирование ui-nginx -> ui-rest-to-gprc: /api/*, /api/graphql, /api/ws/, /api/base/ping/, /api/config/*, /api/consul/*. |
По действиям пользователя и фоновых UI-запросов. Основной объём - JSON; возможны multipart upload, бинарные downloads и WebSocket-события. | Bearer JWT для защищённых операций; отдельные служебные и auth-маршруты могут быть открыты согласно OpenAPI/gateway-настройкам. | HTTP/gRPC ошибки транслируются в REST-ответы; GET идемпотентны, POST/PUT/DELETE повторяются только с учётом прикладной сущности. WebSocket восстанавливается клиентом. |
Логи ui-rest-to-gprc и ui-nginx; базовый health - /api/base/ping/. Полная схема REST API описана в OpenAPI-приложении. |
PA-IF-04 |
Gateway -> statistics: /api/statistics/auth/*, access, camera-storage, event-storage, audit, comments, report-*, event-statistics, object-visit-zone-counter, virt-cam-video-upload. |
По действиям UI/API, отчётным операциям и чтению событий. Объём от небольших JSON до PDF/XLSX/CSV, изображений и видеофрагментов. | Bearer JWT для пользовательских операций; отдельные sync/service-входы защищаются настройками gateway и контурными ключами. | Ошибки FastAPI/gRPC возвращаются как HTTP-статусы, типовая ошибка валидации - 422 HTTPValidationError. Идемпотентность зависит от метода: чтение безопасно, изменение проверяется контрольным чтением. |
Логи gateway и сервисов statistics, Kafka/audit-события, /metrics там, где endpoint исправен; некоторые сервисные /metrics могут быть недоступны, что фиксируется в реестре сервисов ПД. |
PA-IF-05 |
Gateway -> inference/extended-inference: /api/inference/image-storage/*, models-storage, gateway, load-balancer, monitoring, /api/thermal/mediaserver/video/*. |
По просмотру видео, preview, мониторинга камер и запросам состояния inference. Потоковые HLS/WebRTC и изображения могут быть существенно больше JSON-ответов. | Bearer JWT на пользовательских маршрутах; внутренние gRPC/HTTP-связи доступны только в Docker-сети. WebRTC/TURN параметры задаются конфигурацией. | Для потоков применяется переподключение клиента; для read-only методов повтор безопасен. Ошибки upstream транслируются gateway или проявляются как недоступность media-сегментов. | Логи ui-rest-to-gprc, inf-domain-gateway, inf-load-balancer, inf-mediaserver, inf-monitoring; метрики и состояние камер используются для диагностики видеоконтура. |
PA-IF-06 |
Gateway -> severstal: customer-domain REST/gRPC для сценариев, ассетов, запусков, реестра моделей, переводов, CSVN/ПК-КОТ/АСУ ТП операций. |
По действиям пользователей, интеграционным задачам и публикации сценариев. Объём - JSON/gRPC metadata, файлы ассетов и ссылки на объекты MinIO. | Bearer JWT на пользовательских маршрутах; внутренние сервисы доступны по Docker DNS. Доступ к внешним системам использует параметры эксплуатационной конфигурации. | Изменяющие операции должны проверяться чтением статуса/сущности. Повтор файловых операций и запусков выполняется только с контролем версии или идентификатора объекта. | Логи svr-* сервисов, PostgreSQL/MinIO/Kafka-состояние, ошибки интеграций. Набор customer-domain маршрутов зависит от включённых сервисов severstal. |
PA-IF-07 |
Файловый контур: /api/s3/*, /api/data-storage/*, S3 API ds-minio, DTS по UUID, st-domain-gateway для object URLs. |
По загрузке/скачиванию медиа, отчётов, изображений событий, ассетов и временных файлов. Объём от малых JSON-метаданных до крупных бинарных объектов. | Пользовательский доступ идёт через gateway/nginx и Bearer JWT там, где маршрут защищён. Прямые MinIO/DTS credentials и endpoint-ы не публикуются. | Повтор чтения идемпотентен. Upload повторяется по UUID/ключу объекта с учётом риска перезаписи; временные объекты DTS ограничены временем жизни. | Логи ui-nginx, ds-minio, DTS и сервисов-владельцев объектов. Ограничение: прямой S3 endpoint считается техническим, пользовательский доступ должен идти через опубликованный маршрут. |
PA-IF-08 |
Gateway -> Consul KV / локальные конфигурационные файлы: /api/config/*, /api/consul/*, чтение config.json и UI settings. |
Редкие операции чтения/изменения конфигурации UI и gateway; объём малый, JSON/key-value. | Доступ к изменяющим операциям ограничивается правами пользователя и настройками gateway. Чувствительная информация в клиентскую конфигурацию не выносится. | Чтение идемпотентно; изменение конфигурации требует проверки повторным чтением. Ошибки возвращаются HTTP-кодами gateway. | Логи ui-rest-to-gprc; контроль корректности конфигурации через /config.json и профильные API. Ограничение: изменения влияют на поведение UI/API без перезаписи документации. |
PA-IF-09 |
Основная Kafka inf-kafka: события инференса, audit, команды камер/объектов, heartbeat, статусы, websocket fan-out, синхронизация справочников. |
Непрерывный асинхронный поток. Объём зависит от числа камер, событий и фоновых синхронизаций. | Kafka доступна внутри bx_default; параметры подключения и имена групп задаются конфигурацией сервисов. Внешний доступ к основной Kafka не публикуется. |
Retry и offset management реализуются Kafka-клиентами сервисов. Идемпотентность обеспечивается message UUID, идентификаторами сущностей и проверкой состояния в хранилищах. | Логи consumers/producers, consumer lag, состояние inf-kafka. Ограничение: порядок гарантируется в рамках partition/topic, межтопиковый порядок не считается строгим контрактом. |
PA-IF-10 |
Доменные PostgreSQL sidecar: подключения сервисов к своим БД, Aerich/миграции, CRUD и транзакции. | Постоянные синхронные обращения сервисов. Объём зависит от числа пользователей, камер, событий, сценариев и отчётных операций. | Доступ только из Docker-сети; логины и пароли БД задаются env/защищёнными параметрами доступа и не документируются. | Транзакционные ошибки обрабатываются приложениями; retry применяется осторожно для read-only или идемпотентных операций. Миграции выполняются владельцем схемы. | Проверки контейнеров БД, pg_isready, логи PostgreSQL и сервисов-владельцев. Sidecar-БД не являются публичным API. |
PA-IF-11 |
Доменные Redis sidecar: кэши, locks, очереди, временное состояние, bootstrap-координация. | Постоянные короткие операции; объём малый или средний, зависит от очередей и TTL-состояний. | Доступ только из Docker-сети; параметры подключения не публикуются. | Повтор команд зависит от типа операции: чтение безопасно, lock/queue операции повторяются только по логике владельца. Потеря Redis может приводить к деградации кэша или фоновых задач. | Проверки контейнеров и Redis PING, логи сервисов-владельцев. Redis не является источником истины для пользователей, событий и сценариев. |
PA-IF-12 |
ClickHouse sidecar: native TCP/HTTP SQL для событийных зеркал, статистики, lookup-таблиц и аналитических маршрутов gateway. | По аналитическим запросам UI, ingest из сервисов и resync/backfill. Объём средний/высокий, зависит от событий и глубины выборок. | Внутренний технический доступ; отдельные опубликованные порты используются для эксплуатации, не как пользовательский API. | SQL mutations ClickHouse асинхронны; повтор чтения безопасен, повтор resync/backfill выполняется регламентно. Возможна eventual consistency с PostgreSQL. | Проверки ClickHouse SELECT 1, /ping, наличие таблиц, логи сервисов-владельцев и consumer lag. |
PA-IF-13 |
Наблюдаемость: сервисы -> Prometheus /metrics, Docker logs -> Loki. |
Метрики собираются периодически; логи передаются непрерывно. Объём зависит от нагрузки и уровня логирования. | Эксплуатационный доступ ограничивается сетевым периметром; чувствительная информация и JWT не должны публиковаться в логах и документации. | Потеря Prometheus/Loki не останавливает бизнес-функции, но ухудшает диагностику. Повтор scrape выполняет Prometheus. | Состояние targets Prometheus, Loki API, Docker log driver. Ограничение: не все сервисные /metrics endpoint-ы исправны в текущем контуре. |
PA-IF-14 |
IP-камеры и виртуальные источники -> inference: RTSP, HTTP/MP4, virtual/file media URI; downstream HLS/WebRTC внутри BOX5-DIT-MGSN. |
Непрерывный поток для активных камер; объём высокий, пропорционален числу потоков, FPS и разрешению. | Камерные URL и credentials задаются эксплуатационной конфигурацией и не публикуются. Доступ к downstream-просмотру идёт через UI/gateway. | Переподключение и recovery выполняют media/inference-компоненты. Идемпотентность неприменима к live-потоку; для событий используется message UUID downstream. | Логи inf-mediaserver, inf-load-balancer, inf-nri-inference, мониторинг состояния камер. Ограничение: физические камеры и VMS находятся за границей ПО BOX5-DIT-MGSN. |
PA-IF-15 |
CSVN/VMS -> severstal/statistics: Cisco/Milestone SOAP/WSDL, Macroscop HTTP, connector VIRTUAL, загрузка архивных видео. |
По расписанию синхронизации, запросам архива и настройкам интеграции. Объём от JSON/XML метаданных до видеофайлов. | Credentials и реальные VMS endpoints задаются эксплуатационной конфигурацией и не раскрываются. | Повтор синхронизации должен учитывать внешние идентификаторы камер и уже загруженные медиа. Ошибки внешнего VMS логируются интеграционными сервисами. | Логи svr-severstal-integration, svr-severstal-org-sync, st-virt-cam-video-upload; контроль результата в camera-storage и списках загруженных видео. |
PA-IF-16 |
ПК-КОТ <-> BOX5-DIT-MGSN: PostgreSQL read-only для справочников, HTTP push для событий/статусов. | По регламенту синхронизации и при изменении статуса события. Объём малый/средний, табличные строки и JSON-статусы. | Параметры подключения к БД и push URL задаются эксплуатационной конфигурацией. В документации не фиксируются логины, пароли и реальные адреса. | Read-only операции повторяемы. Push статусов должен быть устойчив к повторной отправке по внешнему идентификатору события/статуса. | Логи svr-postgres-pk-kot, svr-severstal-integration, svr-severstal-org-sync; контроль успешности push и свежести справочников. |
PA-IF-17 |
АСУ ТП -> svr-asutp: Kafka _meta/_data, Avro, Schema Registry API; публикация результата в основной Kafka. |
Асинхронный поток сигналов. Объём зависит от числа ASUTP-юнитов и частоты сигналов. | Доступ к ASUTP Kafka и Schema Registry задаётся конфигурацией; внешние credentials не публикуются. | Kafka retry/offset management на стороне consumers; сообщения проверяются по Avro-схемам. Дубли обрабатываются по ключам, timestamp и логике расчёта состояния. | Логи svr-asutp, svr-asutp-kafka, Schema Registry, consumer lag. Ограничение: ASUTP Kafka является отдельным технологическим контуром. |
PA-IF-18 |
OIDC/Keycloak: браузер пользователя, st-auth, ui-rest-to-gprc; authorization code flow и локальный выпуск JWT. |
При входе пользователя и обновлении сессии; объём малый, redirect parameters и JSON/JWT. | Защита определяется OIDC/OAuth2 и локальной проверкой JWT. Параметры OPEN_ID_*, конфиденциальный параметр OIDC-клиента и URL провайдера не публикуются. |
Ошибки авторизации возвращаются через auth API/UI. Повтор login выполняется пользователем; refresh token обновляет локальную пару токенов. | Логи st-auth и gateway без публикации токенов. Ограничение: уже выданные stateless JWT действуют до истечения срока. |
PA-IF-19 |
SMTP/email: st-auth, st-report-email, отчётные сервисы -> SMTP. |
По событию сброса пароля, настройкам рассылки или регламенту отчёта. Объём малый/средний, возможны вложения PDF/XLSX/CSV. | SMTP credentials, адрес сервера и отправителей задаются конфигурацией и не документируются. | Повтор отправки может привести к дублю письма, поэтому выполняется по прикладному статусу/журналу. Ошибки SMTP логируются сервисом-отправителем. | Логи st-auth, st-report-email, отчётных сервисов; контроль успешности по статусам отправки и отсутствию ошибок SMTP. |
PA-IF-20 |
BOX5-DIT-MGSN -> внешние получатели данных: HTTP/REST, S3/HTTP ссылки, отчётные и событийные выгрузки. | По интеграционным сценариям, событиям, статусам или регламентным выгрузкам. Объём от JSON-статусов до отчётов и ссылок на медиа. | Способ авторизации зависит от согласованного внешнего API и задаётся эксплуатационной конфигурацией. Чувствительная информация не публикуется. | Retry и идемпотентность определяются внешним контрактом; рекомендуемый ключ идемпотентности - идентификатор события, статуса или отчёта. | Логи интеграционных сервисов и отчётных задач; контроль HTTP-кодов внешней системы. Ограничение: внешняя доступность не контролируется BOX5-DIT-MGSN. |
PA-IF-21 |
ui-nginx -> node-red-sandbox: /sandbox/, UI sandbox, backend, WebSocket. |
По действиям инженера/администратора при подготовке сценариев. Объём - UI assets, flow JSON, служебные ответы. | Доступ технический; ограничения задаются ui-nginx, sandbox-настройками и сетевым периметром. |
Ошибки прокси/backend возвращаются HTTP-кодами; повтор чтения безопасен, изменение flows требует контроля версии/содержимого. | Логи nr-sbx-nginx, frontend/backend, Node-RED; sandbox не является пользовательским API рабочего контура. |
PA-IF-22 |
node-red-sandbox -> основной API BOX5-DIT-MGSN, MinIO, sandbox Kafka/Redis: публикация flows, файлы, проверочные запуски. |
По действиям подготовки и публикации сценариев; объём зависит от размера flows, моделей и тестовых артефактов. | Технические параметры доступа задаются конфигурацией sandbox и Box API. Чувствительная информация и токены не документируются. | Публикация должна проверяться чтением опубликованной версии/сценария. Повтор операции выполняется только с контролем версии flow или имени артефакта. | Логи sandbox backend, Node-RED, NRI, Celery, Kafka/Redis. Ограничение: результат sandbox-проверки не заменяет проверку опубликованного сценария в рабочем контуре. |
3.3. Общие требования к API¶
Общие требования применяются к опубликованным REST API, GraphQL/WebSocket маршрутам gateway, внутренним HTTP/gRPC-вызовам и интеграционным HTTP API, если для конкретного интерфейса не задано более строгое правило в разделе 3.2, OpenAPI-приложении или эксплуатационной конфигурации.
3.3.1. Источник спецификации и область действия¶
| Требование | Описание |
|---|---|
| Основной источник REST-контракта | Детальный состав REST endpoint-ов, схем запросов, схем ответов и security-схем фиксируется в OpenAPI-приложении. |
| Состав API эксплуатационных контуров | В ПА приведены API-группы применяемых сервисов и доменов BOX5-DIT-MGSN. Для DEV, TEST и PROD состав API-контрактов считается единым в рамках одной версии поставки; различия относятся к base URL, числу узлов, подключённым источникам данных и эксплуатационным параметрам. |
| Базовый URL | Все пути в документации указываются относительно базового URL API эксплуатационного контура (<base_url>). Фактический адрес контура, доменное имя и TLS-настройки задаются эксплуатационной конфигурацией. |
| Единая точка публикации | Пользовательские и внешние API-вызовы проходят через gateway/edge-слой ui-nginx и ui-rest-to-gprc. Внутренние сервисы не рассматриваются как самостоятельные публичные точки входа. |
| Машинная сверяемость | При выпуске версии документа OpenAPI-приложение должно соответствовать доступной Swagger/OpenAPI-спецификации применяемого контура без публикации чувствительной информации, JWT, паролей и постоянных токенов. Машиночитаемый OpenAPI JSON/YAML передаётся или хранится как артефакт версии поставки; внутренние URL выгрузки в ПА не публикуются. |
3.3.2. Именование, методы и версии¶
| Требование | Описание |
|---|---|
| Именование путей | REST endpoint-ы группируются по доменным префиксам: /api/statistics/*, /api/inference/*, /api/data-storage/*, /api/s3/*, /api/base/*, /api/config/*, /api/consul/* и customer-domain маршрутам gateway. |
| Стабильность префиксов | Публичные префиксы API считаются частью контракта документа. Изменение префикса допускается только вместе с обновлением OpenAPI-приложения и описания интерфейсов. |
| HTTP-методы | GET используется для чтения, POST - для создания, запуска операций и сложных выборок, PUT - для изменения, DELETE - для удаления. Исторические отклонения фиксируются в OpenAPI как существующий контракт. |
| Версионирование | Версия API определяется версией поставки ПО, документации и OpenAPI-спецификации. Опубликованные пути API приведены в OpenAPI-приложении. |
| Версия API по подсистемам | Если отдельная версия подсистемы не выделена в URL или OpenAPI metadata, версия её API равна версии поставки BOX5-DIT-MGSN и идентификатору OpenAPI-выгрузки. Дополнительные /v1, /v2 и аналогичные префиксы вводятся только при явном появлении такого контракта в реализации. |
| Обратная совместимость | Расширение схемы новыми необязательными полями допускается как совместимое изменение. Удаление endpoint-а, переименование поля, изменение типа поля или изменение обязательности параметра считается несовместимым и требует отдельного согласования релиза. |
3.3.3. Форматы запросов и ответов¶
| Требование | Описание |
|---|---|
| Основной формат | Основной формат запросов и ответов REST API - JSON (application/json). |
| Формы и файлы | Для входа пользователя может использоваться application/x-www-form-urlencoded; для загрузки файлов используется multipart/form-data; для скачивания отчётов, изображений и видео допускаются бинарные ответы без JSON-схемы. |
| Потоковые данные | HLS/WebRTC, WebSocket и файловые маршруты могут возвращать потоковое или фрагментированное содержимое. Такие ответы описываются в ПА как медиа/потоковые и не требуют JSON-схемы. |
| Кодировка и даты | Текстовые JSON-данные передаются в UTF-8. Временные метки должны передаваться в формате, заданном схемой конкретного endpoint-а; при наличии timezone-параметра он передаётся явно. |
| Схемы данных | Для REST endpoint-ов применяются схемы из OpenAPI-приложения. Для Kafka/gRPC/S3/SQL-интерфейсов схемы и структуры данных задаются сервисами-владельцами и реестром сервисов ПД. |
3.3.4. Ошибки и статусы¶
| Требование | Описание |
|---|---|
| HTTP-статусы | Успешные операции возвращают 2xx-коды. Ошибки запроса возвращают 400, ошибки авторизации и доступа - 401/403, отсутствие ресурса - 404, конфликт состояния - 409, ошибки валидации - 422, внутренние ошибки upstream-сервиса - 5xx. |
| Ошибка валидации | Типовая ошибка валидации FastAPI описывается схемой HTTPValidationError и кодом 422. |
| Бизнес-ошибки | Прикладные ошибки возвращаются в формате, заданном конкретным сервисом и OpenAPI-схемой. Текст ошибки не должен раскрывать чувствительную информацию: пароли, токены, внутренние DSN и полные env-настройки. |
| Ошибки по API-группам | Для endpoint-ов типовые ошибки указаны в реестрах подсистем OpenAPI-приложения. Если у endpoint-а нет отдельной схемы ошибки, применяется общий набор 400/401/403/404/409/422/5xx с телом ошибки, определённым сервисом-владельцем. |
| Повторы запросов | Повтор безопасен для операций чтения. Повтор изменяющих операций выполняется только при наличии прикладного идентификатора, контроля статуса или проверки результата чтением. |
| Таймауты | Значения таймаутов gateway, upstream-сервисов и внешних интеграций задаются эксплуатационной конфигурацией. Документация фиксирует механизм обработки ошибок, но не публикует контурные значения таймаутов. |
3.3.5. Авторизация и технические заголовки¶
| Требование | Описание |
|---|---|
| Основная схема авторизации | Защищённые пользовательские операции используют Bearer JWT, выданный st-auth или полученный после OIDC/Keycloak-входа. |
| Публичные операции | Операции входа, получения параметров внешней авторизации, статические файлы и отдельные служебные проверки могут быть доступны без Bearer-токена, если это указано в OpenAPI или настройках gateway. |
| Постоянные и sync-токены | Постоянные токены и контурные ключи синхронизации применяются только для специальных сценариев. Их значения не приводятся в документации и не должны попадать в журналы. |
| Обязательные HTTP-заголовки | Для JSON-запросов передаются Content-Type: application/json и Accept: application/json; для защищённых операций - Authorization: Bearer <token>; для multipart-загрузок - соответствующий multipart/form-data boundary. |
| Корреляция запросов | Для интеграционных и изменяющих запросов клиент должен передавать X-Request-ID или X-Correlation-ID. Если заголовок не передан, gateway или сервис может сформировать локальный идентификатор. Полученный идентификатор сохраняется в логах и проксируется downstream, где это поддержано реализацией. |
| Чувствительная информация в заголовках | JWT, постоянные токены, SMTP/OIDC/S3/Kafka credentials и sync-ключи запрещено публиковать в документации, примерах, скриншотах и открытых логах. |
3.3.6. Логирование, мониторинг и аудит¶
| Требование | Описание |
|---|---|
| Логирование API | Edge/gateway и backend-сервисы должны писать технологические логи запросов, ошибок и upstream-сбоев в stdout/stderr контейнеров с последующей доставкой в Loki, если это включено конфигурацией. |
| Audit-события | Пользовательские действия, влияющие на состояние системы, должны передаваться в audit-контур, если операция поддерживается соответствующим сервисом и gateway. |
| Метрики | Сервисы могут предоставлять /metrics для Prometheus. Если endpoint метрик отсутствует или неисправен у конкретного сервиса, эксплуатационный контроль выполняется по состоянию контейнера, логам и профильным read-only проверкам. |
| Проверка доступности | Базовая проверка browser-facing API - /api/base/ping/. Для доменных API применяются контрольные read-only операции из OpenAPI-приложения и реестра сервисов ПД. |
| Персональные данные и чувствительная информация | Логи и метрики не должны раскрывать пароли, JWT, постоянные токены, ключи доступа, полные DSN и конфиденциальные значения env. |
3.3.7. Требования к изменениям API¶
| Требование | Описание |
|---|---|
| Обновление документации | Любое изменение опубликованного endpoint-а, схемы запроса, схемы ответа или security-схемы требует обновления OpenAPI-приложения и соответствующих разделов ПА. |
| Совместимые изменения | Допускаются новые endpoint-ы применяемых сервисов, новые необязательные поля, новые значения справочников и уточнение описаний без нарушения существующих клиентов. |
| Несовместимые изменения | Удаление endpoint-а, изменение метода, пути, типа поля, обязательности поля, формата ошибки или схемы авторизации требует отдельного описания в релизной документации и миграции клиентов. |
| Деградация внешних систем | Отказ внешних систем (OIDC, SMTP, ПК-КОТ, CSVN/VMS, АСУ ТП, внешние API получателей данных) должен обрабатываться как деградация соответствующего интерфейса без раскрытия чувствительной информации и без остановки независимых функций BOX5-DIT-MGSN. |
| Проверка после изменения | После изменения API выполняется сборка документации, сверка OpenAPI-реестра и, для применимых операций, контрольные вызовы в эксплуатационном контуре или read-only проверки сервисов без публикации чувствительных данных. |
3.3.8. Версии, ошибки и совместимость по API-группам¶
| API-группа | Версия API | Типовые ошибки | Правила совместимости |
|---|---|---|---|
auth, access, audit |
Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки. | 400/401/403/404/409/422/5xx; HTTPValidationError для ошибок схемы. |
Нельзя менять формат токенов, ролей, прав и audit-событий без миграции клиентов и обновления gateway. |
camera-storage, comments, config, consul |
Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки. | 400/401/403/404/409/422/5xx; прикладные ошибки владельца справочника. | Совместимы новые необязательные поля и справочники; удаление поля камеры, зоны или конфигурации считается breaking change. |
event-storage, event-statistics, object-visit-zone-counter |
Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки. | 400/401/403/404/409/422/5xx; ошибки отсутствия события, медиа или аналитической витрины. | Идентификаторы событий, структура фильтров и форматы дат должны оставаться совместимыми в пределах релиза. |
report-pdf-xlsx-generator, auth-report-pdf-xlsx-generator, report-email |
Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки. | 400/401/403/404/409/422/5xx; ошибки генерации, отсутствия шаблона, SMTP или файла. | Изменение формата отчёта допустимо как версия шаблона; изменение API запуска/скачивания требует обновления клиентов. |
image-storage, models-storage, gateway, load-balancer, monitoring, mediaserver |
Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки. | 400/401/403/404/409/422/5xx; ошибки недоступности модели, камеры, медиапотока или GPU-сервиса. | Медиа-URL, идентификаторы моделей и статусы inference не должны менять тип без отдельного релиза. |
s3, data-storage, virt-cam-video-upload |
Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки. | 400/401/403/404/409/422/5xx; ошибки доступа к объекту, истечения срока временного файла или несогласованности БД/MinIO. | Совместимы новые необязательные метаданные; изменение жизненного цикла файлов должно быть отражено в В7 и И3. |
| Интеграционные маршруты customer-domain API | Версия поставки BOX5-DIT-MGSN и OpenAPI-выгрузки либо согласованной интеграционной спецификации. | 400/401/403/404/409/422/5xx; ошибки внешнего источника, недоступности connector-а или конфликта статуса. | Breaking changes согласуются как изменение интеграционного сценария с заказчиком и сопровождаются правилами повторной отправки/идемпотентности. |
3.4. Асинхронный обмен (базовое)¶
Асинхронный обмен используется для доставки событий инференса, команд
синхронизации, статусов, heartbeats, audit-записей, WebSocket-уведомлений и
интеграционных сигналов. Подраздел задаёт базовые правила для интерфейсов
PA-IF-09, PA-IF-17, PA-IF-22 и Redis/Celery-очередей, которые
перечислены в разделе 3.1. Асинхронные топики, consumer groups,
Kafka/S3/DB credentials и контурные значения retention задаются
эксплуатационной конфигурацией и не публикуются как чувствительная информация.
Отдельная AsyncAPI-спецификация на момент подготовки ПА не выделяется:
согласованным описанием асинхронного обмена для документа является таблица
topic/queue ниже, код сервисов-владельцев сообщений и эксплуатационная
конфигурация версии поставки. При появлении AsyncAPI она должна быть включена
в комплект поставки и связана с данным разделом.
3.4.1. Контуры асинхронного обмена¶
| Контур | Компоненты | Назначение | Ограничения |
|---|---|---|---|
| Основная событийная шина BOX5-DIT-MGSN | inf-kafka в домене kafka-domain |
Связность statistics, inference, severstal, ui-rest-to-gprc и отчётных сервисов: события, команды камер, изменения справочников, audit, статусы, WebSocket fan-out. |
Внутренний Kafka-контур, не является публичным REST/gRPC API. Схемами сообщений владеют сервисы-производители и потребители. |
| Технологический контур АСУ ТП | svr-asutp-kafka, svr-asutp-schema-registry, svr-asutp |
Приём пар топиков <topic>_meta / <topic>_data, проверка Avro-схем, расчёт состояния ASUTP-юнитов и публикация итоговых asutp_unit_* сообщений в основную шину. |
Изолирован от основной Kafka. Входные сигналы и схемы относятся к интеграции АСУ ТП и не заменяют общую событийную шину BOX5-DIT-MGSN. |
| Песочница Node-RED/NRI | nr-sbx-kafka, nr-sbx-redis, nr-sbx-celery, nr-sbx-flower |
Статусы, прогресс, control-сообщения и фоновые задачи подготовки сценариев в sandbox-контуре. | Технический контур подготовки сценариев; рабочие события видеоаналитики хранятся в событийных сервисах BOX5-DIT-MGSN. |
| Доменные Redis sidecar | Redis-сервисы statistics, inference, data-storage, severstal, node-red-sandbox |
Кэш, locks, TTL-состояние, временные объекты, Celery broker/result backend и короткие технические очереди. | Redis не рассматривается как долговечная событийная шина и не является источником истины для пользователей, камер, событий или сценариев. |
3.4.2. Базовая схема потоков¶
NRI, mediaserver, load-balancer"] inference -->|"events, heartbeats, status"| mainKafka["inf-kafka
основная шина"] stats["statistics
camera, event, audit, reports"] <-->|"camera/object sync, lifecycle, audit"| mainKafka gateway["ui-rest-to-gprc
REST/GraphQL/WebSocket"] <-->|"audit, websocket service state"| mainKafka severstal["severstal
интеграции заказчика"] <-->|"sync, statuses, scenario events"| mainKafka asutpExt["АСУ ТП"] -->|"Avro topics
<topic>_meta / <topic>_data"| asutpKafka["svr-asutp-kafka
+ Schema Registry"] asutpKafka --> asutp["svr-asutp"] asutp -->|"asutp_unit_*"| mainKafka sandbox["node-red-sandbox"] -->|"status/control, Celery tasks"| sandboxBus["nr-sbx-kafka / nr-sbx-redis"] sandbox -->|"published flows, assets"| severstal mainKafka --> eventStorage["st-event-storage"] eventStorage -->|"state"| pg["PostgreSQL"] eventStorage -->|"media links"| minio["MinIO / S3"] eventStorage -->|"analytics mirror"| ch["ClickHouse"]
Исходный Mermaid-код схемы: ПА-MER-003. 3.4.2. Базовая схема потоков.
3.4.3. Топики и маршрутизация¶
Точные имена топиков задаются переменными вида KAFKA_TOPIC_*, настройками
сервисов и таблицами интеграционных конфигураций. В ПА фиксируются логические
семейства топиков и правила обработки, а не чувствительные значения и не полный
снимок состояния брокера.
| Семейство сообщений | Типовые производители | Типовые потребители | Назначение маршрута |
|---|---|---|---|
| События видеоаналитики и жизненный цикл событий | inf-nri-inference, inf-load-balancer, st-event-storage, svr-severstal-integration |
st-event-storage, отчётные сервисы, severstal, UI/WebSocket consumers |
Создание события, добавление медиа, завершение события, статусы обработки, downstream-уведомления. |
| Камеры, объекты, зоны, presets и модели | st-camera-storage, сервисы моделей, severstal |
inference, statistics, отчёты, integration-сервисы |
Распространение актуальной топологии, правил обработки и готовности моделей. |
| Audit-записи | ui-rest-to-gprc, st-audit, прикладные сервисы |
st-audit |
Централизованная запись действий пользователей и сервисов в audit-хранилище. |
| WebSocket и сервисные статусы | ui-rest-to-gprc, st-event-storage, severstal, сервисы launch/status |
Browser-facing gateway и прикладные consumers | Доставка прогресса, состояния сервисов и обновлений UI без синхронного polling. |
АСУ ТП _meta / _data |
Внешний ASUTP Kafka producer или интеграционный collector | svr-asutp, svr-asutp-schema-registry |
Приём технологических сигналов, проверка Avro-схем и вычисление состояния ASUTP-юнитов. |
| Sandbox status/control | nr-sbx-backend, nr-sbx-celery, sandbox NRI |
nr-sbx-backend, nr-sbx-celery, nr-sbx-flower |
Отображение прогресса sandbox-запусков, управление задачами и диагностика подготовки сценариев. |
Базовая матрица topic/queue для применяемых асинхронных контрактов:
| Topic / queue | Producer | Consumer | Назначение | Формат | Retention | Retry | DLQ / обработка ошибок |
|---|---|---|---|---|---|---|---|
KAFKA_TOPIC_INFERENCE_SEND_EVENT и семейство событий inference |
inf-nri-inference, inf-load-balancer |
st-event-storage, отчётные и integration-сервисы |
Создание и обновление событий видеоаналитики, доставка медиа-ссылок и статусов обработки. | Protobuf/JSON по схеме владельца события. | По конфигурации inf-kafka версии поставки. |
Повтор чтения по offset; запись результата до commit offset. | Отдельная DLQ не фиксируется; сбои разбираются по логам, lag и resync из хранилища владельца. |
camera_*, statistic_camera_*, statistic_cmd_camera_* |
st-camera-storage, gateway, integration-сервисы |
inference, statistics, отчёты |
Синхронизация камер, объектов, зон, presets и команд camera lifecycle. | JSON/protobuf. | По конфигурации inf-kafka. |
Повтор безопасен по camera_uuid, версии или текущему состоянию. |
Невалидные сообщения не должны подтверждаться до обработки; отдельная DLQ не описана. |
add_audit_record |
ui-rest-to-gprc, прикладные сервисы |
st-audit |
Централизованная запись audit-действий пользователей и сервисов. | JSON/protobuf audit payload. | По конфигурации inf-kafka. |
Retry consumer-а, дедупликация по действию/идентификатору, если задан. | Ошибки фиксируются в логах audit-сервиса; отдельная DLQ не описана. |
websocket_*, service status topics |
st-event-storage, severstal, launch/status services |
Browser-facing gateway, UI/WebSocket consumers | Доставка прогресса, обновлений UI и состояния сервисов без polling. | JSON status/event payload. | По конфигурации inf-kafka. |
Повторная доставка допускается; UI должен уметь обновлять состояние идемпотентно. | При сбое UI восстанавливает состояние read-only запросом к API. |
model_version_*, models_storage_ready |
Сервисы моделей, sandbox, storage-сервисы | inference, sandbox consumers |
Уведомление о версии модели, готовности артефактов и изменении model registry. | JSON/protobuf metadata. | По конфигурации inf-kafka. |
Retry по UUID/версии модели. | Ошибки требуют проверки модельного хранилища и статуса модели. |
continue_launch, change_launch_status |
svr-launch-storage, sandbox/backend-сервисы |
Launch/status consumers, sandbox workers | Управление запуском сценариев и сменой статусов выполнения. | JSON command/status payload. | По конфигурации inf-kafka. |
Повтор по launch_uuid/session_id и текущему статусу. |
Ошибки обрабатываются статусом запуска и логами владельца. |
<topic>_meta, <topic>_data |
Внешний ASUTP Kafka producer | svr-asutp, svr-asutp-schema-registry |
Приём технологических сигналов АСУ ТП и проверка Avro-схем. | Avro + Schema Registry. | По конфигурации ASUTP Kafka. | Consumer не фиксирует offset до успешной проверки и расчёта. | Невалидная схема или payload фиксируются в логах; отдельная DLQ не описана. |
asutp_unit_* |
svr-asutp |
Основные consumers BOX5-DIT-MGSN | Публикация рассчитанного состояния ASUTP-юнитов в основной контур. | JSON/protobuf state payload. | По конфигурации inf-kafka. |
Retry по unit_uuid, timestamp и версии состояния. |
Ошибки потребителей разбираются по lag/logs; восстановление через актуальное состояние владельца. |
processings_status_topic |
nr-sbx-celery, sandbox jobs |
nr-sbx-backend, nr-sbx-flower |
Прогресс и статусы sandbox-обработок. | JSON status payload. | По конфигурации sandbox Kafka; в типовом sandbox-профиле retention может быть сокращённым. | Повтор по session_id/task id. |
Ошибки отображаются через статус задачи и логи worker-а. |
processings_control_topic |
nr-sbx-backend, управляющие сценарии |
nr-sbx-celery, consumer group вида process_session_<session_id> |
Управление sandbox-задачами и обработкой текущей сессии. | JSON command payload. | По конфигурации sandbox Kafka. | Повтор по session_id и текущему состоянию задачи. |
Остановка/отмена задачи дополнительно контролируется средствами Celery. |
| Celery/Redis queues sandbox | nr-sbx-backend, Node-RED sandbox |
nr-sbx-celery |
Фоновые задачи подготовки, проверки и публикации сценариев. | Celery metadata, Redis key-value. | По конфигурации Redis/Celery. | Retry Celery-задачи согласно настройкам worker-а. | Отдельная DLQ не фиксируется; состояние проверяется через task result, Flower и логи. |
Маршрутизация сообщений выполняется по топику и consumer group. Ключ сообщения,
если он задан производителем, должен соответствовать устойчивой доменной
сущности: event_uuid, message_uuid, camera_uuid, object_uuid,
unit_uuid, launch_uuid, session_id или аналогичному идентификатору.
Это позволяет сохранять порядок в пределах partition для одной сущности и
упрощает дедупликацию.
3.4.4. Формат сообщений¶
| Контур | Основной формат | Требования |
|---|---|---|
Основная Kafka inf-kafka |
Protobuf и JSON, зависящие от сервиса-владельца | Сообщение должно содержать доменный идентификатор, время события или изменения, тип операции и полезную нагрузку без чувствительной информации. Схема payload фиксируется в коде владельца топика и совместимых клиентах. |
| АСУ ТП | Avro-сообщения, Schema Registry HTTP API | Для обработки требуется согласованная пара <topic>_meta / <topic>_data. _meta описывает идентификатор, имя тега и ключ данных; _data передаёт значение и timestamp. |
| Sandbox Kafka/Redis | JSON/status payload, Celery task metadata, Redis key-value | Данные используются для прогресса и управления текущими sandbox-запусками. Они не являются долговечным бизнес-состоянием продукта. |
| Медиа и крупные файлы | Ссылки на MinIO/S3, DTS UUID, файловые URL | По возможности через Kafka передаются идентификаторы, статусы и ссылки, а бинарные объекты размещаются в файловом или объектном хранилище. |
В сообщениях запрещено передавать пароли, JWT, постоянные токены, Kafka/S3/SMTP/OIDC credentials, DSN с конфиденциальными параметрами и значения закрытых env-параметров. Если диагностический payload содержит персональные или конфиденциальные данные, публикация такого примера в документации допускается только после обезличивания.
3.4.5. Порядок обработки и гарантии доставки¶
| Правило | Описание |
|---|---|
| Модель доставки | Базовая модель для Kafka-потоков - at-least-once: сообщение может быть доставлено повторно, если consumer не подтвердил offset или был перезапущен до фиксации результата. |
| Фиксация offset | Consumer должен фиксировать offset после успешной прикладной обработки: записи в PostgreSQL/ClickHouse, загрузки объекта в MinIO, изменения статуса или публикации downstream-события, если это часть операции. |
| Порядок | Порядок гарантируется только внутри одного topic partition. Между разными топиками и разными partition строгий глобальный порядок не является контрактом. |
| Источник истины | Kafka и Redis не заменяют основное хранилище состояния. Канонические данные пользователей, камер, событий, сценариев, ASUTP-настроек и справочников хранятся в PostgreSQL/MinIO у сервисов-владельцев; ClickHouse является производным зеркалом. |
| Replay и восстановление | После сбоя consumer должен уметь продолжить чтение с сохранённого offset. Если retention топика истёк или сообщение удалено, восстановление выполняется через resync из хранилища владельца, а не через Kafka. |
3.4.6. Retry, идемпотентность и дубликаты¶
| Ситуация | Требование |
|---|---|
| Временная недоступность consumer | Сообщения остаются в Kafka до истечения retention, consumer продолжает обработку после восстановления и повторного чтения offset. |
| Ошибка обработки сообщения | Consumer не должен подтверждать offset до успешного завершения операции. Повторная обработка должна быть безопасной для уже записанного результата. |
| Дубли событий | Сервис-получатель обязан проверять message_uuid, event_uuid, доменный ключ сущности, timestamp, версию или текущий статус перед созданием новой записи. |
| Дубли команд изменения | Изменяющие команды должны приводить систему к одному и тому же итоговому состоянию при повторе: обновление по UUID/версии, soft delete по существующей сущности, повторная публикация статуса без создания лишнего бизнес-объекта. |
| Дубли audit-записей | Audit-сообщения должны содержать пользователя/сервис, действие, время и контекст. Если операция повторяется технически, сервис-владелец должен исключать неконтролируемое размножение записей или явно трактовать повтор как отдельное действие. |
| ASUTP-сигналы | Повторы обрабатываются по topic, ключу данных, timestamp и unit_uuid. Более старое или уже учтённое значение не должно откатывать актуальный результат ASUTP-юнита без явного правила сервиса. |
| Sandbox-задачи | Повтор запуска или control-команды выполняется по session_id/task id и текущему состоянию задачи. Результат sandbox-проверки не считается подтверждением готовности рабочего сценария без публикации и проверки в рабочем контуре. |
3.4.7. Наблюдаемость асинхронного обмена¶
| Проверка | Что контролируется |
|---|---|
| Состояние брокеров | Контейнеры inf-kafka, svr-asutp-kafka, nr-sbx-kafka, наличие Kafka listener-ов, topic list и отсутствие критических broker/controller ошибок в логах. |
| Consumer lag | Отставание групп потребителей по основным topic families: события, камеры, audit, ASUTP, launch/status и sandbox status/control. |
| Состояние сервисов-потребителей | Логи producers/consumers, успешность записи в PostgreSQL/MinIO/ClickHouse, ошибки десериализации, ошибки Schema Registry и повторные restart-циклы. |
| Redis/Celery | Доступность Redis PING, длина очередей, task state, ошибки Celery worker-ов и доступность Flower для sandbox-контура, если он включён. |
| Пользовательский эффект | Появление события в st-event-storage, обновление UI/WebSocket, актуальность статусов ASUTP-юнитов, появление audit-записи и корректность отчётных данных. |
Диагностические проверки выполняются read-only командами и не должны переносить в документацию чувствительную информацию, содержимое токенов, закрытые env-параметры, полные payload-ы с персональными данными или необезличенные фрагменты логов.