#!/bin/bash
# External uptime monitor for agentforms.io
# Run as cron on a separate host (e.g., Hetzner VPS)
# Sends alerts via Telegram if health check fails
HEALTH_URL="${HEALTH_URL:-https://agentforms.io/health/ready}"
TIMEOUT=10
ALERT_COOLDOWN=300 # 5 minutes between alerts
# Check for alert cooldown file
LAST_ALERT_FILE="/tmp/agentforms_last_alert"
if [ -f "$LAST_ALERT_FILE" ]; then
LAST_ALERT=$(cat "$LAST_ALERT_FILE")
NOW=$(date +%s)
ELAPSED=$((NOW - LAST_ALERT))
if [ "$ELAPSED" -lt "$ALERT_COOLDOWN" ]; then
exit 0
fi
fi
# Health check
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time "$TIMEOUT" "$HEALTH_URL" 2>/dev/null)
if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ]; then
# Service is healthy
exit 0
else
# Service is unhealthy — record alert time
date +%s > "$LAST_ALERT_FILE"
# Build alert message
TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
ALERT_MSG="🔴 AgentForms DOWN\nHost: agentforms.io\nTime: ${TIMESTAMP}\nHTTP: ${HTTP_CODE:-timeout}"
# Send via Telegram if configured
if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
-d "{\"chat_id\":\"${TELEGRAM_CHAT_ID}\",\"text\":\"${ALERT_MSG}\",\"parse_mode\":\"Markdown\"}" \
--max-time 10 > /dev/null 2>&1
fi
# Log to stdout
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) ALERT: agentforms.io returned HTTP ${HTTP_CODE:-timeout}" >&2
exit 1
fi