#!/bin/bash
SECONDES=$1;
SCRIPT_DIR="/usr/local/esia/watchdog/script.d"

LOG_FILE="/var/log/esia/watchdog.log"
mkdir -p "/var/log/esia"

SCRIPTNAME="esia-watchdog"

export LC_ALL=C #Set la locale en anglais (pour la date)

function send_log {
        TYPE=$1
        MESSAGE=$2
        DATE=$(date +"%b %d %H:%M:%S")
        HOST=$(hostname)

        printf "$DATE $HOST $SCRIPTNAME : %*s - $MESSAGE\n" 7 $TYPE >> $LOG_FILE
}

send_log "STARTED" "watchdog started"

while [ $SECONDES ]
do
        sleep $SECONDES

        checked=0;
        ok=0;
        restarted=0;
        down=0;

        date=$(date +"%Y-%m-%d_%T=%s")

        for script in $(ls $SCRIPT_DIR)
        do
                cmd=$SCRIPT_DIR/$script
                output=$(${cmd} test)

                if [[ $? -eq 0 ]]
                then
                        send_log "OK" "Service $script"

                        (( ok++ ))
                else  #ERROR
                        send_log "FAIL" "service $script $output"

                        methods=$(${cmd} rescue 0)
                        for method in  `seq 1 $methods`
                        do
                                ${cmd} rescue $method && ${cmd} test && break
                        done

                        if [[ $? -eq 0 ]]
                        then
                                (( restarted++ ))
                                send_log "OK" "service $script restarted"
                        else
                                 (( down++ ))
                                send_log "FAIL" "service $script already down"
                        fi
                fi
               (( checked++ ))
        done
        send_log "CHECKED" "CHECKED:$checked OK:$ok RESTARTED:$restarted DOWN:$down NEXT:$SECONDES"
done

