
#!/bin/sh
# File  : mail-filer-status.sh
# By    : Maarten.DeBoer@Atos.net, 180323
# Subject       : A script to get some status info & mail it to the status-site
#(0.2),180326	: Add RCFILE. Mod MAILTO
#(0.3),180326	: Added VFILERs, CIFS
PGM="`basename $0|cut -d\. -f1`"
VER="0.3"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
FILERS="${HOME}/etc/filers"
SSH="/usr/bin/ssh -n"
#MAILTO="maarten.deboer@atos.net nl19471@nlxmss04.bcklan.ao-srv.com"
MAILTO="mdrglob@msssyscol01.bcklan.ao-srv.com"
HOSTNAME="`hostname | cut -d\. -f1`"
FILTER="[?]*"
RCFILE="${HOME}/etc/${PGM}.rc"
USAGEFILE="${HOME}/etc/${PGM}.usage"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -e          : set Etc/filer_default-file (${FILERS})"
  echo "    -f          : filter Filername (${FILTER})"
  echo "    --mailto    : send MAILTO (${MAILTO})"
  echo "    -h | --help : this help"
  echo "    -V          : Version"
  echo "    -x          : set -x"
}
# Check options
while [ ${#} -gt 0 ]
  do
  case ${1} in
    -e) FILERS=${2}; shift ;;
    -f) FILTER=$2; shift ;;
    -h | --help) USAGE; exit 1 ;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    -m | --mail) MAIL=1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

if [ ! -f ${FILERS} ]; then
  echo "`date` ${PGM}: No etc-file ${ETC} found. Exiting ..."|tee -a ${LOG}
  exit 2
fi

echo "`date` ${PGM} v${VER} started (will mail to ${MAILTO})"|tee -a ${LOG}
touch ${TMP}

if [ -f ${RCFILE} ]; then
  echo "  Found RCfile (${RCFILE}). Using it"|tee -a ${LOG}
  . ${RCFILE}
fi

for FILER in `cat ${FILERS}|grep -v \^#|grep ${FILTER}`
do
  echo "${FILER} ..."
  ping -c 1 ${FILER}
  EC=${?}
  if [ ${EC} -eq 0 ]; then
    echo "PGM=${PGM} v${VER}" >> ${TMP}
    echo "HOSTNAME=`${SSH} ${FILER} hostname`" >> ${TMP}
    echo "DATISTRUTC=`date +%Y%m%d%H%M%S --utc`" >> ${TMP}
    echo "UPTIME=`${SSH} ${FILER} uptime`" >> ${TMP}
    echo "VERSION=`${SSH} ${FILER} version|cut -d\: -f1`" >> ${TMP}
    echo "USAGE=`grep ${FILER} ${USAGEFILE}|grep -v ^#|awk -F\; '{print $2}'`" >> ${TMP}
    echo "CF-STATUS=`${SSH} ${FILER} cf status|head -1`" >> ${TMP}
    VFILERCNT=0
    CIFSCNTTTL=0
    ${SSH} ${FILER} vfiler status|grep running|grep -v vfiler0|awk '{print $1}'|while read VFILER
    do
      VFILERCNT=`expr ${VFILERCNT} + 1`
      echo "${FILER}/${VFILER} (${VFILERCNT}) ..."
      CIFSCNT=`${SSH} ${FILER} vfiler run ${VFILER} cifs shares| grep vol|wc -l`
      CIFSCNTTTL=`expr ${CIFSCNTTTL} + ${CIFSCNT}`

      echo "CIFSCNTTTL=${CIFSCNTTTL}" > ${TMP}.2
      echo "VFILERCNT=${VFILERCNT}" >> ${TMP}.2
    done  # VFILER 
# Get the VAR-info from out of the loop
    VFILERCNT=`cat ${TMP}.2|grep VFILERCNT|cut -d\= -f2`
    CIFSCNTTTL=`cat ${TMP}.2|grep CIFSCNTTTL|cut -d\= -f2`
    rm ${TMP}.2
    echo "VFILERCNT=${VFILERCNT}" >> ${TMP}
    echo "SMBSHARECNT=${CIFSCNTTTL}" >> ${TMP}

    echo "COMMENT=" >> ${TMP}

    cat ${TMP} | mailx -s "filer-status:${FILER}" "${MAILTO}"
    echo "`date` mailed ${FILER} status to ${MAILTO}"|tee -a ${LOG}
    cp /dev/null ${TMP}
  else
    echo "PGM=${PGM} v${VER}" >> ${TMP}
    echo "HOSTNAME=`${SSH} ${FILER} hostname`" >> ${TMP}
    echo "DATISTRUTC=`date +%Y%m%d%H%M%S --utc`" >> ${TMP}
    echo "COMMENT=No connection (no ping) to filer?"
  fi  # EC=0

done  # FILER

rm ${TMP}
echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

