Standardize orchestrator child-script execution and logging
Every orchestrator invoked its children differently — four near-duplicate run_job() copies, a differently-shaped run_watchdog(), or plain inline bash calls, each with its own take on path resolution, pass/fail naming, and dry-run threading. Extracted one shared run_orch_child() into common.sh so there's a single place to fix or extend this behavior going forward. Along the way: watchdog_orchestrator.sh and monthly_maintenance.sh were checking $VERBOSE, a variable nothing in the codebase ever assigns, so --log silently did nothing beyond basic logging on those two. Fixed to $ENABLE_LOGGING. watchdog_orchestrator.sh and array_started.sh had no trailing exit, so their exit codes reflected whatever the last command happened to return rather than actual success/failure. transcode_management.sh had no failure notification and no summary at all. Also made transcode_management.sh's two-script pipeline config-driven (TRANSCODE_MANAGEMENT_SCRIPTS in master.conf) instead of hardcoded, for room to extend it later without editing the orchestrator itself.
This commit is contained in:
@@ -1537,6 +1537,64 @@ _release_rsync_on_exit() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================================
|
||||
# ── ORCHESTRATOR CHILD EXECUTION ──────────────────────────────────────────────────────────────
|
||||
# ==============================================================================================
|
||||
# Shared child-script runner for Orchestrators/*.sh. Replaces the run_job()/run_watchdog()
|
||||
# copies that used to be hand-duplicated (with small inconsistencies) into each orchestrator —
|
||||
# one implementation now, one place to fix a bug or extend behavior (e.g. per-child logging).
|
||||
#
|
||||
# Usage — caller declares its own tracking arrays before the loop:
|
||||
# JOB_PASS=()
|
||||
# JOB_FAIL=()
|
||||
# for entry in "${SOME_SCRIPTS[@]}"; do
|
||||
# run_orch_child "$entry"
|
||||
# done
|
||||
#
|
||||
# $entry is "relative/path.sh [extra args...]" — the same format every master.conf
|
||||
# script-list array already uses. Resolved against $ECOSYSTEM_ROOT, which the caller
|
||||
# must set before calling this (the absolute repo root — "$(cd "$SCRIPT_DIR/.." && pwd)").
|
||||
#
|
||||
# --dry-run / --log are threaded down automatically from $DRY_RUN / $ENABLE_LOGGING —
|
||||
# never $VERBOSE, which nothing in this codebase ever assigns.
|
||||
|
||||
run_orch_child() {
|
||||
local entry="$1"
|
||||
local script_args script_path script_name label extra_args run_args
|
||||
|
||||
read -r -a script_args <<< "$entry"
|
||||
script_path="$ECOSYSTEM_ROOT/${script_args[0]}"
|
||||
script_name=$(basename "${script_args[0]}")
|
||||
extra_args=("${script_args[@]:1}")
|
||||
label="$script_name"
|
||||
[[ -n "${extra_args[*]}" ]] && label="$script_name ${extra_args[*]}"
|
||||
|
||||
if [[ ! -f "$script_path" ]]; then
|
||||
error "$script_name — not found at $script_path"
|
||||
JOB_FAIL+=("$label")
|
||||
return 1
|
||||
fi
|
||||
[[ ! -x "$script_path" ]] && chmod +x "$script_path"
|
||||
|
||||
run_args=("${extra_args[@]}")
|
||||
[[ "$DRY_RUN" == true ]] && run_args+=("--dry-run")
|
||||
[[ "$ENABLE_LOGGING" == true ]] && run_args+=("--log")
|
||||
|
||||
local _start _ec
|
||||
_start=$(date +%s)
|
||||
log "Running: $label"
|
||||
if bash "$script_path" "${run_args[@]}"; then
|
||||
log "$script_name — done in $(format_duration $(( $(date +%s) - _start )))"
|
||||
JOB_PASS+=("$label")
|
||||
return 0
|
||||
else
|
||||
_ec=$?
|
||||
error "$label — failed (exit $_ec, $(format_duration $(( $(date +%s) - _start ))))"
|
||||
JOB_FAIL+=("$label")
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================================
|
||||
# ── PATH TRANSLATION ──────────────────────────────────────────────────────────────────────────
|
||||
# ==============================================================================================
|
||||
|
||||
Reference in New Issue
Block a user