blob: d2158b45eb3ba066bc2f986b5c7d18b33f591d0e [file] [log] [blame]
#!/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
++