#!/usr/bin/env bash set -euo pipefail COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" APP_URL="${APP_URL:-http://localhost:4321/api/health}" OUT_DIR="${OUT_DIR:-./test-results/drills}" mkdir -p "$OUT_DIR" if docker compose version >/dev/null 2>&1; then DC=(docker compose) elif docker-compose version >/dev/null 2>&1; then DC=(docker-compose) else echo "[postgres-drill] Docker Compose is required." exit 1 fi echo "[postgres-drill] Starting services (postgres, redis, app)..." "${DC[@]}" -f "$COMPOSE_FILE" up -d postgres redis app echo "[postgres-drill] Capturing baseline health..." curl -sS "$APP_URL" | tee "$OUT_DIR/postgres-drill-baseline-health.json" >/dev/null echo "[postgres-drill] Stopping postgres to simulate DB outage..." "${DC[@]}" -f "$COMPOSE_FILE" stop postgres sleep 8 echo "[postgres-drill] Capturing degraded health..." curl -sS "$APP_URL" | tee "$OUT_DIR/postgres-drill-degraded-health.json" >/dev/null || true echo "[postgres-drill] Starting postgres again..." "${DC[@]}" -f "$COMPOSE_FILE" start postgres sleep 10 echo "[postgres-drill] Capturing recovered health..." curl -sS "$APP_URL" | tee "$OUT_DIR/postgres-drill-recovered-health.json" >/dev/null echo "[postgres-drill] Collecting app logs (last 5m)..." "${DC[@]}" -f "$COMPOSE_FILE" logs --since 5m app > "$OUT_DIR/postgres-drill-app.log" || true echo "[postgres-drill] ✅ Drill complete. Artifacts in $OUT_DIR"