From fe1f7b31b430c57a78bffee1a39a257181b7af1b Mon Sep 17 00:00:00 2001 From: t0xa Date: Thu, 28 Aug 2025 15:38:10 +0300 Subject: [PATCH] Add some ivideon schemes --- ivideon/puml/9159.puml | 3 + ivideon/puml/9179/analytics_node.puml | 60 ++++++++++++++++++++ ivideon/puml/9179/analytics_node_stream.puml | 34 +++++++++++ ivideon/puml/9179/general.puml | 51 +++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 ivideon/puml/9179/analytics_node.puml create mode 100644 ivideon/puml/9179/analytics_node_stream.puml create mode 100644 ivideon/puml/9179/general.puml diff --git a/ivideon/puml/9159.puml b/ivideon/puml/9159.puml index f7c22f4..7d4dfa4 100644 --- a/ivideon/puml/9159.puml +++ b/ivideon/puml/9159.puml @@ -16,11 +16,14 @@ package "api_concept.entities/maas" { package "maas/api/impl/organization" { class MaasOrganization { + + {field} PERMISSIONS_COLLECTION = db.main().permission_grants + + share_grant(\n grantee_id,\n permission\n) } } package "api_concept.backend/impl/permission_grant" { class PermissionGrant { + + {field} COLLECTION = db.main().ivideon.permission_grants + find() } diff --git a/ivideon/puml/9179/analytics_node.puml b/ivideon/puml/9179/analytics_node.puml new file mode 100644 index 0000000..9d5588f --- /dev/null +++ b/ivideon/puml/9179/analytics_node.puml @@ -0,0 +1,60 @@ +@startuml +title Узел аналитики: взаимодействие сервисов и внешних систем + +skinparam componentStyle rectangle +skinparam wrapWidth 200 +skinparam maxMessageSize 200 + +'=== Внешние системы === +cloud "Централ (API5)" as CENTRAL +cloud "Видеоноды" as VNODE + +'=== Узел аналитики === +node "Analytics Node" { + [ivideon-analytics-controller\n(analytics-controller)] as CTRL + [ivideon-analytics-video-proxy\n(analytics-video-proxy)] as PROXY + [ivideon-event-saver\n(analytics-event-saver)] as SAVER + [ivideon-cloud-vs\n(cloud-vs)] as CLVS + [ivideon-analytics-visitor-counter\n(analytics-visitor-counter)] as VC + + database "База данных\nMongoDB\ncollections:\n- analytics.channels\n- analytics.events" as DB +} + +'=== Связи с Централом (API5) === +CTRL -down-> CENTRAL : Периодическая синхронизация\n• Получение списка камер\n• Получение/обновление настроек облачных модулей\n• Оповещение об ошибках\n• Передача метрик +PROXY -down-> CENTRAL : Запросы к API5 для получения\nпараметров/доступа к видеопотоку\n(со стороны видеонод) + +'=== Поток видео === +PROXY --> CLVS : Проксирование видеопотока\n(FLV в формате видеонод) +PROXY ..> VNODE : Доступ к потокам с видеонод\n(через API5 Централа) + +'=== WebSocket-взаимодействие === +CTRL -left-> PROXY : WebSocket (к серверу PROXY)\nУведомления об ошибках ivideon-analytics-video-proxy +CLVS -right-> CTRL : WebSocket (к серверу CLVS)\nСобытия облачного видеосервера + +'=== Счётчик посетителей === +VC --> CTRL : События счётчика (по FLV-потоку)\nдля аналитики + +'=== Синхронизация состояния через БД === +CTRL -down-> DB : Обновление состояния каналов\n(collection: analytics.channels) +PROXY -down-> DB : Периодическая вычитка состояния каналов\n• При state=stream_awaited ⇒ выставляет state=streaming\n• Выставление acknowledgment-статусов +PROXY -left-> CTRL : Логическая синхронизация состояния\nчерез общую БД (channels) + +'=== Работа с событиями === +CTRL -down-> DB : Обработка и запись событий\n(collection: analytics.events) +SAVER -down-> DB : Периодическая вычитка событий +SAVER -down-> CENTRAL : Доставка событий в API5\n(тип события ⇒ соответствующий запрос) + +'=== Легенда === +legend right +Каналы связи +● HTTP/API: сплошная стрелка +● WebSocket: подпись "WebSocket" +● БД-синхронизация: стрелка к DB с пояснением + +Коллекции +analytics.channels — состояние каналов/ACK +analytics.events — события для отправки в облако +endlegend + +@enduml diff --git a/ivideon/puml/9179/analytics_node_stream.puml b/ivideon/puml/9179/analytics_node_stream.puml new file mode 100644 index 0000000..24d12f0 --- /dev/null +++ b/ivideon/puml/9179/analytics_node_stream.puml @@ -0,0 +1,34 @@ +@startuml +title Сценарий: запуск стрима, назначение канала и переход в streaming + +participant CENTRAL as "Централ (API5)" +participant CTRL as "analytics-controller" +database DB as "DB (analytics.channels)" +participant PROXY as "analytics-video-proxy" +participant VNODE as "Видеоноды" +participant CLVS as "cloud-vs" + +== Синхронизация с централом == +CTRL -> CENTRAL : GET /cameras (список камер на обработку)\nGET /cloud-analytics/settings +CENTRAL --> CTRL : список камер, настройки + +== Назначение канала == +CTRL -> DB : upsert channel{cameraId, state=stream_awaited,\nsettings, rev, ...} -> analytics.channels + +== PROXY подхватывает канал == +PROXY -> DB : poll analytics.channels +DB --> PROXY : channel{state=stream_awaited} +PROXY -> DB : update channel.state=streaming,\nack={rev, ts} + +== Получение видео и проксирование == +PROXY -> CENTRAL : API5 запрос параметров доступа к потоку +CENTRAL --> PROXY : креденшелы/URL +PROXY -> VNODE : запрос видеопотока (через выданные параметры) +VNODE --> PROXY : FLV поток (формат видеонод) +PROXY -> CLVS : проксирование FLV в cloud-vs (ingest) + +note right of CLVS +cloud-vs получает поток в формате +видеонод (FLV) и готов генерировать события +end note +@enduml diff --git a/ivideon/puml/9179/general.puml b/ivideon/puml/9179/general.puml new file mode 100644 index 0000000..e16ca3e --- /dev/null +++ b/ivideon/puml/9179/general.puml @@ -0,0 +1,51 @@ +@startuml +title Разбор ноды ssh ar1-misc01.extcam.com + + +file services { + component "zabbix-agent2" + component "syslog-ng" + card ivideon { + component "ivideon-analytics-carrier" as i_analy_c #red + component "ivideon-server-cloud-vca" + component "ivideon-analytics-heatmaps" + component "ivideon-sentry-proxy" + component iavc [ + ivideon-analytics-visitor-counter + ==== + Обёртка для облачного счётчика посетителей, + использует flv-поток для аналитики + ] + component iavp [ + ivideon-analytics-video-proxy + ==== + сервис, проксирующий поток от видеонод в облачный видеосервер + ] + component iaes [ + ivideon-analytics-event-saver + ==== + Cервис, выполняющий доставку в облако событий облачного видеосервера, + предварительно обработанных сервисом ivideon-analytics-controller. + ] + component iac_card [ + ivideon-analytics-controller + ==== + Получение от централа актуального списка камер на обработку + .... + Получение и обновление настроек облачных модулей видеоаналитики + .... + Обработка событий от облачного видеосервера/счётчика посетителей + .... + Реагирование на ошибки ivideon-analytics-video-proxy + .... + Оповещение централа о различных ошибках + .... + Передача метрик в централ + ] + } +} +note top of i_analy_c + Данный сервис не хочет подниматься +end note + +@enduml \ No newline at end of file