#!/bin/bash
# HA-VPN-Supervisor auf gw-aa

# Das andere Tunnel-Ende
TARGET="gw-ba"

# Anzahl Sekunden zwischen den Pings
TIMEOUT=1

# Warte MAXFAIL * TIMEOUT, bevor das Backup übernimmt
MAXFAIL=5

# Warte HYSTERE * TIMEOUT nach dem Ende eines Fehlers
# bevor das Skript auf Normalbetrieb umschaltet
HYSTERE=180

# Annahme: Beim Start liegt kein Fehler vor
FAIL=0

VERBOSE=""

ACTION_FAIL_START="/root/bin/HA-VPN-action-script start"
ACTION_OK_AGAIN="/root/bin/HA-VPN-action-script stop"

PING=/usr/bin/echoping
LOG="/usr/bin/logger -t HA-VPN"

math () {
   eval echo "\$(($*))"
}

echo "`date +%Y%m%d%H%M%S` `basename $0` starting" | $LOG

while :
do
VAL=`$PING ${VERBOSE} -u -t $TIMEOUT -s 5 ${TARGET} 2>&1`
ERROR=$?
if [ $ERROR -gt 0 ] ; then
    echo "$DAT $ERROR $FAIL $VAL" | $LOG
    # Timeout eingetreten
    if [ $FAIL -lt 0 ] ; then
	# Erneuter Fehler während der Erholungsphase
	FAIL=`math $MAXFAIL + 1`
    fi
    if [ $FAIL -eq $MAXFAIL ] ; then
	# Backup starten
	:
	FAIL=`math $FAIL + 1`
	echo "$DAT starting backup now: ${ACTION_FAIL_START}" | $LOG
	${ACTION_FAIL_START}
    else
	if [ $FAIL -lt $MAXFAIL ] ; then
	    FAIL=`math $FAIL + 1`
	fi
    fi
else
    # Ping war erfolgreich
    if [ $FAIL -gt $MAXFAIL ] ; then
	FAIL=`math 0 - $HYSTERE `
    fi
    if [ $FAIL -le $MAXFAIL -a $FAIL -ge 0 ] ; then
	FAIL=0
    fi
    if [ $FAIL -lt 0 ] ; then
	# Warte die Hysterese-Zeit ab vor einem Neustart
	echo "$DAT $ERROR $FAIL $VAL" | $LOG
	FAIL=`math $FAIL + 1`
	if [ $FAIL -eq 0 ] ; then
	    # Normalbetrieb wiederherstellen
	    :
	    echo "$DAT normal again now: ${ACTION_OK_AGAIN}" | $LOG
	    ${ACTION_OK_AGAIN}
	fi
    fi
fi
#echo "$DAT $ERROR $FAIL $VAL" | $LOG
sleep $TIMEOUT
done
# wird nie erreicht:
exit 0

