fix(ucepsa): pin Shop Floor sync context mapping

This commit is contained in:
Victor Fraile Garcia 2026-07-19 10:18:43 +02:00
parent 73544c0a85
commit 7f9a88d81a
3 changed files with 62 additions and 36 deletions

View File

@ -2,12 +2,31 @@
set -euo pipefail set -euo pipefail
ACTION="${1:-status}" ACTION="${1:-status}"
ROOT="${SHOPFLOOR_RUNTIME_ROOT:-/srv/mesavault/edge-oee-ucepsa}" ROOT="${SHOPFLOOR_RUNTIME_ROOT:-/srv/mesavault/edge-oee-ucepsa}"
CONTAINER="${SHOPFLOOR_SYNC_CONTAINER:-mv_ucepsa_odoo_shopfloor_session_sync}"
CONTAINER="${
SHOPFLOOR_SYNC_CONTAINER:-
mv_ucepsa_odoo_shopfloor_session_sync
}"
NETWORK="${SHOPFLOOR_DOCKER_NETWORK:-mv_ucepsa_net}" NETWORK="${SHOPFLOOR_DOCKER_NETWORK:-mv_ucepsa_net}"
INTERVAL="${SHOPFLOOR_SYNC_INTERVAL_S:-15}" INTERVAL="${SHOPFLOOR_SYNC_INTERVAL_S:-15}"
LOOKBACK="${SHOPFLOOR_SYNC_LOOKBACK_HOURS:-168}" LOOKBACK="${SHOPFLOOR_SYNC_LOOKBACK_HOURS:-168}"
OUTPUT="${SHOPFLOOR_SYNC_OUTPUT:-/tmp/ucepsa_odoo_shopfloor_session_sync.jsonl}"
TENANT="${SHOPFLOOR_TENANT:-ucepsa}"
SITE="${SHOPFLOOR_SITE:-ucepsa_onpremise}"
MACHINE_MAP_JSON="${
SHOPFLOOR_MACHINE_MAP_JSON:-
{"52":"CORT-00","53":"CORT-01","54":"CORT-02"}
}"
OUTPUT="${
SHOPFLOOR_SYNC_OUTPUT:-
/tmp/ucepsa_odoo_shopfloor_session_sync.jsonl
}"
cd "$ROOT" cd "$ROOT"
@ -17,30 +36,40 @@ image() {
--format '{{.Config.Image}}' --format '{{.Config.Image}}'
} }
docker_common_args=(
--network "$NETWORK"
--env-file .env
-e ODOO_DB_OVERRIDE=ucepsa_prod
-e TENANT_OVERRIDE="$TENANT"
-e SITE_OVERRIDE="$SITE"
-e SHOPFLOOR_MACHINE_MAP_JSON="$MACHINE_MAP_JSON"
-v "$ROOT:/app:ro"
-w /app
--entrypoint python
)
start_sync() { start_sync() {
local sync_image local sync_image
sync_image="$(image)" sync_image="$(image)"
docker rm -f "$CONTAINER" >/dev/null 2>&1 || true docker rm -f "$CONTAINER" \
>/dev/null 2>&1 || true
docker run -d \ docker run -d \
--name "$CONTAINER" \ --name "$CONTAINER" \
--restart unless-stopped \ --restart unless-stopped \
--network "$NETWORK" \ "${docker_common_args[@]}" \
--env-file .env \
-e ODOO_DB_OVERRIDE=ucepsa_prod \
-v "$ROOT:/app:ro" \
-v /tmp:/probe-output \ -v /tmp:/probe-output \
-w /app \
--entrypoint python \
"$sync_image" \ "$sync_image" \
tools/odoo_shopfloor_session_sync.py \ tools/odoo_shopfloor_session_sync.py \
--watch \ --watch \
--interval "$INTERVAL" \ --interval "$INTERVAL" \
--lookback-hours "$LOOKBACK" \ --lookback-hours "$LOOKBACK" \
--output "/probe-output/$(basename "$OUTPUT")" --output \
"/probe-output/$(basename "$OUTPUT")"
docker ps --format 'table {{.Names}}\t{{.Status}}' \ docker ps \
--format 'table {{.Names}}\t{{.Status}}' \
| grep -E "$CONTAINER|NAMES" | grep -E "$CONTAINER|NAMES"
} }
@ -49,12 +78,7 @@ one_shot() {
sync_image="$(image)" sync_image="$(image)"
docker run --rm -i \ docker run --rm -i \
--network "$NETWORK" \ "${docker_common_args[@]}" \
--env-file .env \
-e ODOO_DB_OVERRIDE=ucepsa_prod \
-v "$ROOT:/app:ro" \
-w /app \
--entrypoint python \
"$sync_image" \ "$sync_image" \
tools/odoo_shopfloor_session_sync.py \ tools/odoo_shopfloor_session_sync.py \
--once \ --once \
@ -66,12 +90,7 @@ dry_run_known() {
sync_image="$(image)" sync_image="$(image)"
docker run --rm -i \ docker run --rm -i \
--network "$NETWORK" \ "${docker_common_args[@]}" \
--env-file .env \
-e ODOO_DB_OVERRIDE=ucepsa_prod \
-v "$ROOT:/app:ro" \
-w /app \
--entrypoint python \
"$sync_image" \ "$sync_image" \
tools/odoo_shopfloor_session_sync.py \ tools/odoo_shopfloor_session_sync.py \
--once \ --once \
@ -85,12 +104,7 @@ backfill_known() {
sync_image="$(image)" sync_image="$(image)"
docker run --rm -i \ docker run --rm -i \
--network "$NETWORK" \ "${docker_common_args[@]}" \
--env-file .env \
-e ODOO_DB_OVERRIDE=ucepsa_prod \
-v "$ROOT:/app:ro" \
-w /app \
--entrypoint python \
"$sync_image" \ "$sync_image" \
tools/odoo_shopfloor_session_sync.py \ tools/odoo_shopfloor_session_sync.py \
--once \ --once \
@ -102,31 +116,43 @@ case "$ACTION" in
start) start)
start_sync start_sync
;; ;;
stop) stop)
docker stop "$CONTAINER" docker stop "$CONTAINER"
;; ;;
restart) restart)
docker rm -f "$CONTAINER" >/dev/null 2>&1 || true docker rm -f "$CONTAINER" \
>/dev/null 2>&1 || true
start_sync start_sync
;; ;;
status) status)
docker ps -a --format 'table {{.Names}}\t{{.Status}}' \ docker ps -a \
--format 'table {{.Names}}\t{{.Status}}' \
| grep -E "$CONTAINER|NAMES" | grep -E "$CONTAINER|NAMES"
;; ;;
logs) logs)
docker logs --tail 200 -f "$CONTAINER" docker logs --tail 200 -f "$CONTAINER"
;; ;;
once) once)
one_shot one_shot
;; ;;
dry-run-known) dry-run-known)
dry_run_known dry_run_known
;; ;;
backfill-known) backfill-known)
backfill_known backfill_known
;; ;;
*) *)
echo "Uso: $0 {start|stop|restart|status|logs|once|dry-run-known|backfill-known}" >&2 echo \
"Uso: $0 {start|stop|restart|status|logs|once|dry-run-known|backfill-known}" \
>&2
exit 2 exit 2
;; ;;
esac esac

View File

@ -44,11 +44,11 @@ def connect_pg():
def tenant_site() -> tuple[str, str]: def tenant_site() -> tuple[str, str]:
return ( return (
env_first("TENANT", "TENANT_OVERRIDE", default="ucepsa") env_first("TENANT_OVERRIDE", "TENANT", default="ucepsa")
or "ucepsa", or "ucepsa",
env_first( env_first(
"SITE",
"SITE_OVERRIDE", "SITE_OVERRIDE",
"SITE",
default="ucepsa_onpremise", default="ucepsa_onpremise",
) )
or "ucepsa_onpremise", or "ucepsa_onpremise",

View File

@ -162,11 +162,11 @@ def load_config() -> Config:
) )
return Config( return Config(
tenant=env_first("TENANT", "TENANT_OVERRIDE", default="ucepsa") tenant=env_first("TENANT_OVERRIDE", "TENANT", default="ucepsa")
or "ucepsa", or "ucepsa",
site=env_first( site=env_first(
"SITE",
"SITE_OVERRIDE", "SITE_OVERRIDE",
"SITE",
default="ucepsa_onpremise", default="ucepsa_onpremise",
) )
or "ucepsa_onpremise", or "ucepsa_onpremise",