feat: add admin console, Redis broker and chaos lab for training demo

This commit is contained in:
Jonas Kaninda
2026-09-30 12:17:14 +02:00
parent bd1b37393a
commit bc89695355
22 changed files with 2551 additions and 171 deletions
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env bash
# Hit an endpoint in a loop during a deploy and report any non-2xx responses,
# plus which version/host answered. Proves zero-downtime rollouts.
#
# scripts/hammer.sh https://guestbook.example.com # /api/time, 10 req/s
# scripts/hammer.sh https://guestbook.example.com 20 /healthz
set -u
BASE="${1:?usage: hammer.sh <base-url> [req-per-sec] [path]}"
RATE="${2:-10}"
PATH_="${3:-/api/time}"
URL="${BASE%/}${PATH_}"
SLEEP=$(awk "BEGIN { print 1 / $RATE }")
ok=0 fail=0 total=0
# A temp file instead of an associative array: macOS still ships bash 3.2.
seen=$(mktemp)
summary() {
echo
echo "── $total requests · $ok ok · $fail failed ──"
sort "$seen" | uniq -c | sort -rn
rm -f "$seen"
exit 0
}
trap summary INT TERM
echo "hammering $URL at ~${RATE} req/s — Ctrl-C for the summary"
while true; do
resp=$(curl -s -m 5 -w '\n%{http_code}' "$URL" 2>/dev/null)
code="${resp##*$'\n'}"
body="${resp%$'\n'*}"
total=$((total + 1))
version=$(printf '%s' "$body" | sed -n 's/.*"version":"\([^"]*\)".*/\1/p')
host=$(printf '%s' "$body" | sed -n 's/.*"host":"\([^"]*\)".*/\1/p')
key="${code} v${version:-?} ${host:-?}"
echo "$key" >> "$seen"
if [[ "$code" =~ ^2 ]]; then
ok=$((ok + 1))
printf '\r%s ok=%d fail=%d last: %-40s' "$(date +%T)" "$ok" "$fail" "$key"
else
fail=$((fail + 1))
printf '\n%s FAIL %s\n' "$(date +%T)" "${code:-000}"
fi
sleep "$SLEEP"
done