#!/usr/bin/env bash set -euo pipefail DOCKER_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$DOCKER_DIR/.." && pwd)" ENV_FILE="${ENV_FILE:-$DOCKER_DIR/.env.multisite}" REQUEST_CONTAINER="${REQUEST_CONTAINER:-netgescon_prod_app}" REQUEST_DIR="/var/www/storage/app/support/update-requests" JOBS_DIR="/var/www/storage/app/support/update-jobs" LOCK_FILE="${LOCK_FILE:-/tmp/netgescon-daemon-update-runner.lock}" if [[ ! -f "$ENV_FILE" ]]; then echo "Env mancante: $ENV_FILE" exit 1 fi exec 9>"$LOCK_FILE" if ! flock -n 9; then echo "Runner gia attivo: esco senza duplicare il job." exit 0 fi request_path="$(docker exec "$REQUEST_CONTAINER" sh -lc "ls -1 ${REQUEST_DIR}/*.json 2>/dev/null | sort | head -n 1")" if [[ -z "$request_path" ]]; then echo "Nessuna richiesta update in coda." exit 0 fi request_payload="$(docker exec "$REQUEST_CONTAINER" sh -lc "cat '$request_path'")" job_id="$(php -r '$data=json_decode(stream_get_contents(STDIN), true); echo is_array($data) ? ($data["job_id"] ?? "") : "";' <<< "$request_payload")" if [[ -z "$job_id" ]]; then echo "Richiesta non valida: job_id mancante." docker exec "$REQUEST_CONTAINER" rm -f "$request_path" >/dev/null 2>&1 || true exit 1 fi progress_tmp="$(mktemp)" log_tmp="$(mktemp)" cleanup() { rm -f "$progress_tmp" "$log_tmp" } trap cleanup EXIT write_progress() { local percent="$1" local message="$2" local status="$3" local exit_code="${4:-null}" cat > "$progress_tmp" </dev/null } write_log() { docker cp "$log_tmp" "$REQUEST_CONTAINER":"$JOBS_DIR/$job_id.log" >/dev/null } write_progress 10 "Richiesta acquisita dal daemon host" "running" if ENV_FILE="$ENV_FILE" "$DOCKER_DIR/update-multisite.sh" >"$log_tmp" 2>&1; then write_log write_progress 100 "Aggiornamento multisito completato dal daemon host" "completed" 0 else write_log write_progress 100 "Aggiornamento multisito fallito sul daemon host" "failed" 1 fi docker exec "$REQUEST_CONTAINER" rm -f "$request_path" >/dev/null 2>&1 || true cat "$log_tmp"