#!/bin/bash
SERVICE="esiaCron"
PROCESS="esiaCron"

DB="esia"
HOST="localhost"
USER="esia"
SQL="SELECT count(*) FROM esia_cron_plugin WHERE cron_next_exec IS NOT NULL AND cron_next_exec < NOW() - interval '10 minutes' AND cron_status != 'PROCESS' AND cron_interval != '00:00:00'::interval"
SQL2="SELECT count(*) FROM esia_cron_plugin WHERE cron_next_exec IS NOT NULL AND cron_next_exec < NOW() - interval '2 hour' AND cron_status = 'PROCESS'"

mode=$1
num=$2
function exit_error {
	echo $1
	exit 1
}

function test {
	    service $SERVICE status > /dev/null || exit_error "The service $SERVICE isn't running"
	    PROC_NBR=$(ps -FC esiaCron --no-headers|tr -s ' ' ' '|grep /usr/local/esia/esiaCron|cut -d ' ' -f3|grep "^1$"|wc -l)
        if [ "$PROC_NBR" -ne "1" ]; then
                uptime >> /root/too_much_esiaCron.txt
                ps -FC esiaCron >> /root/too_much_esiaCron.txt
                exit_error "They are $PROC_NBR $PROCESS numbers. Must be 1. Uptime : $(uptime -s)."
        fi

	DAEMONS=$(ps -ae | grep 'esiaCron'|grep defunct|wc -l)
        if [ -n $DAEMONS ] && [ $DAEMONS -gt 2 ]; then
                exit_error "$DAEMONS <defunct> daemons are running."
        fi
        DAEMON_HOUR=$(ps -p $(echo $(ps -e -o pid,comm |grep $PROCESS|grep -v grep|grep -v "_$PROCESS_")|cut -d ' ' -f1) -o etime|grep -P '\d\d:\d\d:\d\d'|cut -d ':' -f1)
        if [ -n "$DAEMON_HOUR" ]; #Cela fait plus d'1 heure que le démon tourne
        then
                NB=$(psql -t -d $DB -U $USER -w -h $HOST -c "$SQL"|tr -d " \n")
                if [ -z "$NB" ] | [ $NB -gt 0 ] ;
                then
                        # On a des tâches en retard
                        exit_error "They are $NB task too late"
                fi

                #Task in progress
                DAEMON_DAY=$(echo "$DAEMON_HOUR" |grep "-")
                if [ -n "$DAEMON_DAY" ]; then
                        RUN_TEST=1
                elif [ "$DAEMON_HOUR" -ge 2 ] ; then
                        RUN_TEST=1
                else
                        RUN_TEST=0
                fi

                if [ $RUN_TEST -eq 1 ]; then
                        NB=$(psql -t -d $DB -U $USER -w -h $HOST -c "$SQL2"|tr -d " \n")
                        if [ -z "$NB" ] | [ $NB -gt 0 ] ;
                        then
                                # On a des tâches en retard
                                exit_error "They are $NB progress task too late"
                        fi
                fi
        fi	
}

function rescue {
	case $1 in
		0) echo 1 ;; #Retourne le nombre de modes dispos
		1) service $SERVICE restart || exit_error "service $SERVICE restart FAIL" ;;
		*) exit_error "Unknown rescue num:$1 for service $SERVICE";;
	esac
}

function save {
	echo "save"
}

function load {
	echo "load"
}

case $mode in
	test) test;;
	rescue) rescue $num;;
	save) save;;
	load) load;;
	*) echo "OP 1 must be : [test|rescue|save|load]"; exit 1
esac

exit 0
