Files
argus/src/sys/tests/scripts/13_metric_verify_grafana.sh

45 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
TEST_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
if [[ -f "$TEST_ROOT/.env" ]]; then
set -a; source "$TEST_ROOT/.env"; set +a
fi
PROM_DOMAIN="prom.metric.argus.com:${PROMETHEUS_PORT:-9090}"
GRAF="http://localhost:${GRAFANA_PORT:-3000}"
echo "[VERIFY:GRAFANA] /api/health"
TMP_FILE="$(cd "$(dirname "$0")"/.. && pwd)/tmp/metric-verify/graf_health.json"
mkdir -p "$(dirname "$TMP_FILE")"
curl -fsS --max-time 10 "$GRAF/api/health" -o "$TMP_FILE" || { echo "[ERR] failed to GET /api/health" >&2; exit 1; }
python3 - "$TMP_FILE" <<'PY'
import sys,json
with open(sys.argv[1],'r',encoding='utf-8') as f:
j=json.load(f)
assert j.get('database')=='ok', f"health not ok: {j}"
print('OK')
PY
echo "[VERIFY:GRAFANA] datasource URL uses domain: $PROM_DOMAIN"
DS_FILE="/private/argus/metric/grafana/provisioning/datasources/datasources.yml"
if ! docker exec argus-grafana sh -lc "test -f $DS_FILE"; then
DS_FILE="/etc/grafana/provisioning/datasources/datasources.yml"
fi
docker exec argus-grafana sh -lc "grep -E 'url:\s*http://$PROM_DOMAIN' '$DS_FILE'" >/dev/null 2>&1 || { echo "[ERR] datasource not pointing to $PROM_DOMAIN" >&2; exit 1; }
echo "[OK] datasource points to domain"
echo "[VERIFY:GRAFANA] bind resolution inside grafana"
tries=0
until docker exec argus-grafana getent hosts prom.metric.argus.com >/dev/null 2>&1; do
tries=$((tries+1))
if (( tries > 24 )); then
echo "[ERR] grafana cannot resolve prom.metric.argus.com" >&2
exit 1
fi
echo "[..] waiting DNS propagation in grafana ($tries/24)"; sleep 5
done
echo "[OK] domain resolves"
echo "[DONE] grafana verify"