Ivideon: add task generator schemes

This commit is contained in:
a.shalimov 2026-09-27 17:18:08 +03:00
parent 8f079d25f6
commit 28d6b22d3d
3 changed files with 53 additions and 21 deletions

View file

@ -0,0 +1,26 @@
@startuml insight_quota_flow
skinparam sequenceMessageAlign center
Title Алгоритм работы сервиса по API
autonumber
participant "event_server" as EventServer
participant "task_generator" as ITG_API
database "Mongo\ninsight.scenarios" as Mongo
queue "NSQ\ninsight.task_processor.input" as NSQ
EventServer -> ITG_API : На API /events\nприсылается JSON события.
ITG_API -> Mongo : Запрос Insight сценариев пользователя из события
Mongo --> ITG_API : ""Optional[List]"" сценариев пользователя
alt Запрос пришел с пустым списком
ITG_API --> EventServer : Возврат пустого списка (т.к. таски никакие не созданы)
else Список сценариев не пуст
ITG_API -> ITG_API : Создаем список\n""tasks""\nКуда будем писать созданные таски ""Tasks""
loop Для каждого сценария
ITG_API -> ITG_API : Создаем объект ""Task""
ITG_API -> NSQ : Отправка в топик брокера сформированной таски
ITG_API -> ITG_API : Добавляем их `id` в список ""tasks""
end
ITG_API --> EventServer : Возврат списка ""ID's"" созданных тасок
end

View file

@ -4,18 +4,17 @@ skinparam sequenceMessageAlign center
autonumber autonumber
participant "event_server" as EventServer participant "event_server" as EventServer
participant "task_generator\nAPI" as ITG_API participant "task_generator" as ITG_API
database "DB" as Mongo database "Mongo\ninsight.scenarios" as Mongo
queue "NSQ" as NSQ queue "NSQ\ninsight.task_processor.input" as NSQ
participant "task_processor" as TaskProcessor
EventServer -> ITG_API : На API /events\nприсылается JSON события.\n\nЛевее представлены важные поля для сервиса EventServer -> ITG_API : На API /events\nприсылается JSON события.\n\nЛевее представлены важные поля для сервиса
note left note left
<code> <code>
{ {
"id": "8cc8BDfLSZcQhGnx.55", "event_id": "8cc8BDfLSZcQhGnx.55",
"user": "100000608486", "user": "100000608486",
"type": "motion/started", "event_type": "motion/started",
"name": "Motion", "name": "Motion",
"description": "Motion", "description": "Motion",
"time": 1790251591.802, "time": 1790251591.802,
@ -26,21 +25,8 @@ note left
"preview": "https://some_pic.jpeg", "preview": "https://some_pic.jpeg",
"clip": "https://some_clip.mp4", "clip": "https://some_clip.mp4",
"clip_duration": 10, "clip_duration": 10,
"value": null,
"status": "new",
"delivered": true,
"data": null,
"chain_id": "rqa5XhYU9X9sqm3i", "chain_id": "rqa5XhYU9X9sqm3i",
"updated_at": 1790251597.4111845, "data": null
"alert_status": null,
"allowed_next_alert_statuses": [
"suspicious",
"alert",
"false_positive"
],
"priority": null,
"marker": false,
"_id": "8cc8BDfLSZcQhGnx.55"
} }
</code> </code>
end note end note
@ -75,7 +61,8 @@ else Список сценариев не пуст
ITG_API -> ITG_API : Создаем список\n""tasks""\nКуда будем писать созданные таски ITG_API -> ITG_API : Создаем список\n""tasks""\nКуда будем писать созданные таски
loop Для каждого сценария loop Для каждого сценария
ITG_API -> ITG_API : Создаем объект\n""Task""\n ITG_API -> ITG_API : Создаем объект\n""Task""\n
ITG_API -> ITG_API : Добавляем их `id` в список ""tasks"" ITG_API -> NSQ : Отправка в топик брокера сформированной таски
ITG_API -> ITG_API : Добавляем их ""id"" в список ""tasks""
end end
ITG_API --> EventServer : Возврат список созданных тасок ITG_API --> EventServer : Возврат список созданных тасок
end end

View file

@ -0,0 +1,19 @@
@startuml task_generator_simple_flow
skinparam sequenceMessageAlign center
autonumber
participant "event_server" as EventServer
participant "http_input.py" as HttpInput
participant "message_handler.py" as Handler
database "Mongo" as Mongo
queue "NSQ" as NSQ
EventServer -> HttpInput : POST /events\n{"type":"motion", "user":"100...", ...}
HttpInput -> Handler : await transform(event)
Handler -> Mongo : find({trigger.event_types: "motion", owner_id: "100...", enabled: true})
Mongo --> Handler : [scenario-1]
Handler -> Handler : _build_task(event, scenario-1)
Handler --> HttpInput : return [task-1]
HttpInput -> NSQ : push("insight.task_processor.input", task-1)
HttpInput --> EventServer : 200 (пустой ответ)
@enduml