CI / lint (pull_request) Successful in 5m7s
CI / unit (pull_request) Successful in 2m2s
CI / frontend (pull_request) Successful in 3m58s
CI / mutation (pull_request) Successful in 6m30s
CI / verify-stack (pull_request) Successful in 9m34s
CI / build (pull_request) Successful in 4m57s
Wire OTel metrics into the four remaining .NET services (acl, domain, event-subscriber, projection-api) exactly as the BFF: ASP.NET Core + HttpClient instrumentation + the built-in System.Runtime meter, exposed at /metrics via the Prometheus AspNetCore exporter (ADR-0024). Prometheus scrapes one job per service; Grafana ships a pre-built 'Request path — golden signals' dashboard (traffic/errors/latency/saturation). A verify-metrics CI step proves the endpoints are scraped end to end.
29 lines
1.4 KiB
Bash
Executable File
29 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# S-16c (#124): assert the golden-signal metrics pipeline works — the .NET services expose
|
|
# /metrics and Prometheus scrapes them — against an ALREADY-RUNNING full stack. Runs the
|
|
# driver in a python:3-slim container on the stack network (services reached by container IP;
|
|
# the runner can't reach published ports — gitea-actions-gotchas.md §5/§6). Does NOT manage
|
|
# the stack lifecycle.
|
|
set -euo pipefail
|
|
|
|
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
ip() { docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$1"; }
|
|
|
|
bff="$(docker ps -q --filter 'name=[-_]bff[-_]' | head -1)"
|
|
prom="$(docker ps -q --filter 'name=[-_]prometheus[-_]' | head -1)"
|
|
[ -n "$bff" ] && [ -n "$prom" ] || { echo "ERROR: bff and/or prometheus not running — bring the stack up first" >&2; exit 1; }
|
|
net="$(docker inspect -f '{{range $k,$_ := .NetworkSettings.Networks}}{{$k}}{{"\n"}}{{end}}' "$bff" | head -1)"
|
|
bff_ip="$(ip "$bff")"; prom_ip="$(ip "$prom")"
|
|
echo ">> network=$net bff=$bff_ip prometheus=$prom_ip"
|
|
|
|
cid="$(docker create --network "$net" \
|
|
-e "BFF=http://$bff_ip:8080" -e "PROMETHEUS=http://$prom_ip:9090" \
|
|
-e "METRICS_TIMEOUT=${METRICS_TIMEOUT:-90}" \
|
|
python:3-slim python /metrics-check.py)"
|
|
docker cp "$here/metrics-check.py" "$cid:/metrics-check.py" >/dev/null
|
|
rc=0; docker start -a "$cid" || rc=$?
|
|
docker rm -f "$cid" >/dev/null
|
|
exit $rc
|