Record kickoff baseline checks, 72h monitoring gates, and a reusable phase5-stabilization-check.sh script for daily health snapshots.
60 lines
2.6 KiB
Bash
Executable File
60 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Phase 5 stabilization health snapshot for CUST-WP-0054-T05.
|
|
# Usage: phase5-stabilization-check.sh
|
|
set -euo pipefail
|
|
|
|
API_BASE="${API_BASE:-http://127.0.0.1:8000}"
|
|
KUBECONFIG_RAILIANCE="${KUBECONFIG_RAILIANCE:-$HOME/.kube/config-hosteurope}"
|
|
KUBECONFIG_COULOMB="${KUBECONFIG_COULOMB:-$HOME/.kube/config}"
|
|
|
|
echo "=== State Hub API (${API_BASE}) ==="
|
|
curl -fsS "${API_BASE}/state/health" | python3 -m json.tool
|
|
python3 -c "
|
|
import json, urllib.request
|
|
s = json.load(urllib.request.urlopen('${API_BASE}/state/summary'))
|
|
t = s['totals']
|
|
print('totals: workstreams', t['workstreams']['total'], 'tasks', t['tasks']['total'], 'topics', t['topics']['total'])
|
|
"
|
|
|
|
echo
|
|
echo "=== railiance01 state-hub + CNPG ==="
|
|
KUBECONFIG="${KUBECONFIG_RAILIANCE}" kubectl -n state-hub get pods -l app.kubernetes.io/name=state-hub 2>/dev/null \
|
|
| awk 'NR==1 || /state-hub-/ {print}'
|
|
KUBECONFIG="${KUBECONFIG_RAILIANCE}" kubectl -n databases get cluster state-hub-db \
|
|
-o jsonpath='phase={.status.phase} ready={.status.readyInstances}/{.spec.instances}{"\n"}' 2>/dev/null
|
|
|
|
echo
|
|
echo "=== coulombcore rollback copy ==="
|
|
KUBECONFIG="${KUBECONFIG_COULOMB}" kubectl -n state-hub get deploy state-hub \
|
|
-o jsonpath='replicas={.spec.replicas}{"\n"}' 2>/dev/null || echo "coulombcore unreachable"
|
|
|
|
echo
|
|
echo "=== activity-core STATE_HUB_URL ==="
|
|
KUBECONFIG="${KUBECONFIG_RAILIANCE}" kubectl -n activity-core get configmap actcore-runtime-config \
|
|
-o jsonpath='{.data.STATE_HUB_URL}{"\n"}' 2>/dev/null
|
|
KUBECONFIG="${KUBECONFIG_RAILIANCE}" kubectl -n activity-core get deploy actcore-state-hub-bridge \
|
|
-o jsonpath='bridge_replicas={.spec.replicas}{"\n"}' 2>/dev/null
|
|
|
|
echo
|
|
echo "=== last 6 consistency sweeps ==="
|
|
curl -fsS "${API_BASE}/progress/?event_type=consistency_sweep_remote_all&limit=6" | python3 -c "
|
|
import json,sys
|
|
for e in json.load(sys.stdin):
|
|
d=e.get('detail') or {}
|
|
print(e['created_at'][:19], 'src='+str(d.get('source','?')),
|
|
'exit='+str(d.get('exit_code')), 'err='+str(d.get('automation_error')),
|
|
'proc='+str(len(d.get('repos_processed') or [])),
|
|
'missing='+str(len(d.get('skipped_missing') or [])))
|
|
"
|
|
|
|
echo
|
|
echo "=== last daily_triage ==="
|
|
curl -fsS "${API_BASE}/progress/?event_type=daily_triage&limit=1" | python3 -c "
|
|
import json,sys
|
|
ev=json.load(sys.stdin)
|
|
print(ev[0]['created_at'][:19] if ev else 'none', (ev[0].get('summary') or '')[:60] if ev else '')
|
|
" 2>/dev/null || echo "no daily_triage events"
|
|
|
|
echo
|
|
echo "=== ops-bridge primary tunnel ==="
|
|
bridge status 2>/dev/null | grep -E 'state-hub-primary|issue-core-coulombcore' || echo "bridge status unavailable" |