Sophie

Sophie

distrib > Mandriva > 10.0 > i586 > by-pkgid > e21f673f927c44bdef0618c821d4f6b5 > files > 66

ucd-snmp-4.2.3-8.1.100mdk.i586.rpm

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

++