#!/bin/bash
# chkconfig: 235 99 20
# description: cmon start/stop script
### BEGIN INIT INFO
# Provides:             cmon
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    cmon - cluster monitor
### END INIT INFO

# ClusterControl debian initscript
# Copyright (C) 2011-2014 severalnines.com

SBINDIR=/usr/local/cmon/sbin

CMON_CNF="/etc/cmon.cnf"

RUNNING_DIR=`grep -i pidfile $CMON_CNF | awk -F'=' '{print $2}'`

if [ -z "$RUNNING_DIR" ]; then
    RUNNING_DIR="/var/run"
fi

PIDFILE=${RUNNING_DIR}/cmon.pid

PROGNAME="cmon"
STARTCMON="$SBINDIR/$PROGNAME $OPTIONS"
LOCKFILE=""
if [ -d /var/lock/subsys ]; then
    LOCKFILE=/var/lock/subsys/cmon
else
    LOCKFILE=/var/lock/cmon
fi

RETVAL=0
pidof_prog() {
    if [ -f $PIDFILE ]; then
        if pidof $PROGNAME | tr ' ' '\n' | grep $(cat $PIDFILE); then
            return 0
        fi
    fi
    return 1
}

pidof_prog2() {
    if pidof $PROGNAME | tr ' ' '\n' ; then
        return 0
    fi
    return 1
}

start() {
    echo -n "Starting $PROGNAME $OPTIONS :"
    PID=`pgrep -xf "$SBINDIR/$PROGNAME $OPTIONS"`
    if [ -n "$PID" ]; then
        printf "$PROGNAME is already running with pid $PID\n"
        return 0
    else
        export LD_LIBRARY_PATH=$LIBDIR
        if [ ! -f $SBINDIR/$PROGNAME ]; then
            echo -n "$PROGNAME executable not found in $SBINDIR"
        fi
        LC_ALL=C $STARTCMON
        if [ $? -ne 0 ]; then
             echo -n "Starting $PROGNAME $OPTIONS :"
             echo " failed"
             return 0
        fi
        echo -n "Starting $PROGNAME $OPTIONS :"
        sync
        #echo $! > $PIDFILE
        touch $LOCKFILE
        sleep 1
        PID=`cat $PIDFILE`
        if [ "$PID" ]; then
            sed -i '/pidof/ s/# *//' /etc/cron.d/cmon &> /dev/null
            echo " ok"
            return 1
        else
            echo " failed"
            return 0
        fi
    fi
}

stop() {
    echo -n "Stopping $PROGNAME : "
    sed -i '/^\*.*pidof/s/^/# /' /etc/cron.d/cmon &> /dev/null
    PID=$(pidof_prog)
    KILLED=0
    if [ -n "$PID" ]; then
        kill  -15 $PID 2>&1
        KILLED=1
    fi

    if [ $KILLED -eq 1 ]; then
        I=0
        while [ $I -lt 60 ];
        do
            PID=$(pidof_prog)
            if [ -z "$PID" ]; then
                echo " ok"
                return 1
            fi
            I=`expr $I + 1`
            echo -n .
            sleep 1
        done
    fi

    PID=`pgrep -xf "$SBINDIR/$PROGNAME $OPTIONS"`
    if [ -n "$PID" ]; then
        pkill -9 -xf "$SBINDIR/$PROGNAME $OPTIONS"
    else
        # `rm -f ${PIDFILE}`
        `rm -f ${LOCKFILE}`
        sleep 2
        echo " failed"
        return 0
    fi
    i=1
    while [ "`pgrep -xf "$SBINDIR/$PROGNAME $OPTIONS"`" ];
    do
        if [ $i -eq 60 ]; then
            echo "giving up after 60 secods"
            return 0
        fi
        i=`expr $i + 1`
        sleep 1
    done
    PID=`pgrep -xf "$SBINDIR/$PROGNAME $OPTIONS"`
    if [ -n "$PID" ]; then
        sleep 2
        echo " failed"
        return 0
    else
        # `rm -f ${PIDFILE}`
        `rm -f ${LOCKFILE}`
        sleep 2
        echo " ok"
        return 1
    fi
}

case "$1" in
    init|initial)
        initial
        ;;
    start)
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    status)
        PID=`pgrep -xf "$SBINDIR/$PROGNAME $OPTIONS"`
        if [ -z "$PID" ]; then
            PID=$(pidof_prog)
        fi
        if [ -n "$PID" ]; then
            echo "$PROGNAME is running (pid $PID)."
        else
            echo "$PROGNAME is NOT running."
        fi
        RETVAL=$?
        ;;
    condrestart|try-restart)
        PID=`pgrep -xf "$SBINDIR/$PROGNAME $OPTIONS"`
        if [ -n "$PID" ]; then
             stop
             sleep 2
             start
             echo "$PROGNAME is running (pid $PID)."
        fi
        RETVAL=$?
        ;;
    restart|reload|force-reload)
        stop
        sleep 2
        start
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit $?

