#!/bin/bash
# roma
#
# chkconfig: 2345 90 15
# description: roma - Cache Server main program.
# processname: roma
# pidfile: /var/run/roma.pid
# config: /opt/nec/roma/etc/roma.conf

# Source networking configuration.
#. /etc/sysconfig/network

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

# Check that networking is up.
#[ ${NETWORKING} = "no" ] && exit 0

# check if the squid conf file is present
#[ -f /opt/nec/catfish/catfish.dll ] || exit 0

POUNDLIC="/etc/opt/nec/wbmc/pound.lic"

case "$1" in
start)
    KERNEL_VERSION=`uname -r`
    DISKDUMP_KERNEL="NO"
    if [ $KERNEL_VERSION = "2.4.21-32.0.1.EL" ]; then
        DISKDUMP_KERNEL="YES"
        DUMPDIR="/var/crash"
    elif [ $KERNEL_VERSION = "2.4.21-47.ELsmp" ]; then
        DISKDUMP_KERNEL="YES"
        DUMPDIR="/var/crash"
    else
        . /etc/sysconfig/dump
        if [ !$DUMPDIR ]; then
            DUMPDIR="/var/log/vmdump"
        fi
    fi
    DATE=`/bin/date +%m%d%H%M`
    LOGDIR="/var/log/roma"
    DUMPCHECKFILE="/var/log/roma/dumpcheck.status"
    NO_OVERRIDE_DIE="/opt/nec/roma/etc/no_override_die"
    if [ $DISKDUMP_KERNEL = "YES" ]; then
        DUMPFILE_TEMPLATE="${DUMPDIR}/*/vmcore /vmcore"
        ANALYSIS_TEMPLATE="${DUMPDIR}/*/analysis /analysis"
    else
        DUMPFILE_TEMPLATE="${DUMPDIR}/[0-9]/dump.[0-9] /dump.[0-9]"
        ANALYSIS_TEMPLATE="${DUMPDIR}/[0-9]/analysis.[0-9] /analysis.[0-9]"
    fi
    DUMPFILE=`/bin/ls -t ${DUMPFILE_TEMPLATE} 2> /dev/null | /usr/bin/head -n 1`
    ANALYSISFILE=`/bin/ls -t ${ANALYSIS_TEMPLATE} 2> /dev/null | /usr/bin/head -n 1`

    if [ -f $DUMPCHECKFILE ]; then
        if [ $ANALYSISFILE ] && [ $ANALYSISFILE -nt $DUMPCHECKFILE ]; then
            DUMPDIR=${ANALYSISFILE%analysis*}
            FILENAME=${ANALYSISFILE##*/}
            cd $DUMPDIR
            /bin/tar czf $LOGDIR/analysis$DATE.tgz $FILENAME 2> /dev/null
            cd $OLDPWD
        fi

        if [ $DUMPFILE ] && [ $DUMPFILE -nt $DUMPCHECKFILE ]; then
            /bin/echo $DATE > $DUMPCHECKFILE
            /bin/touch $DUMPCHECKFILE
            if [ -f $NO_OVERRIDE_DIE ]; then
                /bin/rm -f $NO_OVERRIDE_DIE
            fi
            /usr/bin/reboot
        fi
    fi
    /bin/echo $DATE > $DUMPCHECKFILE
    /bin/touch $DUMPCHECKFILE

    echo 16384 > /proc/sys/fs/file-max
    echo 10240 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
    echo 5120  > /proc/sys/net/ipv4/neigh/default/gc_thresh2
    echo 1280  > /proc/sys/net/ipv4/neigh/default/gc_thresh1
    echo 0 > /proc/sys/kernel/core_uses_pid >& /var/tmp/roma_startup
    /bin/rm -f /core.* >& /var/tmp/roma_startup
    /bin/tar -czvlf /var/log/roma/roma_errs.tar.gz /var/log/roma/roma_err.* >& /var/tmp/roma_startup
    /sbin/insmod kc >& /var/tmp/roma_startup
    /sbin/insmod ip_wccp >& /var/tmp/roma_startup
    if [ -f $NO_OVERRIDE_DIE ]; then
        /bin/echo 0 > /proc/net/CacheBlast/param/override_die
    fi
    /bin/rm /var/tmp/roma.tmp
    /opt/nec/roma/bin/roma -k start
    while : ; do
      if [ -s /var/tmp/roma.tmp ]; then
        RETVAL=`head -1 /var/tmp/roma.tmp`
        if [ "$RETVAL" = "EOF" ]; then
            /opt/nec/roma/bin/watcher -k start
        fi
        break;
      fi
      sleep 1
    done
    if [ -f $POUNDLIC ]; then
        /sbin/service pound start
    fi
    ;;

stop)
    /opt/nec/roma/bin/watcher -k stop
    sleep 1
    /opt/nec/roma/bin/roma -k stop
    if [ -f $POUNDLIC ]; then
        /sbin/service pound stop
    fi
    ;;

restart)
    /opt/nec/roma/bin/watcher -k stop
    sleep 1
    /opt/nec/roma/bin/roma -k stop
    if [ -f $POUNDLIC ]; then
        /sbin/service pound stop
    fi
    /bin/rm /var/tmp/roma.tmp
    /opt/nec/roma/bin/roma -k start
    while : ; do
      if [ -s /var/tmp/roma.tmp ]; then
        RETVAL=`head -1 /var/tmp/roma.tmp`
        if [ "$RETVAL" = "EOF" ]; then
            /opt/nec/roma/bin/watcher -k start
        fi
        break;
      fi
      sleep 1
    done
    RETVAL=$?
    if [ -f $POUNDLIC ]; then
        /sbin/service pound start
    fi
    exit $RETVAL
    ;;

reload)
    killproc /opt/nec/roma/bin/roma -HUP
    exit $?
    ;;

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

exit 0
