| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| BASE_URL="${1:-https://crazycrazypete-pots-shutdown-tracker.hf.space}" |
| PYTHON_BIN="${PYTHON_BIN:-python3}" |
| REQUIRE_EMPTY="${REQUIRE_EMPTY:-false}" |
|
|
| if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then |
| echo "Python interpreter not found: $PYTHON_BIN" |
| exit 1 |
| fi |
|
|
| "$PYTHON_BIN" - "$BASE_URL" "$REQUIRE_EMPTY" <<'PY' |
| import collections |
| import sys |
|
|
| import requests |
|
|
| base_url = sys.argv[1].rstrip("/") |
| require_empty = sys.argv[2].lower() == "true" |
| dashboard_url = f"{base_url}/api/pots-shutdown/dashboard" |
| queue_url = f"{base_url}/api/pots-shutdown/admin/review-queue" |
|
|
| dashboard = requests.get(dashboard_url, timeout=30) |
| dashboard.raise_for_status() |
| dashboard_payload = dashboard.json() |
|
|
| queue = requests.get(queue_url, timeout=30) |
| queue.raise_for_status() |
| items = queue.json() |
|
|
| print(f"Review queue check: {queue_url}") |
| print(f"Dashboard review_queue_count={dashboard_payload.get('review_queue_count')}") |
| print(f"Admin review queue items={len(items)}") |
|
|
| source_counts = collections.Counter(item.get("source_code", "unknown") for item in items) |
| issue_counts = collections.Counter() |
| for item in items: |
| for issue in item.get("issues", []): |
| issue_counts[issue] += 1 |
|
|
| if source_counts: |
| print() |
| print("By source:") |
| for source_code, count in sorted(source_counts.items()): |
| print(f"- {source_code}: {count}") |
|
|
| if issue_counts: |
| print() |
| print("By issue:") |
| for issue, count in sorted(issue_counts.items()): |
| print(f"- {issue}: {count}") |
|
|
| if items: |
| print() |
| print("Items:") |
| for item in items: |
| print( |
| f"- {item.get('id')} {item.get('source_code')} " |
| f"confidence={item.get('parse_confidence')} issues={item.get('issues')}" |
| ) |
| else: |
| print() |
| print("Review queue is empty.") |
|
|
| if require_empty and items: |
| raise SystemExit("Review queue is not empty.") |
| PY |
|
|