45 lines
1.6 KiB
Bash
Executable File
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"
|