argus/src/master/tests/scripts/07_stats_single_node.sh

42 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TEST_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
PRIVATE_ROOT="$TEST_ROOT/private"
TMP_ROOT="$TEST_ROOT/tmp"
API_BASE="http://localhost:31300/api/v1/master"
NODE_ID="$(cat "$TMP_ROOT/node_id")"
sleep 7
detail_file="$TMP_ROOT/offline_detail.json"
curl -sS "$API_BASE/nodes/$NODE_ID" -o "$detail_file"
python3 - "$detail_file" <<'PY'
import json, sys
with open(sys.argv[1]) as handle:
node = json.load(handle)
assert node["status"] == "offline", f"Expected offline, got {node['status']}"
PY
stats_file="$TMP_ROOT/stats.json"
curl -sS "$API_BASE/nodes/statistics" -o "$stats_file"
python3 - "$stats_file" <<'PY'
import json, sys
with open(sys.argv[1]) as handle:
stats = json.load(handle)
assert stats["total"] == 1
found = {item["status"]: item["count"] for item in stats["status_statistics"]}
assert found.get("offline") == 1
PY
nodes_json_path="$PRIVATE_ROOT/argus/metric/prometheus/nodes.json"
python3 - "$nodes_json_path" <<'PY'
import json, sys
with open(sys.argv[1]) as handle:
content = json.load(handle)
assert content == [], content
PY
echo "[INFO] Offline transition and statistics validated"