74 lines
2.2 KiB
Bash
Executable File
74 lines
2.2 KiB
Bash
Executable File
#!/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" <<EOF
|
|
{"timestamp":"$(date -Iseconds)","percent":$percent,"message":"$message","status":"$status","exit_code":$exit_code}
|
|
EOF
|
|
|
|
docker cp "$progress_tmp" "$REQUEST_CONTAINER":"$JOBS_DIR/$job_id.progress.json" >/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" |