#!/bin/bash
# netbird-watchdog.sh — рестарт netbird если daemon застрял
# (Management Connected, но Relays=0 или Peers=0 при ненулевом total)
# Минимум 5 минут между рестартами чтобы не зацикливалось.

LOCK=/run/netbird-watchdog.last-restart
NOW=$(date +%s)

if [ -f "$LOCK" ]; then
    LAST=$(cat "$LOCK")
    if [ $((NOW - LAST)) -lt 300 ]; then
        exit 0  # был рестарт менее 5 мин назад
    fi
fi

STATUS=$(netbird status 2>&1) || exit 0
echo "$STATUS" | grep -q "^Management: Connected" || exit 0  # даём демону самому подняться

stuck=0
while IFS= read -r line; do
    case "$line" in
        Relays:*|"Peers count:"*)
            cur=$(echo "$line" | awk '{print $(NF-1)}' | awk -F/ '{print $1}')
            total=$(echo "$line" | awk '{print $(NF-1)}' | awk -F/ '{print $2}')
            [ -z "$cur" ] || [ -z "$total" ] && continue
            if [ "$total" -gt 0 ] && [ "$cur" -eq 0 ]; then
                logger -t netbird-watchdog "stuck: $line — will restart"
                stuck=1
            fi
            ;;
    esac
done <<< "$STATUS"

if [ "$stuck" = "1" ]; then
    echo "$NOW" > "$LOCK"
    systemctl restart netbird
    logger -t netbird-watchdog "netbird restarted"
fi
