#!/usr/bin/bash
#< Script to monitor iostat counters for a specific disk 

CUT="/usr/bin/cut"
ECHO="/usr/bin/echo"
GREP="/bin/grep"
HOSTNAME="/bin/hostname"
IOSTAT="/usr/bin/iostat"
MV="/usr/bin/mv"
SED="/usr/bin/sed"

DISK="c1t0d0"
TMPROOT="/var/tmp"

TMPFILE="${TMPROOT}/iostat-${DISK}.current"
OLDFILE="${TMPROOT}/iostat-${DISK}.previous"

exec 3>&1
exec 1> ${TMPFILE}
${IOSTAT} -En ${DISK} | while read LINE; do
   case "${LINE}" in
      ${DISK}* ) 
         SOFT_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Soft Errors: \([0-9][0-9]*\) .*$/\1/' )
         ${ECHO} "SOFT_ERRORS:${SOFT_ERRORS}"
         HARD_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Hard Errors: \([0-9][0-9]*\) .*$/\1/' )
         ${ECHO} "HARD_ERRORS:${HARD_ERRORS}"
         TRAN_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Transport Errors: \([0-9][0-9]*\)$/\1/' )
         ${ECHO} "TRAN_ERRORS:${TRAN_ERRORS}"
         ;;
      Media* ) 
         MEDIA_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Media Error: \([0-9][0-9]*\).*$/\1/' )
         ${ECHO} "MEDIA_ERRORS:${MEDIA_ERRORS}"
         DEV_NOT_READY=$( ${ECHO} "${LINE}" | ${SED} 's/.*Device Not Ready: \([0-9][0-9]*\).*$/\1/' )
         ${ECHO} "DEV_NOT_READY:${DEV_NOT_READY}"
         NO_DEVICE=$( ${ECHO} "${LINE}" | ${SED} 's/.*No Device: \([0-9][0-9]*\).*$/\1/' )
         ${ECHO} "NO_DEVICE:${NO_DEVICE}"
         RECOVERABLE=$( ${ECHO} "${LINE}" | ${SED} 's/.*Recoverable: \([0-9][0-9]*\)$/\1/' )
         ${ECHO} "RECOVERABLE:${RECOVERABLE}"
         ;;     
      Illegal* ) 
         ILLEGAL_REQ=$( ${ECHO} "${LINE}" | ${SED} 's/.*Illegal Request: \([0-9][0-9]*\).*$/\1/' )
         ${ECHO} "ILLEGAL_REQ:${ILLEGAL_REQ}"
         PRED_FAIL=$( ${ECHO} "${LINE}" | ${SED} 's/.*Failure Analysis: \([0-9][0-9]*\)$/\1/' )
         ${ECHO} "PRED_FAIL:${PRED_FAIL}"
         ;;     
   esac
done
exec 1>&3

if [ -e "${OLDFILE}" ]; then
   while read LINE; do
      TYPE=$( ${ECHO} "${LINE}" | ${CUT} -d: -f1 ) 
      VALUE=$( ${ECHO} "${LINE}" | ${CUT} -d: -f2 ) 
      OLDVALUE=$( ${GREP} "^${TYPE}:" ${OLDFILE} | ${CUT} -d: -f2 )
      if [ "${VALUE}" -gt "${OLDVALUE}" ]; then
         ${ECHO} "WARNING: ${TYPE} has increased from ${OLDVALUE} to ${VALUE} on $( ${HOSTNAME} ):${DISK}"
      fi      
   done < ${TMPFILE}
fi

${MV} ${TMPFILE} ${OLDFILE}

exit 0