#!/usr/bin/env bash set -euo pipefail # Synthetic probe for orchestrator infra (postgres, mongo, nats). # Runs lightweight checks and writes a status file under out/orchestrator-probe/. COMPOSE_FILE=${COMPOSE_FILE:-ops/devops/orchestrator/docker-compose.orchestrator.yml} STATE_DIR=${STATE_DIR:-out/orchestrator-probe} mkdir -p "$STATE_DIR" log() { printf "[probe] %s\n" "$*"; } require() { command -v "$1" >/dev/null 2>&1 || { echo "missing $1" >&2; exit 1; }; } require docker timestamp() { date -u +%Y-%m-%dT%H:%M:%SZ; } log "compose file: $COMPOSE_FILE" PG_OK=0 MONGO_OK=0 NATS_OK=0 if docker compose -f "$COMPOSE_FILE" ps orchestrator-postgres >/dev/null 2>&1; then if docker compose -f "$COMPOSE_FILE" exec -T orchestrator-postgres psql -U orch -tAc "select 1" | grep -q 1; then PG_OK=1 fi fi if docker compose -f "$COMPOSE_FILE" ps orchestrator-mongo >/dev/null 2>&1; then if docker compose -f "$COMPOSE_FILE" exec -T orchestrator-mongo mongosh --quiet --eval "db.adminCommand('ping').ok" | grep -q 1; then MONGO_OK=1 fi fi if docker compose -f "$COMPOSE_FILE" ps orchestrator-nats >/dev/null 2>&1; then if docker compose -f "$COMPOSE_FILE" exec -T orchestrator-nats nats --server localhost:4222 ping >/dev/null 2>&1; then # publish & request to ensure traffic path works docker compose -f "$COMPOSE_FILE" exec -T orchestrator-nats nats --server localhost:4222 pub probe.ping "ok" >/dev/null 2>&1 || true NATS_OK=1 fi fi cat > "$STATE_DIR/status.txt" <