#!/bin/sh
# File:       mf-start
# Version:    1.14
# Purpose:    Makes sure mail filter keeps running
#             (Called from the 'mail-filter' script)
# Written by: R.Butler <butlerra@sbu.ac.uk>
# Date:       06-Jun-2000
# Revised:    08-Mar-2001
#
# Copyright (C) 2001 South Bank University, London
# (Please see the full copyright notice in 'copyright.txt')

FILTER=$1
SOCKET=$2

MAX_FAILURES=10
MIN_UPTIME=30
BN_FILTER=`basename $FILTER`

# Check that the WORK_DIR variable has been exported
if [ -z "$WORK_DIR" ]
then
   echo " "
   echo "$0: Variable WORK_DIR is not defined"
   echo "To start the mail filter, please use the command:"
   echo "   mail-filter start"
   echo " "
   exit 3
fi
LOGFILE="$WORK_DIR/mail-filter.log"

FILTER_PID=`ps -ef | grep $FILTER \
           | grep -v $0 | grep -v 'grep' \
           | awk '{print $2}'`
if [ -n "$FILTER_PID" ]
then
   DATE=`date +"%d-%b-%Y %T"`
   echo "$DATE : Start; $BN_FILTER is already running; PID = $FILTER_PID" \
      >> $LOGFILE
   exit 2
fi

# If the filter was not shut down properly, the socket, if it is a  
# 'local' file, may still exist. 

SOCKET_TYPE=`echo $SOCKET | awk '{split($1,part,":"); print part[1]}'`
if [ "$SOCKET_TYPE" = "local" ]
then
   SOCKET_FILE=`echo $SOCKET | awk '{split($1,part,":"); print part[2]}'`
fi

FAIL_COUNT=0
while :
do
   DATE=`date +"%d-%b-%Y %T"`
   echo "$DATE : Starting $BN_FILTER; FAIL_COUNT = $FAIL_COUNT" \
      >> $LOGFILE
   START_TIME=`date '+%d%H%M%S'`

   if [ "$SOCKET_TYPE" = "local" ]
   then
      if [ -r $SOCKET_FILE ]
      then
         echo "$DATE : Removing old socket file $SOCKET_FILE" \
            >> $LOGFILE
         rm -f $SOCKET_FILE
      fi
   fi

   nohup $FILTER -p $SOCKET -d $WORK_DIR > /dev/null
   STOP_TIME=`date '+%d%H%M%S'`
   UPTIME=`expr $STOP_TIME - $START_TIME`
   if [ 0 -le $UPTIME -a $UPTIME -lt $MIN_UPTIME ]
   then
      FAIL_COUNT=`expr $FAIL_COUNT + 1`
   else
      FAIL_COUNT=0
   fi
   if [ $FAIL_COUNT -gt $MAX_FAILURES ]
   then
      DATE=`date +"%d-%b-%Y %T"`
      echo "$DATE : EXIT; $BN_FILTER failed more than $MAX_FAILURES times." \
         >> $LOGFILE
      exit 1
   fi
   sleep 10
done

