#!/bin/sh
#
# chkconfig: 345 86 16
# description: Freeside daemons
#
### BEGIN INIT INFO
# Provides:          freeside
# Required-Start:    $time $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      postgresql mysql
# Should-Stop:       postgresql mysql
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Freeside daemons at boot time
# Description:       Enable Freeside daemons
### END INIT INFO

QUEUED_USER=fs_queue
API_USER=fs_api

SELFSERVICE_USER=fs_selfservice
SELFSERVICE_MACHINES=""

IF=eth0

#INSTALLSCRIPT/INSTALLSITEBIN from Makefile.PL
PATH="$PATH:/usr/local/bin"
export PATH

[ -r /etc/default/freeside ] && . /etc/default/freeside

case "$1" in
  start)
        # Start daemons.

        for MACHINE in $SELFSERVICE_MACHINES; do
          echo -n "Starting freeside-selfservice-server to $MACHINE: "
          freeside-selfservice-server $SELFSERVICE_USER $MACHINE
          echo "done."
        done

        echo -n "Starting freeside-selfservice-xmlrpcd: "
        freeside-selfservice-xmlrpcd $SELFSERVICE_USER
        echo "done."

        echo -n "Starting freeside-xmlrpcd: "
        freeside-xmlrpcd $API_USER
        echo "done."

#        echo -n "Starting freeside-jsonrpcd: "
#        freeside-jsonrpcd $API_USER
#        echo "done."

        echo -n "Starting freeside-queued: "
        #perl -MDBIx::Profile /usr/local/bin/freeside-queued $QUEUED_USER
        freeside-queued $QUEUED_USER
        #export NYTPROF="file=/usr/local/etc/freeside/nytprof.out"
        #PERL5OPT="-d:NYTProf" freeside-queued $QUEUED_USER
        echo "done."

        echo -n "Starting freeside-sqlradius-radacctd: "
        freeside-sqlradius-radacctd $QUEUED_USER
        echo "done."

        echo -n "Starting freeside-prepaidd: "
        freeside-prepaidd $QUEUED_USER
        echo "done."

        echo -n "Starting freeside-cdrrewrited: "
        freeside-cdrrewrited $QUEUED_USER
        echo "done."

        echo -n "Starting freeside-cdrd: "
        freeside-cdrd $QUEUED_USER
        echo "done."

        echo -n "Starting freeside-cdrrated: "
        freeside-cdrrated $QUEUED_USER
        echo "done."

        echo -n "Starting freeside-pingd: "
        freeside-pingd $QUEUED_USER
        echo "done."

        if [ -e /usr/local/bin/torrus ]; then
          echo -n "Starting torrus collector: "
          /usr/local/bin/torrus collector --tree=main
          echo "done."
        fi

        echo -n "Starting freeside-torrus-srvderive: "
        freeside-torrus-srvderive $QUEUED_USER
        echo "done."

        if [ -e /opt/rt3/etc/RT_SiteConfig.pm.ORIG_WEBDEMO_HACK ]; then
          ip=`/sbin/ifconfig $IF | grep 'inet addr:' | cut -d: -f2- | cut -d' ' -f1`
          cp /opt/rt3/etc/RT_SiteConfig.pm.ORIG_WEBDEMO_HACK /opt/rt3/etc/RT_SiteConfig.pm
          perl -pi -e "s/localhost/$ip/" /opt/rt3/etc/RT_SiteConfig.pm
        fi

        ;;
  stop)
        # Stop daemons.
        echo -n "Stopping freeside-queued: "
        [ -e /var/run/freeside-queued.pid ] && kill `cat /var/run/freeside-queued.pid`
        #and
        sleep 2;
        killall freeside-queued
        echo "done."

        if [ -e /var/run/freeside-sqlradius-radacctd.pid ]; then
          echo -n "Stopping freeside-sqlradius-radacctd: "
          kill `cat /var/run/freeside-sqlradius-radacctd.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside-prepaidd.pid ]; then
          echo -n "Stopping freeside-prepaidd: "
          kill `cat /var/run/freeside-prepaidd.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside-cdrd.pid ]; then
          echo -n "Stopping freeside-cdrd: "
          kill `cat /var/run/freeside-cdrd.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside-cdrrewrited.pid ]; then
          echo -n "Stopping freeside-cdrrewrited: "
          kill `cat /var/run/freeside-cdrrewrited.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside-cdrrated.pid ]; then
          echo -n "Stopping freeside-cdrrated: "
          kill `cat /var/run/freeside-cdrrated.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside-pingd.pid ]; then
          echo -n "Stopping freeside-pingd: "
          kill `cat /var/run/freeside-pingd.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside/torrus-srvderive.pid ]; then
          echo -n "Stopping freeside-torrus-srvderive: "
          kill `cat /var/run/freeside/torrus-srvderive.pid`
          echo "done."
        fi

        if [ -e /var/run/torrus/collector.main_?.pid ]; then
          echo -n "Stopping torrus collector: "
          kill `cat /var/run/torrus/collector.main_?.pid`
          echo "done."
        fi

        if [ -e /var/run/freeside/xmlrpcd.pid ]; then
          echo -n "Stopping freeside-xmlrpcd: "
          kill `cat /var/run/freeside/xmlrpcd.pid`
          echo "done."
        fi

#        if [ -e /var/run/freeside/jsonrpcd.pid ]; then
#          echo -n "Stopping freeside-jsonrpcd: "
#          kill `cat /var/run/freeside/jsonrpcd.pid`
#          echo "done."
#        fi

        if [ -e /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid ]
        then
          echo -n "Stopping (old) freeside-selfservice-server: "
          kill `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid`
          sleep 
          rm /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid
          echo "done."
        fi

        if [ -z "$SELFSERVICE_MACHINES" ]; then SELFSERVICE_MACHINES='localhost'; fi
        for MACHINE in $SELFSERVICE_MACHINES; do
          if [ -e /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid ]
          then
            echo -n "Stopping freeside-selfservice-server to $MACHINE"
            kill `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid`
            howlong=10
            while [ $howlong -gt 0 ] && kill -0 `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid` 2>/dev/null; do
              echo -n '.'
              sleep 1
              howlong=$(( $howlong - 1 ))
              if [ $howlong -eq 0 ]; then
                echo -n 'forcefully.'
                kill -9 `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid`
              fi
            done
            echo "done."
            rm /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid
          fi
        done

        if [ -e /var/run/freeside/selfservice-xmlrpcd.pid ]; then
          echo -n "Stopping freeside-selfservice-xmlrpcd: "
          kill `cat /var/run/freeside/selfservice-xmlrpcd.pid`
          echo "done."
        fi

        ;;

  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: freeside {start|stop|restart}"
        exit 1
esac

exit 0

