From 8f079d25f6656ca83e305c25a8d80f9c513c9bfc Mon Sep 17 00:00:00 2001 From: "a.shalimov" Date: Fri, 25 Sep 2026 15:48:21 +0300 Subject: [PATCH] Plantuml: insight graphs --- .vscode/settings.json | 2 +- ivideon/puml/insight/arch_conf.puml | 35 ++++++++ ivideon/puml/insight/arch_generator.puml | 20 +++++ .../insight/task_generator/data_flow.puml | 81 +++++++++++++++++++ 4 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 ivideon/puml/insight/arch_conf.puml create mode 100644 ivideon/puml/insight/arch_generator.puml create mode 100644 ivideon/puml/insight/task_generator/data_flow.puml diff --git a/.vscode/settings.json b/.vscode/settings.json index 64d1694..ab8cc1d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "workbench.colorTheme": "Default Dark Modern", + "workbench.colorTheme": "Dark Modern", "cSpell.words": [ "descr", "dotenv", diff --git a/ivideon/puml/insight/arch_conf.puml b/ivideon/puml/insight/arch_conf.puml new file mode 100644 index 0000000..43e2901 --- /dev/null +++ b/ivideon/puml/insight/arch_conf.puml @@ -0,0 +1,35 @@ +@startuml insight_quota_flow +!option handwritten true +skinparam sequenceMessageAlign center +skinparam defaultFontName Helvetica + +participant "Billing" as Billing +participant "insight-billing-gateway" as Gateway +participant "DB" as DB +participant "event-server" as EventServer +participant "insight-task-generator" as TaskGenerator +participant "insight-task-processor" as TaskProcessor +participant "vlm-host" as VlmHost + +group #E8F2FC Provisioning Flow + Billing -> Gateway : Notify Quota Updated + Gateway -> DB : Save/Update Quota Data + Gateway -> EventServer : Create Subscription + note over TaskGenerator : Target: insight-task-generator +end + +group #FBF6DD Processing Flow + EventServer -> TaskGenerator : Webhook Event (Trigger) + TaskGenerator -> DB : Fetch Quota Balance + DB --> TaskGenerator : Quota Data + TaskGenerator -> TaskProcessor : Send Task Message + TaskProcessor -> DB : Verify Current Quota + DB --> TaskProcessor : Quota Valid + TaskProcessor -> VlmHost : Call VLM Model + VlmHost --> TaskProcessor : Model Results + TaskProcessor -> TaskProcessor : Process Results + TaskProcessor -> DB : Save InsightEvent + TaskProcessor -> DB : Consume Quota + TaskProcessor -> Billing : Notify Quota Usage (NSQ) +end +@enduml diff --git a/ivideon/puml/insight/arch_generator.puml b/ivideon/puml/insight/arch_generator.puml new file mode 100644 index 0000000..266f2d4 --- /dev/null +++ b/ivideon/puml/insight/arch_generator.puml @@ -0,0 +1,20 @@ +@startuml insight_quota_flow +!option handwritten true +skinparam sequenceMessageAlign center +skinparam defaultFontName Helvetica +autonumber + +participant "DB" as DB +participant "event-server" as EventServer +participant "insight-task-generator" as TaskGenerator +participant "insight-task-processor" as TaskProcessor +participant "vlm-host" as VlmHost + +EventServer -> TaskGenerator : Webhook Event (Trigger) +TaskGenerator -> TaskProcessor : Send Task Message +TaskProcessor -> VlmHost : Call VLM Model +VlmHost --> TaskProcessor : Model Results +TaskProcessor -> TaskProcessor : Process Results +TaskProcessor -> DB : Save InsightEvent + +@enduml diff --git a/ivideon/puml/insight/task_generator/data_flow.puml b/ivideon/puml/insight/task_generator/data_flow.puml new file mode 100644 index 0000000..21d8f2f --- /dev/null +++ b/ivideon/puml/insight/task_generator/data_flow.puml @@ -0,0 +1,81 @@ +@startuml insight_quota_flow +skinparam sequenceMessageAlign center + +autonumber + +participant "event_server" as EventServer +participant "task_generator\nAPI" as ITG_API +database "DB" as Mongo +queue "NSQ" as NSQ +participant "task_processor" as TaskProcessor + +EventServer -> ITG_API : На API /events\nприсылается JSON события.\n\nЛевее представлены важные поля для сервиса +note left + +{ + "id": "8cc8BDfLSZcQhGnx.55", + "user": "100000608486", + "type": "motion/started", + "name": "Motion", + "description": "Motion", + "time": 1790251591.802, + "source_type": "camera", + "source_id": "100-E87hD7H7dN08Ve3zuoibRz:11796480", + "device_type": "camera", + "device_id": "100-E87hD7H7dN08Ve3zuoibRz:11796480", + "preview": "https://some_pic.jpeg", + "clip": "https://some_clip.mp4", + "clip_duration": 10, + "value": null, + "status": "new", + "delivered": true, + "data": null, + "chain_id": "rqa5XhYU9X9sqm3i", + "updated_at": 1790251597.4111845, + "alert_status": null, + "allowed_next_alert_statuses": [ + "suspicious", + "alert", + "false_positive" + ], + "priority": null, + "marker": false, + "_id": "8cc8BDfLSZcQhGnx.55" +} + +end note +ITG_API -> ITG_API : Из JSON'а формируется\nмодель ""IncomingEvent"" +note left +Тут после формирования модели надо: +1. Сходить в БД +2. Найти сценарии Insight пользователей по полю ""user"" + 2.1 Надо смотреть в API ""InsightScenario"" + 2.2 У сценария есть поле ""trigger"", которое выглядит примерно так: + + Scenario.trigger.event_types = ['motion'] + + которое и надо метчить с полем ""type"" события +end note +ITG_API -> Mongo : Забираем Insight сценарии пользователя\n""user""\nи подходящим ""event_type""'ом\n\nСм запрос левее +note left + +db.scenarios.find({ + "trigger.type": "event", + "trigger.event_types": "motion/started", + "owner_id": "100000608486", + "enabled": true, + "deleted": { $ne: true } +}) + +end note +Mongo --> ITG_API : ""Optional[List]"" сценарий пользователя +alt Запрос пришел с пустым списком + ITG_API --> EventServer : Возврат пустого списка (т.к. таски никакие не созданы) +else Список сценариев не пуст + ITG_API -> ITG_API : Создаем список\n""tasks""\nКуда будем писать созданные таски + loop Для каждого сценария + ITG_API -> ITG_API : Создаем объект\n""Task""\n + ITG_API -> ITG_API : Добавляем их `id` в список ""tasks"" + end + ITG_API --> EventServer : Возврат список созданных тасок +end \ No newline at end of file