#! /bin/sh
# Copyright (c) 2005 Heinlein Prof. Linux Support GmbH
#
# Author: Peer Heinlein
#
#
### BEGIN INIT INFO
# Provides:       mailtraced
# Required-Start: $network $named $syslog $time $remote_fs memcached
# Required-Stop:  $network $named $syslog $time $remote_fs
# Default-Start:  3 5
# Default-Stop:   0 1 6
# Description:    Start mailtraced
### END INIT INFO

MAILTRACE_BIN=/usr/sbin/mailtraced
test -x $MAILTRACE_BIN || exit 5

# First reset status of this service
. /etc/rc.status

rc_reset

do_start() {
	$MAILTRACE_BIN
	return $?
}

do_stop() {
	local TYPE=$1
	
	if [ "$TYPE" == "graceful" ] ; then
		for PROCESS in $(ls /var/run/mailtraced.*.pid) ; do
			# Check if the PID is an active process and send an SIGTERM
         	PID=$(cat $PROCESS)
         	CHECK=$(ps aux | awk {'print $2'} | egrep "^${PID}$")
         	if [ -n $CHECK ] ; then
         		kill $PID
         	
         	# Else, delete the pidfile
         	else
         		rm $PROCESS
         	fi
		done
		
		sleep 1
	else
		for PROCESS in $(ls /var/run/mailtraced.*.pid) ; do
		    # Check if the PID is an active process and kill him hard
         	PID=$(cat $PROCESS)
         	CHECK=$(ps aux | awk {'print $2'} | egrep "^${PID}$")
         	if [ -n $CHECK ] ; then
         		kill -9 $PID
         	fi
		done
		
		# Delete every pidfile, which is left
		rm /var/run/mailtraced.*.pid
	fi
	
	return 0
}

do_restart() {
	do_stop force
	do_start
	
	return $?
}

do_status() {
	if [ -f /var/run/mailtraced.*.pid ] ; then
		echo -n "Currently running instances: $(ls -l /var/run/mailtraced.*.pid | wc -l)"
		return 0
	else
		echo -n "No instances are running"
		return 1
	fi
}

case "$1" in
    start)
        echo -n "Starting mailtrace-daemon:"
        do_start
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down mailtrace-daemon:"
        do_stop graceful
        rc_status -v
        ;;
    force-stop)
	    do_stop force
	    rc_status -v
	    ;;
    restart)
        do_restart
        rc_status -v
        ;;
    status)
        do_status
        rc_status -v
        ;;
    *)
        echo "Usage: $0 {start|stop|force-stop|status|restart}"
        exit 1
esac

# Inform the caller not only verbosely and set an exit status.
rc_exit
