60 lines
3.2 KiB
Text
60 lines
3.2 KiB
Text
@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
|