Plantuml: insight graphs
This commit is contained in:
parent
635fea6ab3
commit
8f079d25f6
4 changed files with 137 additions and 1 deletions
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"workbench.colorTheme": "Default Dark Modern",
|
"workbench.colorTheme": "Dark Modern",
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"descr",
|
"descr",
|
||||||
"dotenv",
|
"dotenv",
|
||||||
|
|
|
||||||
35
ivideon/puml/insight/arch_conf.puml
Normal file
35
ivideon/puml/insight/arch_conf.puml
Normal 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
|
||||||
20
ivideon/puml/insight/arch_generator.puml
Normal file
20
ivideon/puml/insight/arch_generator.puml
Normal 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
|
||||||
81
ivideon/puml/insight/task_generator/data_flow.puml
Normal file
81
ivideon/puml/insight/task_generator/data_flow.puml
Normal 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
|
||||||
Loading…
Reference in a new issue