49 lines
1.8 KiB
Bash
49 lines
1.8 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Core Hub production stabilization snapshot for CORE-WP-0007-T02.
|
||
|
|
# Complements the scheduled activity-core job (core_hub_stabilization_check).
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
BASE_URL="${CORE_HUB_BASE_URL:-https://hub.coulomb.social}"
|
||
|
|
STATE_HUB_URL="${STATE_HUB_URL:-http://127.0.0.1:8000}"
|
||
|
|
|
||
|
|
echo "=== Core Hub public surface (${BASE_URL}) ==="
|
||
|
|
for path in /healthz /readyz /api/v2/widget-types; do
|
||
|
|
code=$(curl -sS -o /dev/null -w '%{http_code}' "${BASE_URL}${path}")
|
||
|
|
echo "${path} -> ${code}"
|
||
|
|
done
|
||
|
|
hubs_code=$(curl -sS -o /dev/null -w '%{http_code}' "${BASE_URL}/api/v2/hubs")
|
||
|
|
echo "/api/v2/hubs -> ${hubs_code} (expect 401 hardened contract)"
|
||
|
|
widget_count=$(curl -fsS "${BASE_URL}/api/v2/widget-types" | python3 -c "
|
||
|
|
import json,sys
|
||
|
|
payload=json.load(sys.stdin)
|
||
|
|
items=payload if isinstance(payload,list) else payload.get('data',[])
|
||
|
|
print(len(items))
|
||
|
|
")
|
||
|
|
echo "widget_types count=${widget_count} (expect >= 26)"
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== optional deployed smoke (needs approved token) ==="
|
||
|
|
if [[ -n "${CORE_HUB_OPERATOR_TOKEN_FILE:-}" && -f "${CORE_HUB_OPERATOR_TOKEN_FILE}" ]]; then
|
||
|
|
make deployed-smoke
|
||
|
|
else
|
||
|
|
echo "skip: set CORE_HUB_OPERATOR_TOKEN_FILE for full bootstrap smoke"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== optional ops-hub gate probe ==="
|
||
|
|
if command -v make >/dev/null && [[ -d "${HOME}/ops-hub" ]]; then
|
||
|
|
(cd "${HOME}/ops-hub" && make interhub-gate IHUB_BASE="${BASE_URL}") || true
|
||
|
|
else
|
||
|
|
echo "skip: ops-hub checkout unavailable"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== last 6 core_hub_stabilization_check events ==="
|
||
|
|
curl -fsS "${STATE_HUB_URL}/progress/?event_type=core_hub_stabilization_check&limit=6" | python3 -c "
|
||
|
|
import json,sys
|
||
|
|
for e in json.load(sys.stdin):
|
||
|
|
d=e.get('detail') or {}
|
||
|
|
probe=d.get('probe') or {}
|
||
|
|
print(e['created_at'][:19], (e.get('summary') or '')[:72],
|
||
|
|
'pass='+str(probe.get('overall_pass')))
|
||
|
|
" 2>/dev/null || echo "no stabilization events yet"
|