@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