| #!/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 |
| |
| ++ |
| |