#!/bin/ksh # #NADDS Agent - http://nadds.drmadcow.net/ #CPU Load Detection Agent (Linux & Solaris) #Agent Author: Daryl Quenet #Date: 2003-May-28 (V2.1) . /usr/local/bcnu/etc/bcnuenv . $BCNUHOME/agent/agent_head ERRFILE=${BCNUTMP}/${BCNUAGENT}.err OUTFILE=${BCNUTMP}/${BCNUAGENT}.out MSGFILE=${BCNUTMP}/${BCNUAGENT}.msg TMPFILE=${BCNUTMP}/${BCNUAGENT}.tmp ERR=0 WARN=0 WARNMSG="" ERRMSG="" rm -f $OUTFILE $MSGFILE $TMPFILE $ERRFILE OS=`uname` param=$BCNUPARAM bcnu_param COUNT=$p2 INTERVAL=$p1 AVEWARNING=$p3 AVEERROR=$p4 printf "CPU Usuage Information:\n\n" >$OUTFILE set >/tmp/sysenv if [[ $OS = "SunOS" ]]; then NUMCPUS=`mpstat|sed '1d'|wc|awk '{print $1}'` printf "Numbers of CPUS: $NUMCPUS\n\n" >>$OUTFILE (( COUNT=COUNT + 1 )) mpstat $INTERVAL $COUNT|sed '1,5d'|awk '{print $1" "$16}'|grep [0-9] >$TMPFILE (( COUNT=COUNT - 1 )) I=0 while (( I < NUMCPUS )) do CPU[I]=0 (( I=I + 1 )) done cat $TMPFILE| while read CPUNUM IDLEPER do (( CPU[$CPUNUM]=${CPU[$CPUNUM]} + IDLEPER )) done I=0 while (( I < NUMCPUS )) do (( CPU[I]=( 100 * $COUNT - ${CPU[I]} ) / $COUNT )) if [[ ${CPU[I]} < AVEWARNING ]]; then echo "ok - CPU $I average usuage was ${CPU[I]} percent." >>$MSGFILE elif [[ ${CPU[I]} < AVEERROR ]]; then WARNMSG="warning - CPU $I average usuage was ${CPU[I]} percent." WARN=1 echo $WARNMSG >>$ERRFILE else ERRMSG="error - CPU $I average usuage was ${CPU[I]} percent." ERR=1 echo $ERRMSG >>$ERRFILE fi (( I=I + 1 )) done if [[ -f $MSGFILE ]]; then if [[ -f $ERRFILE ]]; then sort_by_severity '-k 1' $ERRFILE >>$OUTFILE fi cat $MSGFILE >>$OUTFILE fi if [[ $ERR = 1 ]]; then BCNUMSG="$BCNU -m '$ERRMSG' -f $OUTFILE -e $BCNU_ERR -t $BCNUHOSTTYPE $BCNUHOST" bcnu_err_send elif [ $WARN = 1 ]]; then BCNUMSG="$BCNU -m '$WARNMSG' -f $OUTFILE -e $BCNU_WARN -t $BCNUHOSTTYPE $BCNUHOST" bcnu_warn_send else BCNUMSG="$BCNU -m 'All CPUs operating under normal conditions' -f $OUTFILE -e $BCNU_OK -t $BCNUHOSTTYPE $BCNUHOST" bcnu_send fi elif [[ $OS = "Linux" ]]; then (( COUNT=COUNT + 1 )) iostat -c $INTERVAL $COUNT|sed '3,5d' >$TMPFILE (( COUNT=COUNT - 1 )) IDLETOTAL=`cat $TMPFILE|sed '/\//d'|awk 'NF==4{print $4} NF==5{print $5}'|grep '[0-9]'|xargs|sed 's/ /+/g'|bc -l` TOTAL=`echo 100*$COUNT-$IDLETOTAL|bc -l` AVECPU=`echo $TOTAL / $COUNT|bc -l|awk '{printf "%3.2f", $1}'` CPULEV=`echo $AVECPU|sed 's/\.[0-9]*//'` printf "Average CPU usuage at $AVECPU percent\n" >>$OUTFILE printf "CPU usuage sampled every $INTERVAL seconds for $COUNT iterations.\n\n" >>$OUTFILE cat $TMPFILE >>$OUTFILE if [[ $CPULEV -ge $AVEERROR ]]; then BCNUMSG="$BCNU -m 'error - cpu average usage at $AVECPU percent' -f $OUTFILE -e $BCNU_ERR -t $BCNUHOSTTYPE $BCNUHOST" bcnu_err_send elif [[ $CPULEV -ge $AVEWARNING ]]; then BCNUMSG="$BCNU -m 'warning - cpu average usuage at $AVECPU percent' -f $OUTFILE -e $BCNU_WARN -t $BCNUHOSTTYPE $BCNUHOST" bcnu_warn_send else BCNUMSG="$BCNU -m 'ok - cpu average usuage at $AVECPU percent' -f $OUTFILE -e $BCNU_OK -t $BCNUHOSTTYPE $BCNUHOST" bcnu_send fi else echo "Failed" > /tmp/log fi