#!/bin/sh PATH=/usr/local/etc/:/usr/local/bin/:/afs/ece/support/bin/:/1/OV/bin/:$PATH # testing #echo user: `whoami` #echo group: `id -g -n` # defaults CURLOGFILE=/1/OV/log/ece-log CURLOGLOCKFILE=$CURLOGFILE.lock TOTLOGFILE=/1/OV/log/ece-log-total TOTLOGLOCKFILE=$TOTLOGFILE.lock TMPFILE=/tmp/snmp.tmp.$$ HOSTLISTFILE=/1/OV/ecehosts HOSTDB=/usr/support/named/host.db ERRORLOGFILE=/1/OV/log/snmpmgr-errors ERRORLOGLOCKFILE=$ERRORLOGFILE.lock # Variable declarations TYPE=$1 FULLHOST=$2 HOST=`echo $FULLHOST | sed 's/\.[^.]*\.ucdavis\.edu//'` SNMPGETOUT="" # pick only ece/cipic machines HOSTEXIT=0 case "$FULLHOST" in *.ece.ucdavis.edu) HOSTEXIT=1 ;; *.eecs.ucdavis.edu) HOSTEXIT=1 ;; *.cipic.ucdavis.edu) HOSTEXIT=1 ;; esac if [ $HOSTEXIT = 0 ]; then exit 0 fi # Log event echo "`date`\t$1|$2|$3|$4" >> /1/OV/log/trapnotif.log # function declairations total_log() { # Generate the Total Log File: all events if [ "$TYPE" = "up" ]; then PROC="up" fi lockfile $TOTLOGLOCKFILE echo "$HOST@$PROC@$ERROR@(`date +'%m/%d %H:%M'`)" | awk -F @ '{ printf("%-8.8s %-12.12s %-42.42s %-13.13s\n",$1,$2,$3,$4);}' >> $TOTLOGFILE rm -f $TOTLOGLOCKFILE } log_error() { # generate CURLOGFILE message (if one doesn't exist all ready) if [ `egrep "$HOST[ ]*$PROC" $CURLOGFILE | wc -l` = 0 ]; then lockfile $CURLOGLOCKFILE cp $CURLOGFILE $TMPFILE echo "$HOST@$PROC@$ERROR@(`date +'%m/%d %H:%M'`)" | awk -F @ '{ printf("%-8.8s %-12.12s %-42.42s %-13.13s\n",$1,$2,$3,$4);}' >> $TMPFILE sort $TMPFILE > $CURLOGFILE rm -f $TMPFILE $CURLOGLOCKFILE total_log fi } unlog_error() { # remove CURLOGFILE message lockfile $CURLOGLOCKFILE egrep -v "$HOST[ ]*$PROC" $CURLOGFILE > $TMPFILE mv -f $TMPFILE $CURLOGFILE rm -f $CURLOGLOCKFILE total_log } do_snmp_get() { SNMPGETOUT=`/usr/local/etc/snmpget -t 3 -r 5 $1 ecemgr eceagent ececontext $2 | sed 's/^.*= *"\(.*\)".*/\1/'` if [ "$SNMPGETOUT" = "No Response from $1" ]; then lockfile $ERRORLOGLOCKFILE echo "$1 $2" >> $ERRORLOGFILE rm -f $ERRORLOGLOCKFILE exit 1 fi } # Begin Main # First deal with up/down events if [ $TYPE = "down" -o $TYPE = "up" ]; then # Check to see if it is a unix host egrep "^$HOST$" $HOSTLISTFILE > /dev/null 2>&1 if [ $? = 1 ]; then exit 0 fi PROC="down" if [ $TYPE = "down" ]; then # Host down notice ERROR="$HOST is down" if [ `egrep "^$HOST:" $HOSTDB | wc -l` != 0 ]; then su - bin << ++ mark-down $HOST ++ log_error fi else # Host up notice ERROR="$HOST is up" if [ `egrep "^$HOST:" $HOSTDB | wc -l` != 0 ]; then su - bin << ++ mark-up $HOST ++ unlog_error fi fi exit 0 fi # More Variable declairations for ece-snmpd events MIBERRFLAG="$4" MIBLOC=`echo $MIBERRFLAG | sed 's/\.[^.]*$//'` ERRTABLENO="$3" MIBPROC=$MIBLOC.2.$ERRTABLENO MIBERRMSG=$MIBLOC.101.$ERRTABLENO do_snmp_get $FULLHOST $MIBPROC PROC=$SNMPGETOUT if [ "$PROC" = "" ]; then PROC="traperr" fi # Type determination (error or normal) and ERROR msg setting if [ $TYPE = "err" ]; then # The problem is an error do_snmp_get $FULLHOST $MIBERRMSG ERROR=$SNMPGETOUT if [ "$ERROR" = "" ]; then ERROR="Error MSG disappeared." total_log else log_error fi else # A problem has gone away ERROR="$PROC Returned to normal" unlog_error fi # # Generate a mail message to 'prog' # # Actually Don't exit 0 /bin/cat << ++ | /usr/lib/sendmail hardaker To: hardaker From: $HOST Snmp: $HOST Subject: $ERROR Folder: snmp Host: $FULLHOST Watch Name: $PROC (# $ERRTABLENO) Msg: $ERROR (debugging stuff below) args: $* $1:$2:$3:$4 ++