Files
loogle-scripts/scripts/pi2-backup/super_watchdog.sh

120 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# ================================================
# 🔍 SUPER WATCHDOG DI RETE (Gira su Pi-2)
# ================================================
# --- CONFIGURAZIONE TELEGRAM ---
# Legge il token dal file sicuro invece che averlo in chiaro
TOKEN_FILE="/etc/telegram_dpc_bot_token"
if [ -f "$TOKEN_FILE" ]; then
# Legge il file e rimuove spazi o 'a capo' accidentali
BOT_TOKEN=$(cat "$TOKEN_FILE" | tr -d '\n' | tr -d '\r')
else
echo "ERRORE CRITICO: Token file non trovato in $TOKEN_FILE"
exit 1
fi
CHAT_ID="64463169"
# 👆👆 FINE MODIFICHE 👆👆
# Cartella dove salvare lo stato di ogni dispositivo
STATE_DIR="/tmp/watchdog_states"
mkdir -p "$STATE_DIR"
# --- LISTA DEI BERSAGLI ---
# Formato: "Nome Amichevole|Indirizzo IP"
# Usa icone diverse per capire subito la gravità.
TARGETS=(
# CRITICI 🚨
"🍓 Pi-1 (Master)|192.168.128.80"
"🗄️ NAS DS920+|192.168.128.100"
"🌍 Internet (Google)|8.8.8.8"
"📡 Router Main|192.168.128.1"
# INFRASTRUTTURA 🔌
"🗄️ NAS DS214|192.168.128.90"
"🔌 Switch Sala (.105)|192.168.128.105"
"🔌 Switch Taverna (.106)|192.168.128.106"
"🔌 Switch Lavanderia (.107)|192.168.128.107"
# WIFI 📶
"📶 WiFi Sala (.101)|192.168.128.101"
"📶 WiFi Luca (.102)|192.168.128.102"
"📶 WiFi Taverna (.103)|192.168.128.103"
"📶 WiFi Dado (.104)|192.168.128.104"
# CAMERE 📷 (Sottorete .135)
"📷 Cam Matrimoniale|192.168.135.2"
"📷 Cam Luca|192.168.135.3"
"📷 Cam Ingresso|192.168.135.4"
"📷 Cam Sala|192.168.135.5"
"📷 Cam Taverna|192.168.135.6"
"📷 Cam Retro|192.168.135.7"
)
# Funzione per inviare messaggi Telegram
send_telegram() {
MSG="$1"
# Usa un timeout breve per curl per non bloccare lo script se Telegram non va
curl -s --max-time 5 -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d chat_id="$CHAT_ID" -d text="$MSG" -d parse_mode="Markdown" > /dev/null 2>&1
}
# ================================================
# CICLO DI CONTROLLO PRINCIPALE
# ================================================
echo "--- Inizio controllo $(date) ---"
# Loop attraverso ogni dispositivo nella lista
for target_line in "${TARGETS[@]}"; do
# Estrai Nome e IP separati dal simbolo "|"
NAME=$(echo "$target_line" | cut -d'|' -f1)
IP=$(echo "$target_line" | cut -d'|' -f2)
# Crea un nome file sicuro per lo stato usando l'IP (es. 192_168_1_1.state)
SAFE_IP="${IP//./_}"
STATE_FILE="$STATE_DIR/${SAFE_IP}.state"
# Leggi lo stato precedente (default UP se non esiste)
if [ -f "$STATE_FILE" ]; then
LAST_STATE=$(cat "$STATE_FILE")
else
LAST_STATE="UP"
echo "UP" > "$STATE_FILE" # Inizializza
fi
# --- IL PING ---
# Tenta 2 ping, con timeout di 1 secondo l'uno.
# È un controllo rapido. Se fallisce 2 volte di fila, è giù.
ping -c 2 -W 1 "$IP" > /dev/null 2>&1
PING_RESULT=$? # 0 = Successo, altro = Fallimento
if [ $PING_RESULT -eq 0 ]; then
# === ORA È ONLINE ===
if [ "$LAST_STATE" == "DOWN" ]; then
# Era giù, ora è su: NOTIFICA DI RISOLUZIONE
send_telegram "✅ **RISOLTO: $NAME è tornato ONLINE!**%0AIP: \`$IP\`"
echo "UP" > "$STATE_FILE"
echo "--> $NAME tornato UP. Notifica inviata."
fi
else
# === ORA È OFFLINE ===
if [ "$LAST_STATE" == "UP" ]; then
# Era su, ora è giù: NOTIFICA DI ALLARME
# Scegli l'icona in base al tipo di dispositivo per l'allarme
ICON="⚠️"
if [[ "$NAME" == *"🚨"* || "$NAME" == *"🌍"* ]]; then ICON="🚨 CRITICO:"; fi
send_telegram "$ICON **ALLARME: $NAME è OFFLINE!**%0AIP: \`$IP\` non risponde."
echo "DOWN" > "$STATE_FILE"
echo "--> $NAME andato DOWN. Notifica inviata."
else
echo "$NAME ancora DOWN. Nessuna notifica."
fi
fi
done
echo "--- Fine controllo ---"