#!/bin/sh
#
# OS-independent portion of DataReactor Core control
#
# $Id: proxctl,v 1.1.1.1 2003/02/21 16:47:37 lmwang Exp $
#

PROXDIR=/usr/local/prox
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/local/prox

cd ${PROXDIR}

case "$1" in
################ START THE CACHE ################
  start)
#
# Clean out old redirector information
#

    rm -f /tmp/redirdata.*

#
# Build old-style access control filters
#

    if [ -d ${PROXDIR}/accessctl ]; then
        ( cd ${PROXDIR}/accessctl ; # for Makefile
          make > /dev/null 2>&1 )
    fi

#
# Build new-style access control filters
#

    if [ -d ${PROXDIR}/aclfilters ]; then
        ( cd ${PROXDIR}/aclfilters ; # for Makefile
          make > /dev/null 2>&1 )
    fi

#
# Start up local content controllers
#

    grep -q -i '^filteringMode.*xstop' ${PROXDIR}/etc/prox.conf &&
	[ -d /usr/local/shadow ] &&
	( ( [ x`uname` = xFreeBSD ] && kldload linux >/dev/null 2>&1;
	  cd /usr/local/shadow;
	  bin/xstopd -f etc/shadow.conf ) & ) &&
	( /usr/local/bin/xstopDBUpdate -f -F >/dev/null 2>&1 & )

#
# Do some OS-specific tweaking that must be repeated on restarts
#
	  [ x`uname` = xFreeBSD ] && ulimit -n `sysctl -n kern.maxfilesperproc`

	  [ x`uname` = xLinux ] && ulimit -n `sysctl -n fs.file-max`

#
# Start up the cache itself
#

    if [ -x ${PROXDIR}/prox -a -f ${PROXDIR}/etc/prox.conf ]; then
        ( cd ${PROXDIR} ; # for dns_slave
          ${PROXDIR}/prox etc/prox.conf ) ;
	[ ${PROXCTL_RESTART} ] || echo -n ' prox'
    else
	exit 0
    fi

#
# Start up the Web-based interface
#

    if [ -r /www/cert.pem ]; then
	port=8443
	secure=-S
    else
	port=8080
	secure=
    fi

    if grep ^port ${PROXDIR}/etc/prox.conf | tail -1 | grep -q $port; then
	port=`expr $port + 1`
    fi

    if [ -z ${PROXCTL_RESTART} ] && \
	[ -x /usr/local/bin/mini_httpd -a -d /www ]; then
        ( cd /www ;
          /usr/local/bin/mini_httpd -p $port $secure -c '*.cgi' ) ;
	echo -n ' mini_httpd'
    fi

#
# Now start MRTG after fixing up configuration file
#

    set -- `grep -i ^snmpPort ${PROXDIR}/etc/prox.conf | tail -1`

    snmpPort=${2:-161}

    set -- `grep -i background: /www/proxmgr.css | head -1 | \
	    awk '{print $2}' | awk -F\; '{print $1}'`

    background=${1:-\#ffffff}

    cp ${PROXDIR}/etc/datareactor.cfg \
	${PROXDIR}/etc/datareactor.cfg_bak >/dev/null 2>&1 && \
    sed -e "/^Target/s/public@127.0.0.1:.*/public@127.0.0.1:${snmpPort}/" \
	-e "/^Background/s/: \#....../: ${background}/" \
	< ${PROXDIR}/etc/datareactor.cfg_bak \
	> ${PROXDIR}/etc/datareactor.cfg
    rm -f ${PROXDIR}/etc/datareactor.pid

#
# Start MRTG daemon process to get cache statistics; first sleep for startup
#

    if [ -z ${PROXCTL_RESTART} ]; then
	sleeptime=30;
    else
	sleeptime=3;
    fi

    (sleep ${sleeptime}; \
	mrtg ${PROXDIR}/etc/datareactor.cfg >/dev/null 2>&1) &
    
    ;; # End this case
################ END OF CACHE STARTING ################

################ STOP THE CACHE ################
  stop)

#
# First, kill the nanny and MRTG scripts
#
    (kill `cat /usr/local/prox/etc/nanny.pid`) >/dev/null 2>&1 # nanny
    (kill `cat /usr/local/prox/etc/datareactor.pid`) >/dev/null 2>&1 # MRTG
    (kill `ps ax | egrep '(mrtg|nanny)' | grep -v grep | \
	    awk '{print $1}'`) >/dev/null 2>&1

#
# Now, kill the mini_httpd and actual proxy
#
    [ ${PROXCTL_RESTART} ] || killall mini_httpd
    killall prox

#
# Kill off local controllers
#

    killall xstopd

#
# Get rid of the proxy PID file
#
    rm -f /www/prox.pid
    ;; # End this case
################ END OF CACHE STOPPING ################

################ RESTART THE CACHE ################
  restart)
    PROXCTL_RESTART=yes
    export PROXCTL_RESTART    
    $0 stop;
    $0 start
    ;; # End this case
################ END OF CACHE RESTARTING ################

################ OTHER CASES ################
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
################ END OF OTHER CASES ################
esac

exit 0
