#!/bin/bash
#
# drlb_ldm		Start up the DRLB LDM service
#
# chkconfig: 345 60 30
# description: DR load balancer for LDM load balancing.
#
# processname: drlb_ldm_server
# config: /etc/drlb/ldm_cluster.cfg

### BEGIN INIT INFO
# Provides: drlb_ldm_server
# Required-Start: $local_fs $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start up the DRLB LDM server daemon
# Description:       DR load balancer for LDM load balancing.
### END INIT INFO

# source function library
. /etc/rc.d/init.d/functions

# System specific ENV overrides
# ARGS
# CFGFILE
# LBPROCNAME
# LBPROC
if [ -f /etc/sysconfig/drlb_ldm_server ]; then . /etc/sysconfig/drlb_ldm_server; fi

if [ -z ${CFGFILE} ]; then CFGFILE=/etc/drlb/ldm_cluster.cfg; fi 
if [ -z ${LBPROCNAME} ]; then LBPROCNAME="drlb_ldm_server"; fi
if [ -z ${LBPROC} ]; then LBPROC="/usr/sbin/${LBPROCNAME}"; fi

if [ ! -f ${CFGFILE} ]; then
   echo "ERROR - Missing LB config file: ${CFGFILE}"
   exit 1
fi 

error_level=0

function start() {
    pid=$(ps -ef | grep ${LBPROCNAME} | grep ${CFGFILE} | grep -v grep | awk '{ print $2 }')
    if [ ! -z $pid ]; then
	echo "${LBPROCNAME} already running"
	error_level=0
    else
	echo "Starting ${LBPROCNAME}"
	if [ -z ${ARGS} ]; then 
	    ${LBPROC} --config-file=${CFGFILE} ${ARGS} > /dev/null &
	else 
	    ${LBPROC} --config-file=${CFGFILE} > /dev/null &
	fi
	pid=$(ps -ef | grep ${LBPROCNAME} | grep -- ${CFGFILE} | grep -v grep | awk '{ print $2 }')
	if [ -z $pid ]; then error_level=1; fi
    fi
}

function stop() {
    pid=$(ps -ef | grep ${LBPROCNAME} | grep -- ${CFGFILE} | grep -v grep | awk '{ print $2 }')
    if [ ! -z $pid ]; then
	pids=$(ps -ef | grep ${pid} | grep -v grep | awk '{ print $2 }')
	for p in ${pids}
	do
	    ppid=$(ps -ef | grep ${pid} | grep -v grep | awk '{ print $3 }')
	    if [ ! -z ${ppid} ]; then
		if [ ${ppid} -eq ${pid} ]; then 
		    echo "Stopping child process ${p}"
		    kill ${p}
		fi
	    fi
	done
	echo "Stopping ${LBPROCNAME}"
	kill ${pid}
	sleep 20
	pid=$(ps -ef | grep ${LBPROCNAME} | grep -- ${CFGFILE} | grep -v grep | awk '{ print $2 }')
	if [ ! -z $pid ]; then
	    echo "Forcing LB shutdown after $count retries"
	    kill -9 ${pid}
	    error_level=1
	    echo "${LBPROCNAME} stopped"
	    return;
	fi
	echo "${LBPROCNAME} stopped"
	error_level=0
    else
	echo "${LBPROCNAME} not running"
	error_level=1
    fi
}

case "${1}" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status ${LBPROCNAME}
        ;;
    restart|reload|condrestart)
        stop
        start
        ;;
    *)
        echo $"Usage: ${0} {start|stop|restart|status}"
        exit 1
esac

exit $error_level
