Add some work schemes
This commit is contained in:
parent
f849a6f3a8
commit
4e56f0f097
7 changed files with 292 additions and 36 deletions
|
|
@ -1,25 +0,0 @@
|
||||||
@startgantt
|
|
||||||
printscale weekly zoom 2
|
|
||||||
Project starts the 1st of january 2026
|
|
||||||
[Канинкулы] starts 2026-01-01
|
|
||||||
[Канинкулы] requires 11 days
|
|
||||||
|
|
||||||
[Sprint-1] starts 2026-01-12
|
|
||||||
[Sprint-1] requires 14 days
|
|
||||||
[Support-1] starts 2026-01-12
|
|
||||||
[Support-1] requires 14 days
|
|
||||||
[Support-1] is colored in LightGreen
|
|
||||||
|
|
||||||
[Sprint-2] starts 2026-01-26
|
|
||||||
[Sprint-2] requires 14 days
|
|
||||||
[API-9487] starts 2026-01-26
|
|
||||||
[API-9487] requires 14 days
|
|
||||||
[API-9487] is colored in LightGreen
|
|
||||||
[API-9488] starts 2026-01-26
|
|
||||||
[API-9488] requires 14 days
|
|
||||||
[API-9488] is colored in Cyan
|
|
||||||
[API-9489] starts 2026-01-26
|
|
||||||
[API-9489] requires 14 days
|
|
||||||
[API-9489] is colored in LightGray
|
|
||||||
|
|
||||||
@endgantt
|
|
||||||
46
ivideon/Gantt/2026_sprints.puml
Normal file
46
ivideon/Gantt/2026_sprints.puml
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
@startgantt
|
||||||
|
printscale weekly zoom 2
|
||||||
|
Project starts the 1st of january 2026
|
||||||
|
[Каникулы] starts 2026-01-01
|
||||||
|
[Каникулы] requires 11 days
|
||||||
|
|
||||||
|
[Sprint-1] displays on same row as [Каникулы]
|
||||||
|
[Sprint-1] starts 2026-01-12
|
||||||
|
[Sprint-1] requires 14 days
|
||||||
|
[Sprint-2] displays on same row as [Sprint-1]
|
||||||
|
[Sprint-2] starts 2026-01-26
|
||||||
|
[Sprint-2] requires 14 days
|
||||||
|
[Sprint-3] displays on same row as [Sprint-2]
|
||||||
|
[Sprint-3] starts 2026-02-09
|
||||||
|
[Sprint-3] requires 14 days
|
||||||
|
|
||||||
|
[Support-1] starts 2026-01-12
|
||||||
|
[Support-1] requires 14 days
|
||||||
|
[Support-1] is colored in LightGreen
|
||||||
|
|
||||||
|
[API-9487] starts 2026-01-26
|
||||||
|
[API-9487] requires 14 days
|
||||||
|
[API-9487] is colored in LightGreen
|
||||||
|
|
||||||
|
[API-9488] starts 2026-01-26
|
||||||
|
[API-9488] requires 14 days
|
||||||
|
[API-9488] is colored in LightGreen
|
||||||
|
|
||||||
|
[API-9489] starts 2026-01-26
|
||||||
|
[API-9489] requires 14 days
|
||||||
|
[API-9489] is colored in LightGray
|
||||||
|
[API-9489 II] starts 2026-02-09
|
||||||
|
[API-9489 II] displays on same row as [API-9489]
|
||||||
|
[API-9489 II] requires 14 days
|
||||||
|
[API-9489 II] is colored in LightGray
|
||||||
|
|
||||||
|
|
||||||
|
legend
|
||||||
|
Legend:
|
||||||
|
|= Color |= Task status |
|
||||||
|
|<#lightgray> | Not started |
|
||||||
|
|<#cyan> | In progress |
|
||||||
|
|<#lightgreen>| Completed |
|
||||||
|
|<#red> | Declined |
|
||||||
|
end legend
|
||||||
|
@endgantt
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
@startgantt
|
@startgantt
|
||||||
printscale daily zoom 4
|
printscale daily zoom 4
|
||||||
|
|
||||||
|
!define LIGHTRED #fd26008f
|
||||||
|
|
||||||
[Sprint 2026-2] requires 14 days
|
[Sprint 2026-2] requires 14 days
|
||||||
Project starts 2026-01-26
|
Project starts 2026-01-26
|
||||||
-- API-9487 --
|
-- ✓ API-9487 --
|
||||||
[Sprint 2026-2] starts 2026-01-26
|
[Sprint 2026-2] starts 2026-01-26
|
||||||
|
[Sprint 2026-3] displays on same row as [Sprint 2026-2]
|
||||||
|
[Sprint 2026-3] starts 2026-02-09
|
||||||
|
|
||||||
[Разбор 9487] starts 2026-01-26
|
[Разбор 9487] starts 2026-01-26
|
||||||
[Разбор 9487] is colored in lightgreen
|
[Разбор 9487] is colored in lightgreen
|
||||||
|
|
||||||
[Установка PersonSDK на ноду] requires 1 days
|
[Установка PersonSDK на ноду] requires 1 days
|
||||||
[Установка PersonSDK на ноду] is colored in red
|
[Установка PersonSDK на ноду] is colored in LIGHTRED
|
||||||
[Установка PersonSDK на ноду] starts 2026-01-27
|
[Установка PersonSDK на ноду] starts 2026-01-27
|
||||||
note bottom
|
note bottom
|
||||||
Из-за несовместимости средств
|
Из-за несовместимости средств
|
||||||
|
|
@ -31,7 +36,10 @@ end note
|
||||||
[Докеризация TevianSDK] is colored in lightgreen
|
[Докеризация TevianSDK] is colored in lightgreen
|
||||||
[Докеризация TevianSDK] requires 1 days
|
[Докеризация TevianSDK] requires 1 days
|
||||||
|
|
||||||
-- API-9488 --
|
-- ✓ API-9488 --
|
||||||
|
[Наргрузочное тестирование ML] starts 2026-02-03
|
||||||
|
[Наргрузочное тестирование ML] requires 4 days
|
||||||
|
[Наргрузочное тестирование ML] is colored in lightgreen
|
||||||
|
|
||||||
[Разбор 9488] starts 2026-02-03
|
[Разбор 9488] starts 2026-02-03
|
||||||
[Разбор 9488] is colored in lightgreen
|
[Разбор 9488] is colored in lightgreen
|
||||||
|
|
@ -41,22 +49,52 @@ end note
|
||||||
[Докеризация решения ML] is colored in lightgreen
|
[Докеризация решения ML] is colored in lightgreen
|
||||||
[Докеризация решения ML] requires 2 days
|
[Докеризация решения ML] requires 2 days
|
||||||
|
|
||||||
[Наргрузочное тестирование ML] starts 2026-02-03
|
[Отключение downscale] starts 2026-02-04
|
||||||
[Наргрузочное тестирование ML] requires 2 days
|
[Отключение downscale] is colored in LIGHTRED
|
||||||
[Наргрузочное тестирование ML] is colored in cyan
|
[Отключение downscale] requires 1 days
|
||||||
|
|
||||||
-- API-9489 --
|
note bottom
|
||||||
|
Модель натренирована на изображениях 512х512
|
||||||
|
поэтому отключить даунскейл не представляется возможным.
|
||||||
|
Было принято решение протестировать решения на 512х512
|
||||||
|
end note
|
||||||
|
|
||||||
|
|
||||||
|
[Сравнительный тест 512х512] starts at [Отключение downscale]'s end
|
||||||
|
[Сравнительный тест 512х512] starts 2026-02-05
|
||||||
|
[Сравнительный тест 512х512] is colored in lightgreen
|
||||||
|
[Сравнительный тест 512х512] requires 1 days
|
||||||
|
|
||||||
|
[Пареллельный тест Tevian] starts 2026-02-05
|
||||||
|
[Пареллельный тест Tevian] is colored in lightgreen
|
||||||
|
[Пареллельный тест Tevian] requires 2 days
|
||||||
|
|
||||||
|
|
||||||
|
[Тест на картинках высокого разрешения] starts 2026-02-06
|
||||||
|
[Тест на картинках высокого разрешения] is colored in lightgreen
|
||||||
|
[Тест на картинках высокого разрешения] requires 1 days
|
||||||
|
|
||||||
|
[Формирование отчета в Confluence] starts 2026-02-09
|
||||||
|
[Формирование отчета в Confluence] is colored in lightgreen
|
||||||
|
[Формирование отчета в Confluence] requires 1 days
|
||||||
|
|
||||||
|
-- ■ API-9489 --
|
||||||
|
|
||||||
2026-01-31 to 2026-02-01 are colored LightBlue
|
2026-01-31 to 2026-02-01 are colored LightBlue
|
||||||
2026-02-07 to 2026-02-08 are colored LightBlue
|
2026-02-07 to 2026-02-08 are colored LightBlue
|
||||||
|
|
||||||
legend
|
legend left
|
||||||
Legend:
|
Legend:
|
||||||
|= Color |= Task status |
|
|= Icon |= Task progress |
|
||||||
|<#gray> | Not started |
|
| ✓| Completed |
|
||||||
|
| ⋯| In Progress |
|
||||||
|
| ■| Not started |
|
||||||
|
|
||||||
|
|= Color |= Subtask status |
|
||||||
|
|<#lightgrey> | Not started |
|
||||||
|<#cyan> | In progress |
|
|<#cyan> | In progress |
|
||||||
|<#lightgreen>| Completed |
|
|<#lightgreen>| Completed |
|
||||||
|<#red> | Declined |
|
|<LIGHTRED> | Declined |
|
||||||
end legend
|
end legend
|
||||||
|
|
||||||
@endgantt
|
@endgantt
|
||||||
30
ivideon/Gantt/sprint_3.puml
Normal file
30
ivideon/Gantt/sprint_3.puml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
@startgantt
|
||||||
|
printscale daily zoom 4
|
||||||
|
|
||||||
|
!define LIGHTRED #fd26008f
|
||||||
|
|
||||||
|
[Sprint 2026-3] requires 14 days
|
||||||
|
Project starts 2026-02-09
|
||||||
|
-- ▶ API-9489 --
|
||||||
|
[Sprint 2026-3] starts 2026-02-09
|
||||||
|
[Формирование драфта спеки] starts 2026-02-09
|
||||||
|
[Формирование драфта спеки] is colored in cyan
|
||||||
|
[Формирование драфта спеки] requires 2 days
|
||||||
|
|
||||||
|
' Подсветка выходных
|
||||||
|
2026-02-14 to 2026-02-15 are colored LightBlue
|
||||||
|
2026-02-21 to 2026-02-22 are colored LightBlue
|
||||||
|
|
||||||
|
legend left
|
||||||
|
Legend:
|
||||||
|
|= Icon |= Task progress |
|
||||||
|
| ✓| Completed |
|
||||||
|
| ▶| In Progress |
|
||||||
|
| ■| Not started |
|
||||||
|
|
||||||
|
|= Color |= Subtask status |
|
||||||
|
|<#lightgrey> | Not started |
|
||||||
|
|<#cyan> | In progress |
|
||||||
|
|<#lightgreen>| Completed |
|
||||||
|
|<LIGHTRED> | Declined |
|
||||||
|
end legend
|
||||||
70
ivideon/puml/analytics/camera_worker_stream.puml
Normal file
70
ivideon/puml/analytics/camera_worker_stream.puml
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
@startuml
|
||||||
|
title Взаимосвязь Camera -> Stream -> Worker -> VAP
|
||||||
|
|
||||||
|
actor "Система управления\nаналитикой" as System
|
||||||
|
participant "Camera #42\n(у входа)" as Camera42
|
||||||
|
participant "Camera #77\n(у кассы)" as Camera77
|
||||||
|
queue "Video Proxy" as Proxy
|
||||||
|
participant "Worker_1\n(process)" as Worker1
|
||||||
|
participant "Worker_2\n(process)" as Worker2
|
||||||
|
participant "VAP Instance\n(в Worker_1)" as VAP1
|
||||||
|
participant "VAP Instance\n(в Worker_2)" as VAP2
|
||||||
|
database "Configs" as Configs
|
||||||
|
|
||||||
|
== Инициализация потоков ==
|
||||||
|
|
||||||
|
System -> Worker1: Запустить обработку\nstream_id=42
|
||||||
|
activate Worker1
|
||||||
|
Worker1 -> VAP1: vap.init_stream(\n stream_id=42,\n lines=[{"y": 100}]\n)
|
||||||
|
activate VAP1
|
||||||
|
VAP1 -> Configs: Сохранить config_42.yaml\n(линия подсчёта y=100)
|
||||||
|
note right: Конфигурация привязана\nк камере #42, не к Worker_1!
|
||||||
|
|
||||||
|
System -> Worker2: Запустить обработку\nstream_id=77
|
||||||
|
activate Worker2
|
||||||
|
Worker2 -> VAP2: vap.init_stream(\n stream_id=77,\n zones=[{"x": 50, "y": 200}]\n)
|
||||||
|
activate VAP2
|
||||||
|
VAP2 -> Configs: Сохранить config_77.yaml\n(зона у кассы)
|
||||||
|
|
||||||
|
== Обработка видеопотоков ==
|
||||||
|
|
||||||
|
Camera42 -> Proxy: Видеопоток (stream_id=42)
|
||||||
|
Camera77 -> Proxy: Видеопоток (stream_id=77)
|
||||||
|
|
||||||
|
loop Каждый кадр
|
||||||
|
Proxy -> Worker1: frame + stream_id=42
|
||||||
|
Worker1 -> VAP1: vap.process_frame(frame)
|
||||||
|
VAP1 -> VAP1: Task(stream_id=42, frame_id=N, ...)
|
||||||
|
VAP1 --> Worker1: events
|
||||||
|
Worker1 --> System: События от камеры #42
|
||||||
|
end
|
||||||
|
|
||||||
|
loop Каждый кадр
|
||||||
|
Proxy -> Worker2: frame + stream_id=77
|
||||||
|
Worker2 -> VAP2: vap.process_frame(frame)
|
||||||
|
VAP2 -> VAP2: Task(stream_id=77, frame_id=M, ...)
|
||||||
|
VAP2 --> Worker2: events
|
||||||
|
Worker2 --> System: События от камеры #77
|
||||||
|
end
|
||||||
|
|
||||||
|
== Worker_1 упал! ==
|
||||||
|
|
||||||
|
Worker1 -> Worker1: ❌ CRASH
|
||||||
|
deactivate VAP1
|
||||||
|
deactivate Worker1
|
||||||
|
|
||||||
|
System -> Worker2: Перенести обработку\nstream_id=42 на Worker_2
|
||||||
|
Worker2 -> VAP2: vap2 = new VAP()
|
||||||
|
activate VAP2
|
||||||
|
Worker2 -> VAP2: vap2.init_stream(\n stream_id=42,\n lines=[{"y": 100}]\n)
|
||||||
|
VAP2 -> Configs: Загрузить config_42.yaml
|
||||||
|
note right: ТА ЖЕ конфигурация!\nstream_id=42 не изменился,\nизменился только Worker
|
||||||
|
|
||||||
|
loop Обработка продолжается
|
||||||
|
Proxy -> Worker2: frame + stream_id=42
|
||||||
|
Worker2 -> VAP2: vap2.process_frame(frame)
|
||||||
|
VAP2 --> Worker2: events
|
||||||
|
Worker2 --> System: События от камеры #42
|
||||||
|
end
|
||||||
|
|
||||||
|
@enduml
|
||||||
97
ivideon/puml/arch/AN_user_registration.puml
Normal file
97
ivideon/puml/arch/AN_user_registration.puml
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
@startuml User Registration Flow
|
||||||
|
skinparam sequenceMessageAlign center
|
||||||
|
skinparam BoxPadding 10
|
||||||
|
|
||||||
|
title Процесс регистрации пользователя в Ivideon Cloud
|
||||||
|
|
||||||
|
actor "Клиент\n(Web/Mobile)" as Client
|
||||||
|
box "API Service (api4)" #LightBlue
|
||||||
|
participant "OpenUserRegistration\nHandler" as Handler
|
||||||
|
participant "User.open_registration()" as OpenReg
|
||||||
|
participant "register_user()" as RegisterUser
|
||||||
|
end box
|
||||||
|
|
||||||
|
database "MongoDB\n(main)" as MongoDB
|
||||||
|
database "MongoDB\n(user_registry)" as UserRegistryDB
|
||||||
|
|
||||||
|
box "User Registry Service" #LightGreen
|
||||||
|
participant "UserRegistry\nService" as URService
|
||||||
|
end box
|
||||||
|
|
||||||
|
== Регистрация пользователя ==
|
||||||
|
|
||||||
|
Client -> Handler: POST /public/registration\n{login, password, partnerId, ...}
|
||||||
|
activate Handler
|
||||||
|
|
||||||
|
Handler -> OpenReg: open_registration(login, password, ip, ...)
|
||||||
|
activate OpenReg
|
||||||
|
|
||||||
|
OpenReg -> OpenReg: Определение partner_id,\ngroup_id, currency
|
||||||
|
OpenReg -> OpenReg: Применение реферальных кодов\nи промо-акций
|
||||||
|
|
||||||
|
OpenReg -> RegisterUser: register_user(login, password, ...)
|
||||||
|
activate RegisterUser
|
||||||
|
|
||||||
|
== Проверки перед регистрацией ==
|
||||||
|
|
||||||
|
RegisterUser -> RegisterUser: Валидация логина (email)
|
||||||
|
RegisterUser -> MongoDB: Проверка существующего пользователя\nfind_one({'login': login})
|
||||||
|
MongoDB --> RegisterUser: existing_user = None
|
||||||
|
|
||||||
|
RegisterUser -> UserRegistryDB: Проверка профиля в UserRegistry\nget_profile_by_login(login)
|
||||||
|
note right
|
||||||
|
Проверяется, не зарегистрирован ли
|
||||||
|
пользователь в другом шарде
|
||||||
|
end note
|
||||||
|
UserRegistryDB --> RegisterUser: profile = None
|
||||||
|
|
||||||
|
== Создание пользователя ==
|
||||||
|
|
||||||
|
RegisterUser -> RegisterUser: Формирование объекта new_user:\n- login, password (hash)\n- partner_id, group_id\n- currency, country\n- balance = 0\n- registration info (ip, time)\n- account_type
|
||||||
|
RegisterUser -> RegisterUser: Генерация user_id
|
||||||
|
RegisterUser -> RegisterUser: Создание root_folder
|
||||||
|
|
||||||
|
RegisterUser -> MongoDB: users.insert_one(new_user)
|
||||||
|
activate MongoDB
|
||||||
|
MongoDB --> RegisterUser: OK
|
||||||
|
deactivate MongoDB
|
||||||
|
|
||||||
|
RegisterUser -> MongoDB: folders.insert_one(root_folder)
|
||||||
|
activate MongoDB
|
||||||
|
MongoDB --> RegisterUser: OK
|
||||||
|
deactivate MongoDB
|
||||||
|
|
||||||
|
note over RegisterUser, MongoDB
|
||||||
|
В MongoDB (main) записываются:
|
||||||
|
1. Запись пользователя в коллекцию "users"
|
||||||
|
2. Корневая папка в коллекцию "folders"
|
||||||
|
end note
|
||||||
|
|
||||||
|
RegisterUser -> RegisterUser: Применение дефолтных сервисов\n(для биллинга v4)
|
||||||
|
RegisterUser -> RegisterUser: Применение промо-акций\n(если валюта подтверждена)
|
||||||
|
|
||||||
|
RegisterUser --> OpenReg: {user: <full_user>, report: {...}}
|
||||||
|
deactivate RegisterUser
|
||||||
|
|
||||||
|
OpenReg -> OpenReg: Обновление статистики реферальных кодов
|
||||||
|
OpenReg -> OpenReg: Отправка уведомления о регистрации\n(если настроено)
|
||||||
|
|
||||||
|
OpenReg --> Handler: {user, report}
|
||||||
|
deactivate OpenReg
|
||||||
|
|
||||||
|
Handler --> Client: HTTP 200\n{id, login, registrator_id, ...}
|
||||||
|
deactivate Handler
|
||||||
|
|
||||||
|
== Опциональная запись в UserRegistry ==
|
||||||
|
|
||||||
|
note over URService
|
||||||
|
UserRegistry НЕ обновляется автоматически
|
||||||
|
при регистрации. Запись создается через
|
||||||
|
отдельный внутренний API endpoint:
|
||||||
|
POST /inner/user_registry/users
|
||||||
|
|
||||||
|
Это может делать другой сервис
|
||||||
|
для управления шардированием
|
||||||
|
end note
|
||||||
|
|
||||||
|
@enduml
|
||||||
Loading…
Reference in a new issue