Try Sync UserServer Role
Архитектура
Try Sync роллари 2 тадан 3 тага кенгаяди:
server: асосий марказий сервер, дастурчи/оператор сервери. Барча мижозларнинг фақат керакли умумий маълумотларини қабул қилади.
user_server: мижоз ташкилот сервери. Ўша мижознинг ички user компьютерларидан маълумот йиғади ва асосий серверга фақат рухсат берилган жадвалларни узатади.
user: оддий ишчи компьютер. Асосан ўз user_serverига уланади, лекин policy бўйича айрим жадвалларни асосий серверга direct/fallback юбора олади.
flowchart LR
UserA["User: ishchi kompyuter"] -->|"default sync"| UserServer["UserServer: mijoz serveri"]
UserServer -->|"allowed tables only"| MainServer["Server: asosiy markaz"]
UserA -->|"fallback/direct allowed tables"| MainServer
Config Ўзгаришлари
try_sync/common.py ва try_sync/config.jsonда янги role ва routing policy қўшилади:
node_role: server, user_server, user.
main_server_url: UserServer асосий Server’га уланадиган URL.
user_server_url: User ўз UserServer’ига уланадиган URL.
direct_server_url: User fallback/direct ҳолатда асосий Server’га юбориши мумкин бўлган URL.
sync_routes: жадваллар бўйича йўналиш policy.
Масалан:
{
"node_role": "user_server",
"sync_routes": {
"default": "user_server",
"direct_to_main_tables": [],
"fallback_to_main_tables": []
}
}
UI Ўзгаришлари
try_sync/tray.py settings ойнасида role radio list 3 та бўлади:
Server - asosiy API chiqaradi
UserServer - userlardan yig'adi va serverga uzatadi
User - UserServer yoki ruxsat bo'lsa Serverga murojaat qiladi
Tray menu’да ҳам role switch учун UserServer mode қўшилади.
Service Ишлаш Қоидаси
try_sync/service.pyда process flags қуйидагича бўлади:
server: server process ON, client process OFF.
user_server: server process ON, client process ON.
user: server process OFF, client process ON.
user_serverда local API userлардан қабул қилади, client process эса асосий Server’га рухсат берилган жадвалларни юборади.
Sync Routing Мантиғи
try_sync/client.py кейинги босқичда ҳар бир table учун target танлайди:
Default: User -> UserServer.
Агар table direct_to_main_tablesда бўлса: User -> Main Server.
Агар table fallback_to_main_tablesда бўлса: аввал UserServer, у ишламаса Main Server.
UserServer -> Main Server фақат whitelist/кейин белгиланадиган жадваллар бўйича ишлайди.
Бу сиз айтган қоидани сақлайди: асосий Server мижознинг барча ички users/roles/кераксиз жадвалларини олмайди, фақат кераклилари келади.
Бажариш Тартиби
try_sync/common.pyда role constants ва default config’га user_server, main_server_url, user_server_url, direct_server_url, sync_routes қўшиш.
try_sync/tray.py settings UI ва tray menu’га UserServer role қўшиш.
try_sync/service.pyда user_server учун server+client process бирга ишлайдиган flags қўшиш.
try_sync/client.pyда routing учун тайёр helper қўшиш: table -> target URL. Биринчи босқичда мавжуд server_url behavior бузилмасин.
try_sync/README.md ва try_sync/SYNC_INTEGRATION_PLAN.mdга 3 поғонали architecture ва routing қоидаларини ёзиш.
py_compile билан try_sync/*.py текшириш ва Try Sync tray release version’ни ошириб build қилиш.
269 ·