
#!/bin/ksh
# File	: chk_snapvaults.ksh
# By	: Orig = Ronald ten Broeke. Mods: Maarten.deBoer@AtosOrigin.com, 090929
# Subject: RtB: check snapvault LAG on a snapvault filer
#Mod(0.2)

PGM="`basename $0|cut -d\. -f1`"
VERSION="0.2"
TMP="/tmp/${PGM}.$$"
HOSTNAME="`hostname`"
MAILFILE="${TMP}.mailfile"
SNAPCHECK="${TMP}.snapcheck"
MAILTO="gmnl-msscentral@atosorigin.com"
MAILTO="maarten.deboer@atosorigin.com"
MAIL=""
# In Hrs
WARNINGLAG=25

FILER=
VFILER=nlnafvslb01


#
# Check LAG of regular filers
#
CheckLag()
{
ssh ${FILER} -n snapvault status | grep -v 'Uninitialized'|grep ':' >> $SNAPCHECK
ssh ${FILER} -n snapvault status | grep 'restart checkpoint'|grep ':' >> $SNAPCHECK

cat ${SNAPCHECK} | while read LINE
do
  # get LAG in HOURs
  LAG=`echo $LINE |awk '{print $4}'`
  HOUR=`echo $LAG|cut -d : -f1`

  # destination and source qtree
  SRC_QTREE=`echo $LINE | awk '{print $1}'`
  DEST_QTREE=`echo $LINE | awk '{print $2}'`

  STATE=`echo $LINE | awk '{print $3}'`
  STATUS=`echo $LINE | awk '{print $5}'`

  # remove leading 0 in two digit field
  ZERO=`echo $HOUR|cut -c1`
  if [ "$ZERO" = "0" ]; then
    HOUR=`echo $HOUR|cut -c2`
  fi

#compare LAG to threshold
  if test "$HOUR" = "-" || test "$HOUR" -gt ${WARNINGLAG}; then
    reason=`ssh $FILER -n snapvault status -l $DEST_QTREE|grep 'Current Transfer Error:'|cut -d: -f2`
    printf "$DEST_QTREE \t Lag: $LAG \t Error:$REASON \t Status: $STATUS \n" |tee -a ${MAILFILE}
  fi
done
}

#
# Check LAG of virtual filers
#
CheckVLag()
{
case ${VFILER} in
  nlnafvslb01)	RFILER=nlnaf02 ;;
  *)		echo "Invalid vfiler ${VFILER}" >>$MAILFILE ;;
esac

ssh ${RFILER} -n vfiler run ${VFILER} snapvault status|grep -v 'Uninitialized'|grep ':' >> $SNAPCHECK
ssh ${RFILER} -n vfiler run ${VFILER} snapvault status|grep 'restart checkpoint'|grep ':' >> $SNAPCHECK

cat ${SNAPCHECK} | while read LINE
do
  # get LAG in HOURs
  LAG=`echo $LINE |awk '{print $4}'`
  HOUR=`echo $LAG|cut -d : -f1`

  # destination and source qtree
  SRC_QTREE=`echo $LINE | awk '{print $1}'`
  DEST_QTREE=`echo $LINE | awk '{print $2}'`

  STATE=`echo $LINE | awk '{print $3}'`
  STATUS=`echo $LINE | awk '{print $5}'`

  # remove leading 0 in two digit field
  ZERO=`echo $HOUR|cut -c1`
  if [ "$ZERO" = "0" ]; then
    HOUR=`echo $HOUR|cut -c2`
  fi

#compare LAG to threshold
  if test "$HOUR" = "-" || test "$HOUR" -gt ${WARNINGLAG}; then
    REASON=`ssh ${RFILER} -n vfiler run ${VFILER} snapvault status -l $DEST_QTREE|grep 'Current Transfer Error:'|cut -d: -f2`
    printf "$DEST_QTREE \t Lag: $LAG \t Error:$REASON \t Status: $STATUS \n" |tee -a ${MAILFILE}
  fi
done
}


USAGE()
{
  echo "Usage: ${PGM} [-V] [-x] [-h] [--help] [-m] [--mail]"
  echo "  Version: ${VERSION}"
  echo "  options:"
  echo "    -f : for one Filer with <name> "
  echo "    -V : Version"
  echo "    -x : set -x"
  echo "    -h | --help   : this help"
  echo "    -m | --mail   : do send mail"
}
# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VERSION}"; exit 3 ;;
    -m | --mail) MAIL=1 ;;
    -x)  set -x ;;
    -f)
      # Get filername
      if [ "${2}" = "" ]; then
        echo "No filername given. Exiting ..."
        USAGE
        exit 2
      else
        FILER=${2}
        shift
      fi
      ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done


touch ${MAILFILE} ${SNAPCHECK}
echo "${PGM}: Checking SnapVaults of ${FILER} / ${VFILER} ..."

# If ${FILER} is empty
if [ -z ${FILER} ]; then
  break
else
  CheckLag
fi

if [ -z ${VFILER} ]; then
  break
else
  CheckVLag
fi

if [ ${MAIL} ] && [ -s ${MAILFILE} ]; then
  echo "Mailing to ${MAILTO} ... "
  mailx -s ":${HOSTNAME}: Snapvault threshold exceeded [${PGM} v${VERSION}]" ${MAILTO} < ${MAILFILE}
fi

rm ${SNAPCHECK} ${MAILFILE}

exit

