Record cancelled watcher state on ATVM run cancellation
- update the watcher cancel helper so it writes a final CANCELLED state into state.json before stopping the service - record cancellation timestamps and a cancellation note in the watcher state file for clearer post-run inspection - update the watcher service docs so the documented cancel behavior matches the state-file handling
This commit is contained in:
@@ -1,6 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
python3_write_cancelled_state() {
|
||||
local state_file="$1"
|
||||
python3 - "$state_file" <<'PY'
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
state_path = Path(sys.argv[1])
|
||||
state = {}
|
||||
if state_path.exists():
|
||||
try:
|
||||
state = json.loads(state_path.read_text(encoding="utf-8"))
|
||||
except json.JSONDecodeError:
|
||||
state = {}
|
||||
|
||||
now = datetime.now(timezone.utc).isoformat()
|
||||
state["last_state"] = "CANCELLED"
|
||||
state["last_seen_at"] = now
|
||||
state["closed_at"] = now
|
||||
|
||||
notes = state.get("notes", [])
|
||||
if not isinstance(notes, list):
|
||||
notes = [str(notes)]
|
||||
if "Cancellation marker detected." not in notes:
|
||||
notes.append("Cancellation marker detected.")
|
||||
state["notes"] = notes
|
||||
|
||||
state_path.write_text(json.dumps(state, indent=2, sort_keys=True), encoding="utf-8")
|
||||
PY
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
@@ -29,4 +61,5 @@ fi
|
||||
RUN_DIR="${STATE_ROOT}/${BUILD_NAME}"
|
||||
mkdir -p "$RUN_DIR"
|
||||
touch "${RUN_DIR}/cancelled.marker"
|
||||
python3_write_cancelled_state "${RUN_DIR}/state.json"
|
||||
systemctl stop "atvm-run-watcher@${BUILD_NAME}.service" || true
|
||||
|
||||
Reference in New Issue
Block a user