ivideon: update some crowd schemes
This commit is contained in:
parent
d5ecc2d577
commit
5fc6421d78
4 changed files with 161 additions and 0 deletions
21
ivideon/puml/Crowd/notifications/9205_activity.puml
Normal file
21
ivideon/puml/Crowd/notifications/9205_activity.puml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
@startuml Telegram Subscription Management Activity
|
||||
|
||||
|PM Manager|
|
||||
start
|
||||
if (Действие?) then (Добавить связку)
|
||||
:Ввести email и chat_id;
|
||||
|API|
|
||||
:Добавить запись в\ncrowd.telegram_subscriptions\n{"email": "...", "chat_id": ...};
|
||||
|PM Manager|
|
||||
:Добавить бота в Telegram чат\n(совместно с пользователем);
|
||||
else (Удалить связку)
|
||||
:Выбрать email для удаления;
|
||||
|API|
|
||||
:Удалить запись из\ncrowd.telegram_subscriptions;
|
||||
endif
|
||||
|
||||
|Notification System|
|
||||
:send_queue_overflow() отправляет\nуведомление в Telegram\nпо связке email → chat_id;
|
||||
|
||||
stop
|
||||
@enduml
|
||||
53
ivideon/puml/Crowd/notifications/9205_overview.puml
Normal file
53
ivideon/puml/Crowd/notifications/9205_overview.puml
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
@startuml
|
||||
!define FILE_ICON <<(F,#e8bd14)>>
|
||||
|
||||
class crowd.frontend.impl.crowd_subscriptionPY.CrowdSubscription{
|
||||
+ ID_REGEX: str
|
||||
{field} + COLLECTION: str = db.crowd().crowd_subscription
|
||||
+ FIND_RESULTS_PAGE_LIMIT: int = 100
|
||||
+ create(email, camera_id, email_enabled=True)
|
||||
+ find(user, emails, cameras, limit, skip)
|
||||
}
|
||||
|
||||
class crowd.backend.notificationsPY FILE_ICON{
|
||||
+ send_queue_overflow(zone,\n queue_info,\n queue_size,\n detection_time,\n image_url,\n escalation_level=None\n)
|
||||
}
|
||||
|
||||
|
||||
database mongoDB.crowd.crowd_subscription{
|
||||
}
|
||||
database mongoDB.crowd.telegram_subscriptions{
|
||||
}
|
||||
|
||||
json crowd_subscription_entry{
|
||||
"owner_id": "owner_id",
|
||||
"created_at": "timestamp",
|
||||
"subscriber_id": "user_id",
|
||||
"subscriber_login": "email",
|
||||
"telegram_confirmed": "False",
|
||||
"camera_id": "camera_id",
|
||||
"email_enabled": "email_enabled"
|
||||
}
|
||||
|
||||
json telegram_sub_entry{
|
||||
"email": "user@email.com",
|
||||
"chat_id": "telegram_chat_id"
|
||||
}
|
||||
|
||||
|
||||
CrowdSubscription::COLLECTION -- crowd_subscription
|
||||
telegram_subscriptions .. telegram_sub_entry
|
||||
crowd_subscription .. crowd_subscription_entry
|
||||
crowd_subscription_entry -[thickness=2]- telegram_sub_entry : "subscriber_login ::: email"
|
||||
|
||||
note left of notificationsPY
|
||||
Функция отправки уведомлений
|
||||
(в том числе и в телегу)
|
||||
end note
|
||||
|
||||
note right of telegram_subscriptions
|
||||
Сюда мы сейчас руками добавляем
|
||||
записи-связки с crowd_subscription
|
||||
end note
|
||||
|
||||
@enduml
|
||||
40
ivideon/puml/Crowd/notifications/9205_pm_seq.puml
Normal file
40
ivideon/puml/Crowd/notifications/9205_pm_seq.puml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
@startuml PM Telegram Setup Sequence
|
||||
|
||||
actor "Dev" as DEV
|
||||
actor "PM" as PM
|
||||
participant "misc тачка" as MISC
|
||||
participant "MongoDB\ncrowd.telegram_subscriptions" as DB
|
||||
actor "User" as USER
|
||||
participant "Telegram Bot" as BOT
|
||||
participant "send_queue_overflow()" as NOTIF
|
||||
|
||||
PM -> USER: Коннектится с пользаком и\nсоздает с ним чат chat_id
|
||||
PM -> BOT: Добавляют бота уведомлений в чат chat_id
|
||||
PM -> DEV: Дает chat_id разрабам
|
||||
|
||||
DEV -> MISC: ssh
|
||||
activate MISC
|
||||
DEV -> DB: Создает запись
|
||||
activate DB
|
||||
note left of DB
|
||||
{
|
||||
"email": "demostandsalemsk@ivideon.com",
|
||||
"chat_id": 89767978
|
||||
}
|
||||
end note
|
||||
DB --> DEV: запись создана
|
||||
deactivate MISC
|
||||
deactivate DB
|
||||
|
||||
== Как все работает ==
|
||||
|
||||
NOTIF -> DB: найти chat_id по email
|
||||
activate DB
|
||||
DB --> NOTIF: chat_id: 89767978
|
||||
|
||||
NOTIF -> BOT: отправить уведомление в chat_id
|
||||
BOT -> USER: уведомление в Telegram
|
||||
|
||||
deactivate DB
|
||||
|
||||
@enduml
|
||||
47
ivideon/puml/Crowd/notifications/9205_sub_sequence.puml
Normal file
47
ivideon/puml/Crowd/notifications/9205_sub_sequence.puml
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
@startuml CrowdSubscription Create Sequence
|
||||
|
||||
actor "client" as U
|
||||
participant "CrowdSubscription" as CS
|
||||
participant "API5" as API
|
||||
participant "MongoDB\ncrowd_subscription" as DB
|
||||
|
||||
U -> CS: create(email, camera_id, email_enabled=True)
|
||||
|
||||
CS -> API: get_api_client()
|
||||
activate API
|
||||
|
||||
CS -> API: User.get_id(login=email)
|
||||
API --> CS: user_id
|
||||
|
||||
CS -> API: Camera({'id': camera_id}).get(projection)
|
||||
API --> CS: camera data
|
||||
deactivate API
|
||||
|
||||
CS -> DB: find_one(проверка на существующую подписку)
|
||||
DB --> CS: existing_doc or None
|
||||
|
||||
alt Подписка уже есть
|
||||
CS --> U: raise CrowdSubscriptionAlreadyExists
|
||||
else Подписки нет
|
||||
CS -> CS: create document
|
||||
|
||||
note right of CS
|
||||
{
|
||||
owner_id: camera['owner_id']
|
||||
created_at: time.time()
|
||||
subscriber_id: user_id
|
||||
subscriber_login: email
|
||||
telegram_confirmed: False
|
||||
camera_id: camera_id
|
||||
email_enabled: email_enabled
|
||||
}
|
||||
end note
|
||||
|
||||
|
||||
CS -> DB: insert_with_random_id(doc)
|
||||
DB --> CS: inserted_doc
|
||||
|
||||
CS --> U: CrowdSubscription(data=doc)
|
||||
end
|
||||
|
||||
@enduml
|
||||
Loading…
Reference in a new issue