Plantuml: insight graphs

This commit is contained in:
a.shalimov 2026-09-25 15:48:21 +03:00
parent 635fea6ab3
commit 8f079d25f6
4 changed files with 137 additions and 1 deletions

View file

@ -1,5 +1,5 @@
{
"workbench.colorTheme": "Default Dark Modern",
"workbench.colorTheme": "Dark Modern",
"cSpell.words": [
"descr",
"dotenv",

View file

@ -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

View file

@ -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

View file

@ -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
<code>
{
"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"
}
</code>
end note
ITG_API -> ITG_API : Из JSON'а формируется\nмодель ""IncomingEvent""
note left
Тут после формирования модели надо:
1. Сходить в БД
2. Найти сценарии Insight пользователей по полю ""user""
2.1 Надо смотреть в API ""InsightScenario""
2.2 У сценария есть поле ""trigger"", которое выглядит примерно так:
<code>
Scenario.trigger.event_types = ['motion']
</code>
которое и надо метчить с полем ""type"" события
end note
ITG_API -> Mongo : Забираем Insight сценарии пользователя\n""user""\nи подходящим ""event_type""'ом\n\nСм запрос левее
note left
<code>
db.scenarios.find({
"trigger.type": "event",
"trigger.event_types": "motion/started",
"owner_id": "100000608486",
"enabled": true,
"deleted": { $ne: true }
})
</code>
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