Files
openclaw/scripts/lib/docker-e2e-logs.sh
2026-04-29 08:16:17 +01:00

73 lines
1.5 KiB
Bash

#!/usr/bin/env bash
#
# Shared logging helpers for shell-based Docker E2E lanes.
# They centralize temporary log naming and the small success/failure print
# pattern used by Docker scenario scripts.
run_logged() {
local label="$1"
shift
local log_file
log_file="$(docker_e2e_run_log "$label")"
if ! "$@" >"$log_file" 2>&1; then
docker_e2e_print_log "$log_file"
rm -f "$log_file"
return 1
fi
rm -f "$log_file"
}
run_logged_print() {
local label="$1"
shift
local log_file
log_file="$(docker_e2e_run_log "$label")"
if ! "$@" >"$log_file" 2>&1; then
docker_e2e_print_log "$log_file"
rm -f "$log_file"
return 1
fi
docker_e2e_print_log "$log_file"
rm -f "$log_file"
}
run_logged_print_heartbeat() {
local label="$1"
local interval_seconds="$2"
shift 2
local log_file
log_file="$(docker_e2e_run_log "$label")"
"$@" >"$log_file" 2>&1 &
local command_pid=$!
local started_at
started_at="$(date +%s)"
local status=0
while kill -0 "$command_pid" 2>/dev/null; do
sleep "$interval_seconds"
if kill -0 "$command_pid" 2>/dev/null; then
local now
now="$(date +%s)"
echo "still running $label ($((now - started_at))s elapsed)"
fi
done
set +e
wait "$command_pid"
status=$?
set -e
docker_e2e_print_log "$log_file"
rm -f "$log_file"
return "$status"
}
docker_e2e_run_log() {
local label="$1"
local tmp_dir="${TMPDIR:-/tmp}"
tmp_dir="${tmp_dir%/}"
mktemp "$tmp_dir/openclaw-${label}.XXXXXX"
}
docker_e2e_print_log() {
local log_file="$1"
cat "$log_file"
}