#!/usr/bin/env bash
# runner_health_check.sh — task-2566 runner status verification + health marker
# Verifies: systemd active + GitHub API runner online/idle
# Writes: memory/events/task-2566.runner.health.json
set -eu

WORKSPACE_ROOT="${WORKSPACE_ROOT:-/home/jay/workspace}"
HEALTH_MARKER="$WORKSPACE_ROOT/memory/events/task-2566.runner.health.json"
QUEUED_MARKER="$WORKSPACE_ROOT/memory/events/task-2566.runner.queued"
RUNNER_NAME="${RUNNER_NAME:-anu-ci-runner-01}"
REPO="${REPO:-Jeon-Jonghyuk/dev_workspace}"
SVC_NAME="${SVC_NAME:-github-runner.service}"

now_iso() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }

# 1. systemd active check (user-level)
SYSTEMD_STATE="unknown"
if systemctl --user is-active "$SVC_NAME" >/dev/null 2>&1; then
  SYSTEMD_STATE="active"
else
  SYSTEMD_STATE="$(systemctl --user is-active "$SVC_NAME" 2>&1 || true)"
fi

# 2. GitHub API runner status
RUNNER_JSON="$(gh api "/repos/$REPO/actions/runners" --jq ".runners[] | select(.name == \"$RUNNER_NAME\")" 2>/dev/null || echo '{}')"
if [[ -z "$RUNNER_JSON" || "$RUNNER_JSON" == "{}" ]]; then
  GH_STATUS="not_registered"
  GH_BUSY="unknown"
  LABELS="[]"
else
  GH_STATUS="$(echo "$RUNNER_JSON" | jq -r '.status')"
  GH_BUSY="$(echo "$RUNNER_JSON" | jq -r '.busy')"
  LABELS="$(echo "$RUNNER_JSON" | jq -c '[.labels[].name]')"
fi

# 3. queued/stuck check — look for self-hosted queued runs >5min
STUCK_JSON="$(gh api "/repos/$REPO/actions/runs?status=queued&per_page=10" \
  --jq '[.workflow_runs[] | {id, name, created_at, status}]' 2>/dev/null || echo '[]')"
STUCK_COUNT="$(echo "$STUCK_JSON" | jq 'length')"

mkdir -p "$(dirname "$HEALTH_MARKER")"

cat > "$HEALTH_MARKER" <<EOF
{
  "task_id": "task-2566",
  "checked_at": "$(now_iso)",
  "runner_name": "$RUNNER_NAME",
  "repo": "$REPO",
  "systemd": {
    "service": "$SVC_NAME",
    "state": "$SYSTEMD_STATE",
    "scope": "user"
  },
  "github": {
    "status": "$GH_STATUS",
    "busy": $GH_BUSY,
    "labels": $LABELS
  },
  "queued_workflows": {
    "count": $STUCK_COUNT,
    "items": $STUCK_JSON
  }
}
EOF

if [[ "$STUCK_COUNT" -gt 0 ]]; then
  cat > "$QUEUED_MARKER" <<EOF
{
  "task_id": "task-2566",
  "detected_at": "$(now_iso)",
  "stuck_count": $STUCK_COUNT,
  "stuck_runs": $STUCK_JSON,
  "action": "investigate runner label/availability"
}
EOF
fi

echo "=== runner health (task-2566) ==="
echo "systemd: $SYSTEMD_STATE"
echo "github:  status=$GH_STATUS busy=$GH_BUSY labels=$LABELS"
echo "queued:  $STUCK_COUNT"
echo "marker:  $HEALTH_MARKER"

if [[ "$SYSTEMD_STATE" == "active" && "$GH_STATUS" == "online" ]]; then
  exit 0
fi
exit 1
