shift-planner-app
Hlavni webova aplikace pro zadavani denniho stavu pallet a roll_cage.
Ports used
- Host:
5004 - Container:
5000
Run and Deploy
Pouzij operacni skripty:
- start local (DEV):
../scripts/start-shift-planner-app.sh - stop local (DEV):
../scripts/stop-shift-planner-app.sh - deploy (PROD):
../scripts/deploy-shift-planner-app.sh
CME mock start/stop je ve skriptech:
../scripts/start-cme-authentication-mock.sh../scripts/stop-cme-authentication-mock.sh
Prehled vsech skriptu je v scripts/README.md.
APP ENV konfigurace
PORTDATA_DIRWAREHOUSE_FILELOG_DIRCME_URLDEFAULT_USER_IDDEFAULT_USER_NAMEDEFAULT_USER_EMAILSECRET_KEYAUTH_REQUIREDCME_AUTH_ENDPOINT(nastavuje se vconf/shift-planner-app.conf)RP_CALLBACK_URL(nastavuje se vconf/shift-planner-app.conf)SHARED_SECRET(base64, min 32 bytes po decode; nastavuje se vconf/shift-planner-app.conf)CLOCK_SKEW_SECONDS(default120)NONCE_TTL_SECONDS(default600)PLANNED_HOURS_URL(defaulthttps://knihy.90.cz/skripty/sklad_frontend/matematiciAPI.php?naplanovane_hodiny)PLANNED_HOURS_AUTH(username:passwordpro Basic auth na CME API; nastavuje se vconf/shift-planner-app.conf)PLANNED_HOURS_METHOD(defaultPOST)PLANNED_HOURS_TIMEOUT_SECONDS(default8)CME_DB_CONFIG_FILE(default${DATA_DIR}/cme-db.ini)LOCK_SHIFT_SCRIPT_FILE(default${DATA_DIR}/lock_shift.pyv PROD compose; v DEV compose/app/jobs/nudge/lock_shift.py)LOCK_SHIFT_URL(defaulthttps://knihy.90.cz/api/v2/lock_shift)LOCK_SHIFT_AUTH(optionalusername:passwordpro Basic auth)LOCK_SHIFT_X_API_KEY(X-API-KEY pro lock API)LOCK_SHIFT_TIMEOUT_SECONDS(default15)
Endpoints
GET /-> redirect na denni formularGET /auth/login-> RP redirect na CME providerGET /auth/callback-> validaceid_resodpovedi + vytvoreni sessionGET /entry/new-> prazdny formularGET /entry/edit-> editace konkretniho dne/skladuPOST /records/save-> validace + ulozeni datGET /history-> historie dle skladu/mesiceGET /history/edit-> redirect do editace z historieGET /shift-locking-> mesicni kalendar pro zamykani smenGET /shift-occupancy-> mesicni pohled obsazenosti smen (Obsazenoz API +Ocekavanoz CME DB)POST /shift-locking/toggle-> okamzite prepnuti lokalniho stavu dne (defaultne povoleno, klik prepina povoleno/vypnuto)POST /shift-occupancy/toggle-lock-> lock/unlock smen v CME preslock_shift.py(pomociplanovac_den_id)POST /shift-locking/save-> ulozeni stavu automatickeho zamykani smen (boolean)GET /healthz-> healthcheck (200 {"status":"ok"}nebo503 {"status":"unhealthy","reason":"..."})
Dulezite rozliseni zamykani
POST /shift-locking/togglemeni pouze lokalni nastaveni auto-lock (auto_shift_lock_enabled) v CSV.POST /shift-occupancy/toggle-lockzamyka/odemyka realne smeny v CME presplanovac_den_id.- Auto-lock jobs (
shift-planner-jobs) zamyka jen tehdy, kdyz je den over-capacity aauto_shift_lock_enabled=1.
Data and Logs
DEV defaults:
- data:
../data - logs:
../target/logs
PROD defaults:
- data:
/home/agent/shift-planner/data - logs:
/home/agent/shift-planner/logs - runtime conf mount:
/home/agent/shift-planner/conf -> /app/conf - produkcni
shift-planner-app.confv/home/agent/shift-planner/confje server-managed runtime konfigurace; deploy ji neprepisuje - planned hours auth:
PLANNED_HOURS_AUTHvconf/shift-planner-app.conf
CSV soubory jsou UTF-8 a rotace logu je nastavena na 100 MB.
Log naming standard:
- aktivni app log:
/home/agent/shift-planner/logs/shift-planner-app.log - rotace po
100 MBna format<module_name>.0001.log,<module_name>.0002.log, ...
CME DB konfigurace pro Ocekavano
Ocekavano se cte z CME DB (expedice_prehled_plan, typ planu 3) pro vybrany sklad (CME_ID ve sp-warehouse.csv) a zobrazeny mesic.
Konfigurace je v INI souboru (default: ${DATA_DIR}/cme-db.ini), napr.:
[cme_db]
host = knihy.90.cz
port = 3306
user = change-me
password = change-me
database = knihy-cme
connect_timeout_seconds = 8
read_timeout_seconds = 8
write_timeout_seconds = 8
Referencni sablona je v cme-db.example.ini.
Deploy skript deploy-shift-planner-app.sh kopiruje shift-planner-jobs/jobs/nudge/lock_shift.py na server do ${REMOTE_DATA_DIR}/lock_shift.py, aby POST /shift-occupancy/toggle-lock mel script dostupny i v produkcnim kontejneru.
Tests
Smoke test hlavniho flow:
python3 -m unittest tests/test_shift_planner_smoke.py