#!/bin/bash
# alarms_service startup script
# chkconfig: 345 70 30
# description: start or stop alarms_service  
### BEGIN INIT INFO
# Provides: alarms_service
# Default-Start: 345
# Default-Stop:  0 1 2 6
# Short-Description: start or stop alarms_service  
# Description: start or stop alarms_service
### END INIT INFO

alarms_service_start()
{
    if pgrep -u root -f "alarms_script.sh" > /dev/null; then
        echo "ERR: Service alarms_service is already running"
    else
        fileconfig=/opt/Avaya/scripts/config_files/alarms_config
        if [ -f $fileconfig ]; then 
            . $fileconfig
            validate_config_file
            nohup /opt/Avaya/scripts/alarms_script.sh > /dev/null 2>&1 &
            echo "Service alarms_service has been started."
        else
            echo "Error" $fileconfig "does not exist"
        fi
    fi
}

alarms_service_stop()
{
    pid=`pgrep -u root -f "alarms_script.sh"`
    if [ -n "$pid" ]; then
        kill -9 $pid 
        
        status=0
        while [ "$status" == 0 ]; do
            echo "Waiting for alarms_service to stop."
            sleep 1
            ps -p$pid 2>&1 > /dev/null
            status=$?
        done
        
        rm -rf /opt/Avaya/alarms/*
    fi
    echo "Service alarms_service has been stopped."
}

alarms_service_status()
{
    if pgrep -u root -f "alarms_script.sh" > /dev/null; then 
        echo "Service alarms_service is RUNNING"
    else
        echo "Service alarms_service is STOPPED"
    fi
}

main()
{
    case "$1" in
    start)
        alarms_service_start
        ;;
    stop)
        alarms_service_stop
        ;;
    restart)
        alarms_service_stop
        alarms_service_start
        ;;
    status)
        alarms_service_status
        ;;
    *)
        echo "usage: $0 (start|stop|restart|status)"
        ;;
    esac
}

###############################################################################
# this function checks if config file is properly defined
###############################################################################
function validate_config_file()
{
    if [[ -z $IPOFFICE_ALARM_INTERVAL || ! "$IPOFFICE_ALARM_INTERVAL" =~ ^[0-9]+$ 
    || -z $CPU_DISCARD_WARNING_LEVEL || ! "$CPU_DISCARD_WARNING_LEVEL" =~ ^[0-9]+$ 
    || -z $CPU_RAISE_WARNING_LEVEL || ! "$CPU_RAISE_WARNING_LEVEL" =~ ^[0-9]+$  
    || -z $CPU_DISCARD_CRITICAL_LEVEL || ! "$CPU_DISCARD_CRITICAL_LEVEL" =~ ^[0-9]+$  
    || -z $CPU_RAISE_CRITICAL_LEVEL || ! "$CPU_RAISE_CRITICAL_LEVEL" =~ ^[0-9]+$  
    || -z $CPUIO_DISCARD_WARNING_LEVEL || ! "$CPUIO_DISCARD_WARNING_LEVEL" =~ ^[0-9]+$  
    || -z $CPUIO_RAISE_WARNING_LEVEL || ! "$CPUIO_RAISE_WARNING_LEVEL" =~ ^[0-9]+$   
    || -z $CPUIO_DISCARD_CRITICAL_LEVEL || ! "$CPUIO_DISCARD_CRITICAL_LEVEL" =~ ^[0-9]+$  
    || -z $CPUIO_RAISE_CRITICAL_LEVEL || ! "$CPUIO_RAISE_CRITICAL_LEVEL" =~ ^[0-9]+$  
    || -z $MEM_DISCARD_WARNING_LEVEL || ! "$MEM_DISCARD_WARNING_LEVEL" =~ ^[0-9]+$  
    || -z $MEM_RAISE_WARNING_LEVEL || ! "$MEM_RAISE_WARNING_LEVEL" =~ ^[0-9]+$  
    || -z $MEM_DISCARD_CRITICAL_LEVEL || ! "$MEM_DISCARD_CRITICAL_LEVEL" =~ ^[0-9]+$  
    || -z $MEM_RAISE_CRITICAL_LEVEL || ! "$MEM_RAISE_CRITICAL_LEVEL" =~ ^[0-9]+$ ]]
    then
        echo "ERROR - config file contains unset variables"
        exit
    fi
    
    if [[ $IPOFFICE_ALARM_INTERVAL -lt 5 ]]
    then
        echo "ERROR - config file contains wrong ALARM interval"
        exit
    fi
    
    if [[ ! $CPU_DISCARD_WARNING_LEVEL -le $CPU_RAISE_WARNING_LEVEL 
    || ! $CPU_RAISE_WARNING_LEVEL -lt $CPU_DISCARD_CRITICAL_LEVEL
    || ! $CPU_DISCARD_CRITICAL_LEVEL -le $CPU_RAISE_CRITICAL_LEVEL ]]
    then 
        echo "ERRROR - config file contains wrong CPU alarm levels"
        exit
    fi
    
    if [[ ! $CPUIO_DISCARD_WARNING_LEVEL -le $CPUIO_RAISE_WARNING_LEVEL 
    || ! $CPUIO_RAISE_WARNING_LEVEL -lt $CPUIO_DISCARD_CRITICAL_LEVEL
    || ! $CPUIO_DISCARD_CRITICAL_LEVEL -le $CPUIO_RAISE_CRITICAL_LEVEL ]]
    then 
        echo "ERROR - config file contains wrong CPUIO alarms levels"
        exit
    fi
    
    if [[ ! $MEM_DISCARD_WARNING_LEVEL -le $MEM_RAISE_WARNING_LEVEL 
    || ! $MEM_RAISE_WARNING_LEVEL -lt $MEM_DISCARD_CRITICAL_LEVEL
    || ! $MEM_DISCARD_CRITICAL_LEVEL -le $MEM_RAISE_CRITICAL_LEVEL ]]
    then 
        echo "ERROR - config file contains wrong MEM alarms levels"
        exit
    fi
}

################################ BEGIN ########################################

main "$@"
