#!/bin/sh
#
# nfacctd	NetFlow accounting daemon.
#
# chkconfig: - 90 10
# description:	NetFlow accounting daemon \
#		it listens for NetFlow packets \
#		v1/v5/v7/v8/v9 on one or more interfaces (IPv4 and IPv6); \
#		statistics may be either pushed to stdout, stored in a \
#		memory table or a PostgreSQL/MySQL/SQLite database.

# processname: nfacctd
# config: /etc/pmacct/pmacct.conf
# pidfile: /var/run/nfacctd.pid

### BEGIN INIT INFO
# Provides: nfacctd
# Required-start: $network $syslog
# Required-stop: $network $syslog
# Default-start: 2 3 4 5
# Default-stop: 0 1 6
# Short-Description: NetFlow accounting daemon
### END INIT INFO

# Source function library.
. /etc/init.d/functions

NAME=nfacctd
DAEMON=/usr/sbin/$NAME
CONFDIR=/etc/pmacct

PIDFILE=/var/run/$NAME.pid
LOCKFILE=/var/lock/subsys/$NAME

TIME_FOR_STOP=120
RETVAL=0

check_work()
{
    while [[ "$t" -lt $TIME_FOR_STOP ]] ; do
        [[ ! $(pidof $NAME) ]] && return 0
        echo -n "."
        t=$(expr $t + 1)
	sleep 1
    done
    return 1
}

start()
{
	start_daemon --lockfile "$LOCKFILE" --expect-user root -- $DAEMON -D -F $PIDFILE -f "$CONFDIR/$NAME.conf"
	RETVAL=$?
	return $RETVAL
}

stop()
{
        MESSAGE="$NAME shutdown"
        FLAGS="--stop --exec $DAEMON --pidfile $PIDFILE --user root"
        if ! start-stop-daemon $FLAGS --test > /dev/null; then
	        msg_not_running "$DISPNAME"
                [ -z "$LOCKFILE" ] || rm -f "$LOCKFILE"
                passed "$MESSAGE"
                RETVAL=$?
		echo
                return $RETVAL
        fi

	echo -n "Service $NAME is stopping. Waiting plugins to stop:  "
	killall -INT $NAME >/dev/null 2>&1
	RETVAL=$?

	check_work
	RETVAL2=$?
        if [ $RETVAL2 = 1 ]; then
	    echo -n " time expired, killing without save "
	    killall -9 $NAME >/dev/null 2>&1
	fi
        [ -z "$PIDFILE" ] || rm -f "$PIDFILE"

        if [ $RETVAL = 0 ]; then
                [ -z "$LOCKFILE" ] || rm -f "$LOCKFILE"
                success "$MESSAGE"
        else
                failure "$MESSAGE"
        fi
        echo
	return $RETVAL
}

restart()
{
        stop
        sleep 1
        start
}

reload()
{
	echo -n $"Reloading $NAME:"
	killall -USR2 $NAME >/dev/null 2>&1
	RETVAL=$?
	if [ $RETVAL = 0 ]; then
	    echo_success
	    echo
	else
	    echo_failure
	    echo
	fi
	return $RETVAL
}

stat()
{
    for P in $(ls /var/run/$NAME* 2>/dev/null); do
	N=$(echo "$P" | sed "s/\/var\/run\/$NAME\.pid//g")
	status --displayname "$NAME$N" --pidfile "$P" --expect-user root -- $NAME
	RETVAL=$?
	if [ ! $RETVAL = 0 ]; then
	    RETVAL2=$RETVAL
	fi
    done
    return $RETVAL
}

# See how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	reload)
		reload
		;;
	restart)
		restart
		;;
	condstop)
		if [ -e "$LOCKFILE*" ]; then
			stop
		fi
		;;
	condrestart)
		if [ -e "$LOCKFILE*" ]; then
			restart
		fi
		;;
	condreload)
		if [ -e "$LOCKFILE*" ]; then
			restart
		fi
		;;
	status)
		stat
		;;
	*)
		msg_usage "${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status}"
		RETVAL=1
esac

exit $RETVAL
