Перейти к содержанию

Приложение. Исходные тексты схем Mermaid

Приложение содержит исходный Mermaid-код графических схем ПА. Диаграммы остаются в основных разделах и приложении OpenAPI, а этот раздел предназначен для копирования, проверки и редактирования кода схем в Mermaid-редакторе.

Перечень схем

Код Раздел / приложение Расположение
ПА-MER-001 Границы ответственности Раздел 1. Вводная часть
ПА-MER-002 2.2.1. Общая схема связей Раздел 2. Структура программного обеспечения
ПА-MER-003 3.4.2. Базовая схема потоков Раздел 3. Функции частей программного обеспечения
ПА-MER-004 4.1.2. Общая схема CI/CD Раздел 4. Методы и средства разработки
ПА-MER-005 3.1.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-006 3.3.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-007 3.4.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-008 3.5.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-009 3.6.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-010 3.7.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-011 3.8.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-012 3.9.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-013 3.11.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-014 3.12.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-015 3.15.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-016 3.18.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-017 3.20.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-018 3.22.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-019 3.23.1. Основные сценарии Приложение. OpenAPI / Swagger-спецификации
ПА-MER-020 Описание API Описание API

Исходные тексты 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/>&lt;topic&gt;_meta / &lt;topic&gt;_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