diff --git a/ivideon/puml/insight/task_generator/data_flow_API.puml b/ivideon/puml/insight/task_generator/data_flow_API.puml new file mode 100644 index 0000000..760b005 --- /dev/null +++ b/ivideon/puml/insight/task_generator/data_flow_API.puml @@ -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 \ No newline at end of file diff --git a/ivideon/puml/insight/task_generator/data_flow.puml b/ivideon/puml/insight/task_generator/data_flow_API_comments.puml similarity index 80% rename from ivideon/puml/insight/task_generator/data_flow.puml rename to ivideon/puml/insight/task_generator/data_flow_API_comments.puml index 21d8f2f..c970cce 100644 --- a/ivideon/puml/insight/task_generator/data_flow.puml +++ b/ivideon/puml/insight/task_generator/data_flow_API_comments.puml @@ -4,18 +4,17 @@ 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 +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 события.\n\nЛевее представлены важные поля для сервиса note left { - "id": "8cc8BDfLSZcQhGnx.55", + "event_id": "8cc8BDfLSZcQhGnx.55", "user": "100000608486", - "type": "motion/started", + "event_type": "motion/started", "name": "Motion", "description": "Motion", "time": 1790251591.802, @@ -26,21 +25,8 @@ note left "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" + "data": null } end note @@ -75,7 +61,8 @@ else Список сценариев не пуст ITG_API -> ITG_API : Создаем список\n""tasks""\nКуда будем писать созданные таски loop Для каждого сценария ITG_API -> ITG_API : Создаем объект\n""Task""\n - ITG_API -> ITG_API : Добавляем их `id` в список ""tasks"" + ITG_API -> NSQ : Отправка в топик брокера сформированной таски + ITG_API -> ITG_API : Добавляем их ""id"" в список ""tasks"" end ITG_API --> EventServer : Возврат список созданных тасок end \ No newline at end of file diff --git a/ivideon/puml/insight/task_generator/data_flow_simplified.puml b/ivideon/puml/insight/task_generator/data_flow_simplified.puml new file mode 100644 index 0000000..a1e993b --- /dev/null +++ b/ivideon/puml/insight/task_generator/data_flow_simplified.puml @@ -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