# !/bin/ksh                                                                 
#===========================================================================
# Author     :  Jan Oosterveen (ICL)  (oosterve@planet.nl)
# Titel      :  bb-diskchk.sh                                                 
# Date       :  26 April 2000                                         
# Version    :  1.1                                                         
# Description:  Check for stale logical volumes.
#               Also a test is performed to check 
#               a volumegroup for unavailable disks. 
#               Written for HP-UX.
#
# updates    : By Antoine Adams (antoine@nebula.nl)
#	       version 1.0 had the authors email addres hardcoded in it.
#	       Look in the script for <changeme@foo.bar> and replace it with
#	       the right email address
#===========================================================================
#
# Debugging
#
if test "$DEBUG" = "Y"
then
	echo "*** BEGIN: DSKCHK TEST ***"
fi

#
# Check that we have a basic environment setup
#
if test "$BBHOME" = ""
then
        echo ERROR: BBHOME variable not set
        exit 1  
fi

# Initialize variables
#
TMPDISKCHK=$BBTMP/BB-DISKCHK.TMP ; export TMPDISKCHK
EMAIL=/tmp/diskchk.tmp ; export EMAIL
COLOR="green"; export COLOR
LINE=""; export LINE
STAERR="N"; export STAERR
VGERR="N" ; export VGERR
DATELINE=`date +%d/%m/%Y` ; export  DATELINE
HOSTNAME=`hostname` ; export HOSTNAME
TIMELINE=`date +%H:%M:%S` ; export TIMELINE

#
$RM -f ${TMPDISKCHK}
$RM -f ${EMAIL}
echo > ${TMPDISKCHK}
chmod 600 ${TMPDISKCHK}

for lvol in `${DF} | awk '{ print $1 }' | grep lvol`
do
        count=`/usr/sbin/lvdisplay -v $lvol | grep stale | wc -l`
        if [ $count != 0 ]
          then
           STAERR="Y" ; export STAERR
           echo "$lvol : $count stale entries" >>  ${TMPDISKCHK}
        fi
done

echo "                                     " >> ${TMPDISKCHK}

for vg in `ls -1d /dev/vg* | cut -d"/" -f3`
do
        active=`$DF | grep $vg | wc -l`
        if [ $active != 0 ]
          then
            vgcount=`/usr/sbin/vgdisplay -v $vg | grep unavailable | wc -l 2> /dev/null`
            if [ $vgcount != 0 ]
              then
                VGERR="Y" ; export VGERR  
                echo "$vg : $vgcount disks unavailable" >> ${TMPDISKCHK}
            fi
        fi
done

#
#
if [ "$STAERR" = "Y" -a "$VGERR" = "Y" ]
then
        LINE="Stale error(s) and unavailable disk(s) found :" ; export LINE
        COLOR="red" ; export COLOR
else
    if [ "$STAERR" = "Y" ]
    then
           LINE="Stale error(s) found :" ; export LINE 
      
           COLOR="red" ; export COLOR 
    else
         if [ "$VGERR"  = "Y" ]
         then 
              LINE="Unavailable disk(s) found :" ; export LINE
              COLOR="red" ; export COLOR
         else  
# If there were no errors, then put a friendly message out
	LINE="No errors detected !"; export LINE
        fi
    fi
fi

#
# Send a status update to the big brother display unit
#
$BB $BBDISP "status $MACHINE.diskchk $COLOR `date` $LINE `cat ${TMPDISKCHK}`"

#
# If there is a fatal error, then call the pager
#
if [ "$COLOR" = "red" ]
then
# compose an e-mail message for unix-support
        echo "Subject : Disk error(s) " > ${EMAIL}
        echo "${HOSTNAME} - ${DATELINE} - ${TIMELINE}" >> ${EMAIL}
        cat ${TMPDISKCHK} >> ${EMAIL}
#
#	Change the email address on this line
#        cat ${EMAIL} | /usr/sbin/sendmail imo.unixsupport@eur.gep.ge.com

	cat ${EMAIL} | /usr/sbin/sendmail <changeme@foo.bar>


# if pager-option installed send out a pager message 
        if test "$DFPAGE" = "Y"         # CALL THE PAGER
        then
                $BB $BBPAGE "page ${MACHIP} $LINE"
        fi
fi

#
# Debugging
#
if test "$DEBUG" = "Y"
then
	echo "COLOR = ${COLOR}"
	echo "LINE  = ${LINE}"
	echo "*** END: DSKCHK TEST ***"   
fi

#
# END OF bb-dskchk.sh
#
