@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