#!/bin/bash
# hub-backup-watchdog.sh — ВНЕШНИЙ (truly-external) бэкап-сторож на HOSTKEY 151.241.234.241
# (другой провайдер, чистый EU-интернет → TG напрямую). cron */5. Переживает падение дома/LXC137.
#  1) Независимо следит за AdminVPS-хабом НИИКН 78.17.4.225 (ICMP+TCP 443/9443).
#  2) Dead-man's switch: проверяет живость дома (git.dttb.ru). Дом недоступен → основной мониторинг
#     (LXC137) мог лечь → алертит отсюда, через независимый канал.
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HUB=78.17.4.225
HOME_URL=https://git.dttb.ru/
CHAT=1292155421
. /root/.tg-alert.env 2>/dev/null         # TOKEN=...
S_HUB=/root/.hub-backup.hub.alert
S_HOME=/root/.hub-backup.home.state       # "fails" — гистерезис для дома
A_HOME=/root/.hub-backup.home.alert
send(){ [ -n "$TOKEN" ] && curl -s --max-time 20 "https://api.telegram.org/bot${TOKEN}/sendMessage" \
        --data-urlencode "chat_id=$CHAT" --data-urlencode "text=$1" >/dev/null 2>&1; }
tcp(){ timeout 5 bash -c "echo >/dev/tcp/$HUB/$1" 2>/dev/null && echo 1 || echo 0; }
NOW=$(date +%s)

# 1. Независимая проверка хаба
icmp=$(ping -c2 -W2 "$HUB" >/dev/null 2>&1 && echo 1 || echo 0)
p443=$(tcp 443); p9443=$(tcp 9443)
if [ "$p443" = 0 ] && [ "$p9443" = 0 ]; then
  msg="🚨 [внешний сторож HOSTKEY] VPN-хаб НИИКН ($HUB) лёг: TCP 443/9443 молчат (ICMP=$icmp). Весь обход недоступен. Проверь AdminVPS (неоплата?)."
  last=$(cat "$S_HUB" 2>/dev/null || echo 0); [ $((NOW-last)) -gt 3600 ] && { send "$msg"; echo "$NOW" > "$S_HUB"; }
  echo "ALERT: hub down"
else
  [ -f "$S_HUB" ] && { send "✅ [внешний сторож HOSTKEY] VPN-хаб НИИКН ($HUB) снова в строю."; rm -f "$S_HUB"; }
fi

# 2. Dead-man's switch: живость дома (gitea — стабильный публичный сервис dttb)
if curl -s -o /dev/null --max-time 10 -w '%{http_code}' "$HOME_URL" 2>/dev/null | grep -qE '^(200|30.|40.)$'; then
  echo 0 > "$S_HOME"
  [ -f "$A_HOME" ] && { send "✅ [внешний сторож HOSTKEY] Дом dttb снова доступен — основной мониторинг (LXC137) жив."; rm -f "$A_HOME"; }
else
  f=$(( $(cat "$S_HOME" 2>/dev/null || echo 0) + 1 )); echo "$f" > "$S_HOME"
  if [ "$f" -ge 2 ]; then
    msg="⚠️ [внешний сторож HOSTKEY] Дом dttb недоступен снаружи ($HOME_URL не отвечает, $f проверки подряд) — возможно лёг интернет/инфра дома, а с ним и основной сторож LXC137. Следи за хабом вручную; этот внешний сторож продолжает работать."
    last=$(cat "$A_HOME" 2>/dev/null || echo 0); [ $((NOW-last)) -gt 3600 ] && { send "$msg"; echo "$NOW" > "$A_HOME"; }
    echo "ALERT: home unreachable ($f)"
  else
    echo "home degraded $f/2"
  fi
fi
echo "done (hub 443=$p443 9443=$p9443 icmp=$icmp)"
