typhon/scripts/manual_phase1_smoke.sh

78 lines
2.1 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
if [[ $# -ne 1 ]]; then
echo "usage: $0 /tmp/typhon-aci.env" >&2
exit 1
fi
ENV_FILE="$1"
if [[ ! -f "$ENV_FILE" ]]; then
echo "missing env file: $ENV_FILE" >&2
exit 1
fi
set -a
# shellcheck source=/dev/null
source "$ENV_FILE"
set +a
: "${ACI_EMAIL:?ACI_EMAIL is required}"
: "${ACI_PASSWORD:?ACI_PASSWORD is required}"
export POLL_INTERVAL_SECONDS="${POLL_INTERVAL_SECONDS:-10}"
export REQUEST_TIMEOUT_MS="${REQUEST_TIMEOUT_MS:-10000}"
export LISTEN_PORT="${LISTEN_PORT:-9108}"
export LOG_LEVEL="${LOG_LEVEL:-info}"
LOG_FILE="/tmp/typhon-manual-smoke.log"
METRICS_FILE="/tmp/typhon-manual-smoke.metrics"
cleanup() {
if [[ -n "${APP_PID:-}" ]]; then
kill "$APP_PID" 2>/dev/null || true
wait "$APP_PID" 2>/dev/null || true
fi
}
trap cleanup EXIT
npm run dev >"$LOG_FILE" 2>&1 &
APP_PID=$!
for _ in {1..60}; do
if curl -fsS "http://127.0.0.1:${LISTEN_PORT}/healthz" >/dev/null 2>&1; then
curl -fsS "http://127.0.0.1:${LISTEN_PORT}/metrics" >"$METRICS_FILE"
if rg -q '^typhon_up 1$' "$METRICS_FILE"; then
break
fi
fi
sleep 1
done
curl -fsS "http://127.0.0.1:${LISTEN_PORT}/metrics" >"$METRICS_FILE"
echo "=== Required metrics ==="
rg -n "^typhon_up|^typhon_build_info|^typhon_poll_errors_total|^typhon_temperature_celsius|^typhon_relative_humidity_percent|^typhon_vpd_kpa|^typhon_fan_speed_level" "$METRICS_FILE" -S || true
echo
if rg -q '^typhon_up 1$' "$METRICS_FILE"; then
TEMP_LINE="$(rg '^typhon_temperature_celsius' "$METRICS_FILE" -n -S | head -n 1 || true)"
HUMID_LINE="$(rg '^typhon_relative_humidity_percent' "$METRICS_FILE" -n -S | head -n 1 || true)"
VPD_LINE="$(rg '^typhon_vpd_kpa' "$METRICS_FILE" -n -S | head -n 1 || true)"
echo "=== Current climate ==="
[[ -n "$TEMP_LINE" ]] && echo "$TEMP_LINE"
[[ -n "$HUMID_LINE" ]] && echo "$HUMID_LINE"
[[ -n "$VPD_LINE" ]] && echo "$VPD_LINE"
else
echo "warning: typhon_up did not reach 1 during smoke window"
fi
echo
echo "=== Recent app log lines ==="
tail -n 60 "$LOG_FILE"
echo
echo "manual smoke complete"
echo "metrics: $METRICS_FILE"
echo "logs: $LOG_FILE"