Приложение. Исходные тексты схем Mermaid¶
Приложение содержит исходный Mermaid-код графических схем ПА. Диаграммы остаются в основных разделах и приложении OpenAPI, а этот раздел предназначен для копирования, проверки и редактирования кода схем в Mermaid-редакторе.
Перечень схем¶
Исходные тексты Mermaid¶
ПА-MER-001. Границы ответственности¶
Расположение схемы: Раздел 1. Вводная часть.
flowchart LR
external["Пользователь / внешняя система"]
edge["ui-nginx<br/>публикованная граница"]
gateway["ui-rest-to-gprc<br/>REST / GraphQL / WebSocket"]
backend["Доменные сервисы<br/>statistics / inference / severstal / data-storage"]
infra["Хранилища и шина<br/>PostgreSQL / Redis / MinIO / Kafka"]
external --> edge --> gateway --> backend --> infra
backend --> gateway --> edge --> external
ПА-MER-002. 2.2.1. Общая схема связей¶
Расположение схемы: Раздел 2. Структура программного обеспечения.
flowchart LR
classDef external fill:#fff7e6,stroke:#b7791f,color:#1f2937;
classDef edge fill:#eef6ff,stroke:#2563eb,color:#1f2937;
classDef app fill:#eefaf3,stroke:#15803d,color:#1f2937;
classDef infra fill:#f5f3ff,stroke:#6d28d9,color:#1f2937;
users["Пользователи<br/>браузер / API-клиент"]
cameras["IP-камеры<br/>VMS / видеофайлы"]
customer["Системы заказчика<br/>ПК-КОТ / АСУ ТП"]
sso["Keycloak / OIDC"]
smtp["SMTP / уведомления"]
nginx["ui-nginx<br/>внешний вход"]
gateway["ui-rest-to-gprc<br/>REST / GraphQL / WS"]
ui["ui-react<br/>SPA"]
stats["statistics<br/>auth, камеры, события, отчёты"]
inference["inference<br/>media, NRI, HLS"]
severstal["severstal<br/>интеграции заказчика"]
sandbox["node-red-sandbox<br/>подготовка сценариев"]
kafka["kafka-domain<br/>событийная шина"]
storage["data-storage<br/>MinIO / DTS"]
db["PostgreSQL / ClickHouse / Redis<br/>доменные хранилища"]
obs["elk-log<br/>Prometheus / Loki"]
users -->|"HTTP / HTTPS / WS"| nginx
nginx -->|"статический UI"| ui
nginx -->|"/api/*"| gateway
nginx -->|"/api/s3*, файлы"| storage
nginx -->|"/sandbox/*"| sandbox
gateway -->|"HTTP/gRPC"| stats
gateway -->|"HTTP/REST, gRPC"| inference
gateway -->|"API доменов заказчика"| severstal
gateway -->|"S3 / files"| storage
gateway -->|"audit, websocket события"| kafka
cameras -->|"RTSP, VMS API, загрузка"| inference
cameras -->|"архивы и топология"| severstal
customer -->|"PostgreSQL, HTTP, Kafka/Avro"| severstal
sso -->|"OIDC authorization code"| users
stats -->|"SMTP"| smtp
stats <-->|"events, audit, commands"| kafka
inference <-->|"events, heartbeats"| kafka
severstal <-->|"sync, statuses"| kafka
stats --> db
inference --> db
severstal --> db
stats --> storage
inference --> storage
severstal --> storage
stats -.->|"metrics, logs"| obs
inference -.->|"metrics, logs"| obs
severstal -.->|"metrics, logs"| obs
gateway -.->|"logs"| obs
class users,cameras,customer,sso,smtp external;
class nginx,gateway,ui edge;
class stats,inference,severstal,sandbox app;
class kafka,storage,db,obs infra;
ПА-MER-003. 3.4.2. Базовая схема потоков¶
Расположение схемы: Раздел 3. Функции частей программного обеспечения.
flowchart LR
cameras["IP-камеры / VMS"] -->|"RTSP, HTTP media"| inference["inference<br/>NRI, mediaserver, load-balancer"]
inference -->|"events, heartbeats, status"| mainKafka["inf-kafka<br/>основная шина"]
stats["statistics<br/>camera, event, audit, reports"] <-->|"camera/object sync, lifecycle, audit"| mainKafka
gateway["ui-rest-to-gprc<br/>REST/GraphQL/WebSocket"] <-->|"audit, websocket service state"| mainKafka
severstal["severstal<br/>интеграции заказчика"] <-->|"sync, statuses, scenario events"| mainKafka
asutpExt["АСУ ТП"] -->|"Avro topics<br/><topic>_meta / <topic>_data"| asutpKafka["svr-asutp-kafka<br/>+ 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"]
ПА-MER-004. 4.1.2. Общая схема CI/CD¶
Расположение схемы: Раздел 4. Методы и средства разработки.
flowchart LR
code["Коммит в сервисный репозиторий"] --> ci["GitLab CI<br/>lint / test / build"]
ci --> image["Docker image<br/>Registry tag"]
ci --> pkg["Python package / RPC schema<br/>при необходимости"]
image --> pin["Фиксация версии<br/>.env.demo / deployment spec"]
pkg --> pin
pin --> deploy["Развёртывание<br/>compose.sh pull + restart/start"]
deploy --> verify["Проверки<br/>status, logs, API, UI, data flow"]
verify --> release["Версия поставки<br/>эксплуатационный контур"]
verify -. "ошибка" .-> rollback["Rollback<br/>предыдущие tags + restart"]
rollback --> verify
ПА-MER-005. 3.1.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API / браузер
participant Gateway as REST gateway
participant Auth as st-auth
participant KC as Keycloak
Client->>Gateway: POST /api/statistics/auth/login/
Gateway->>Auth: Проверка логина и пароля
Auth-->>Gateway: UserTokens
Gateway-->>Client: access_token, refresh_token
Client->>Gateway: GET /api/statistics/auth/me/
Gateway->>Auth: Проверка Bearer access token
Auth-->>Gateway: UserInfo
Gateway-->>Client: Данные текущего пользователя
Client->>Gateway: POST /api/statistics/auth/refresh/
Gateway->>Auth: Обновление пары токенов
Auth-->>Gateway: UserTokens
Gateway-->>Client: Новая пара токенов
Client->>Gateway: GET /api/statistics/auth/keycloak/info/
Gateway->>Auth: Запрос параметров Keycloak
Auth-->>Gateway: KeyCloakInfo
Client->>KC: Авторизация по authorization code
Client->>Gateway: POST /api/statistics/auth/keycloak/login/
Gateway->>Auth: Обмен code на локальные токены
Auth-->>Client: UserTokens
ПА-MER-006. 3.3.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Access as access
Client->>Gateway: GET /api/statistics/access/group/
Gateway->>Access: Получение групп доступа
Access-->>Client: Список Group
Client->>Gateway: POST /api/statistics/access/group/
Gateway->>Access: Создание группы доступа
Access-->>Client: GroupInfo
Client->>Gateway: POST /api/statistics/access/simple/
Gateway->>Access: Выдача точечного доступа
Access-->>Client: ResponseStatus
Client->>Gateway: GET /api/statistics/access/privileges/{user_id}/
Gateway->>Access: Пересчёт итоговых привилегий
Access-->>Client: Список Access
ПА-MER-007. 3.4.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Comments as comments
Client->>Gateway: POST /api/statistics/comments/thread/
Gateway->>Comments: Создание ветки обсуждения с первым сообщением
Comments-->>Client: CommentsThread
Client->>Gateway: POST /api/statistics/comments/comment/
Gateway->>Comments: Добавление сообщения в ветку обсуждения
Comments-->>Client: CommentsThread
Client->>Gateway: GET /api/statistics/comments/comments/{thread_id}/
Gateway->>Comments: Чтение состава ветки обсуждения
Comments-->>Client: CommentsThread
Client->>Gateway: PUT /api/statistics/comments/comment/
Gateway->>Comments: Изменение сообщения
Comments-->>Client: Message
ПА-MER-008. 3.5.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Admin as Администратор
participant Gateway as REST gateway
participant Camera as camera-storage
Admin->>Gateway: POST /api/statistics/camera-storage/objects/
Gateway->>Camera: Создание объекта наблюдения
Camera-->>Admin: ObjectObservationInfo
Admin->>Gateway: POST /api/statistics/camera-storage/{object_id}/optical-cameras/
Gateway->>Camera: Добавление камеры к объекту
Camera-->>Admin: CameraInfo
Admin->>Gateway: POST /api/statistics/camera-storage/ex-zones/
Gateway->>Camera: Настройка зон камеры
Camera-->>Admin: EXZone
Admin->>Gateway: GET /api/statistics/camera-storage/export_json/
Gateway->>Camera: Выгрузка конфигурации
Camera-->>Admin: JSON-конфигурация camera-storage
ПА-MER-009. 3.6.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Source as Отправитель события
participant Gateway as REST gateway
participant Events as event-storage
participant UI as Клиент API / UI
Source->>Gateway: POST /api/statistics/event-storage/events/
Gateway->>Events: Сохранение InfViolationEvent
Events-->>Source: InfViolationEvent
UI->>Gateway: GET /api/statistics/event-storage/events/
Gateway->>Events: Получение ленты событий
Events-->>UI: StoredViolationEvents
UI->>Gateway: PUT /api/statistics/event-storage/events/{event_id}/
Gateway->>Events: Обновление статуса события
Events-->>UI: StoredViolationEvent
UI->>Gateway: GET /api/statistics/event-storage/events-count/
Gateway->>Events: Подсчёт статистики
Events-->>UI: EventsCount
ПА-MER-010. 3.7.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Reports as report-pdf-xlsx-generator
Client->>Gateway: POST /api/statistics/report-pdf-xlsx-generator/events-report-pdf-async/
Gateway->>Reports: Запуск формирования отчёта
Reports-->>Client: ReportUUID
loop До завершения формирования
Client->>Gateway: GET /api/statistics/report-pdf-xlsx-generator/reports/
Gateway->>Reports: Получение списка отчётов и статусов
Reports-->>Client: ReportPdfXlsxGeneratorReportInfoList
end
Client->>Gateway: GET /api/statistics/report-pdf-xlsx-generator/reports/{report_uuid}/
Gateway->>Reports: Скачивание готового отчёта
Reports-->>Client: Файл отчёта
Client->>Gateway: DELETE /api/statistics/report-pdf-xlsx-generator/reports/{report_uuid}/
Gateway->>Reports: Удаление отчёта из хранилища
Reports-->>Client: ResponseStatus
ПА-MER-011. 3.8.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Reports as auth-report-pdf-xlsx-generator
Client->>Gateway: POST /api/statistics/auth-report-pdf-xlsx-generator/login-report/pdf/
Gateway->>Reports: Формирование PDF по истории входов
Reports-->>Client: Файл PDF
Client->>Gateway: POST /api/statistics/auth-report-pdf-xlsx-generator/login-report/xlsx/
Gateway->>Reports: Формирование XLSX по истории входов
Reports-->>Client: Файл XLSX
ПА-MER-012. 3.9.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Mail as report-email
participant Channels as Каналы уведомлений
Client->>Gateway: GET /api/statistics/report-email/notification-info-2/
Gateway->>Mail: Чтение настроек уведомлений
Mail-->>Client: UserNotificationInfo2
Client->>Gateway: POST /api/statistics/report-email/notification-info-2/
Gateway->>Mail: Сохранение каналов и расписаний
Mail-->>Client: ResponseStatus
Client->>Gateway: POST /api/statistics/report-email/test-sending/
Gateway->>Mail: Проверка email-рассылки
Mail->>Channels: Отправка тестового сообщения
Mail-->>Client: ResponseStatus
ПА-MER-013. 3.11.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Admin as Администратор
participant Gateway as REST gateway
participant Visits as object-visit-zone-counter
Admin->>Gateway: POST /api/statistics/object-visit-zone-counter/object-visits/
Gateway->>Visits: Создание правила посещения зоны
Visits-->>Admin: ObjectVisit
Admin->>Gateway: GET /api/statistics/object-visit-zone-counter/object-visits/
Gateway->>Visits: Получение настроенных правил
Visits-->>Admin: ObjectVisitList
Admin->>Gateway: GET /api/statistics/object-visit-zone-counter/visit-events/
Gateway->>Visits: Получение событий посещений
Visits-->>Admin: VisitObjectZoneEventList
ПА-MER-014. 3.12.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Upload as virt-cam-video-upload
Client->>Gateway: POST /api/statistics/virt-cam-video-upload/
Gateway->>Upload: Загрузка видеофайла
Upload-->>Client: HTTP-статус
Client->>Gateway: GET /api/statistics/virt-cam-video-upload/
Gateway->>Upload: Получение списка файлов
Upload-->>Client: Список VideoFile
Client->>Gateway: POST /api/statistics/virt-cam-video-upload/transcode/
Gateway->>Upload: Перекодирование выбранного файла
Upload-->>Client: VideoFile
Client->>Gateway: DELETE /api/statistics/virt-cam-video-upload/{file_id}/
Gateway->>Upload: Удаление файла
Upload-->>Client: ResponseStatus
ПА-MER-015. 3.15.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API / UI
participant Gateway as REST gateway
participant Config as config
Client->>Gateway: GET /api/config/
Gateway->>Config: Получение действующей конфигурации
Config-->>Client: Конфигурация
Client->>Gateway: PUT /api/config/
Gateway->>Config: Обновление конфигурации
Config-->>Client: HTTP-статус
Client->>Gateway: POST /api/config/revert/
Gateway->>Config: Возврат конфигурации по умолчанию
Config-->>Client: HTTP-статус
ПА-MER-016. 3.18.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant UI as Клиент API / UI
participant Gateway as REST gateway
participant LB as load-balancer
participant Node as Узел inference
UI->>Gateway: GET /api/inference/load-balancer/info/with_monitoring/
Gateway->>LB: Получение распределения камер и мониторинга
LB->>Node: Сбор состояния узлов и камер
LB-->>UI: Список NodeBalancerInfoWithMonitoring
UI->>Gateway: GET /api/inference/load-balancer/video/camera/{camera_id}.m3u8
Gateway->>LB: Запрос HLS-плейлиста камеры
LB-->>UI: m3u8 playlist
UI->>Gateway: GET /api/inference/load-balancer/video/camera/{camera_id}/{chank_name}
Gateway->>LB: Запрос HLS-чанка
LB-->>UI: HLS chunk
UI->>Gateway: POST /api/inference/load-balancer/webrtc/
Gateway->>LB: Передача WebRTC offer
LB-->>UI: WebRTC answer
ПА-MER-017. 3.20.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant UI as Клиентское приложение
participant Gateway as REST gateway
participant Consul as consul
UI->>Gateway: GET /api/consul/ui-config/
Gateway->>Consul: Чтение UI-конфигурации
Consul-->>UI: Конфигурация UI
UI->>Gateway: PUT /api/consul/ui-config/
Gateway->>Consul: Сохранение UI-конфигурации
Consul-->>UI: HTTP-статус
ПА-MER-018. 3.22.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Client as Клиент API
participant Gateway as REST gateway
participant Storage as data-storage
participant ObjectStore as MinIO / DataTemporaryStorage
Client->>Gateway: POST /api/data-storage/image-dts/
Gateway->>Storage: Загрузка изображения
Storage->>ObjectStore: Сохранение изображения
Storage-->>Client: DSDataInfo
Client->>Gateway: GET /api/data-storage/image-dts/?uuid=...
Gateway->>Storage: Получение изображения по uuid
Storage->>ObjectStore: Чтение изображения
Storage-->>Client: Изображение
Client->>Gateway: POST /api/data-storage/minio/
Gateway->>Storage: Загрузка файла в объектное хранилище
Storage->>ObjectStore: Сохранение файла
Storage-->>Client: HTTP-статус
ПА-MER-019. 3.23.1. Основные сценарии¶
Расположение схемы: Приложение. OpenAPI / Swagger-спецификации.
sequenceDiagram
participant Player as Видеоплеер
participant Gateway as REST gateway
participant Media as mediaserver
Player->>Gateway: GET /api/thermal/mediaserver/video/camera/{camera_id}.m3u8
Gateway->>Media: Запрос HLS-плейлиста камеры
Media-->>Player: m3u8 playlist
loop Воспроизведение потока
Player->>Gateway: GET /api/thermal/mediaserver/video/camera/{camera_id}/{chank_name}
Gateway->>Media: Запрос HLS-чанка
Media-->>Player: HLS chunk
end
Player->>Gateway: GET /api/thermal/mediaserver/video/inference/{camera_id}.m3u8
Gateway->>Media: Запрос плейлиста инференс-потока
Media-->>Player: m3u8 playlist
ПА-MER-020. Описание API¶
Расположение схемы: Описание API.
flowchart LR
client["Пользователь / API-клиент"]
gateway["ui-nginx + ui-rest-to-gprc<br/>единая API-граница"]
stats["statistics<br/>auth, камеры, события, отчёты"]
inf["inference + extended-inference<br/>медиа, NRI, ресурсы"]
svr["severstal<br/>интеграции заказчика"]
ds["data-storage<br/>MinIO / DTS"]
kafka["kafka-domain<br/>асинхронный обмен"]
obs["elk-log<br/>логи и метрики"]
client -->|"HTTP / REST / GraphQL / WebSocket"| gateway
gateway --> stats
gateway --> inf
gateway --> svr
gateway --> ds
stats <--> kafka
inf <--> kafka
svr <--> kafka
stats -.-> obs
inf -.-> obs
svr -.-> obs