
#!/bin/sh
# File	: get_filer_status.sh
# By	: Maarten.deBoer@Atos.net, 121217
# Subject	: Script to get the (last) status of the filers
PGM="`basename ${0}|cut -d\. -f1`"
VERSION="0.1"
TMP="/tmp/${PGM}.$$"
DATUM=`date '+%m-%d-%Y'`
DATADIR=${HOME}/data/out
MAILTO="maarten.deboer@atos.net"
SSH="/usr/bin/ssh -n"
FILERS="${HOME}/etc/filers"
HOSTNAME="`hostname|cut -d\. -f1`"
MAXLOGSIZE=1024   # In K's
DATE=`date '+%Y-%m-%d'`
LOG="${HOME}/log/${PGM}.log"
FILTER="[1234567890]"
TOLL=""
MAIL=""
PING="/bin/ping"
WDHRMIN="`date '+%d-%H%M'`"

FILE="FSOD_${HOSTNAME}_${WDHRMIN}.asc"

# Functions
USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VERSION}"
  echo "  options     :"
  echo "    -e|--etc  : Etc/filers-file (${FILERS})"
  echo "    -f        : Filter filername (${FILTER})"
  echo "    -h|--help : this Help"
  echo "    -m|--mail : do send Mail"
  echo "    --mailto  : change MAILTO address & do send mail (${MAILTO})"
  echo "    --toll    : send TO LiveLink (via private mailbox-rule)"
  echo "    -x        : set -x"
  echo "    -V        : show Version"
}
## MAIN
# Check options
if [ ${#} -eq 0 ]; then
  echo "No option(s) given. So not to know what to do. Exiting..."; echo; USAGE;
  exit 1
fi
while [ ${#} -ge 1 ]
  do
  case ${1} in
    -e | --etc) FILERS=${2}; shift ;;
    -f) FILTER=${2}; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -m | --mail) MAIL=1 ;;
    -V) echo "${PGM}: v${VERSION}"; exit 3 ;;
    -x)  set -x ;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    --toll) TOLL=1; MAIL=1 ;;
    *)  echo "Option ${1} not known. Exiting..."; echo; USAGE; exit 1 ;;
  esac
    shift
done

echo "DATE=${DATE}"
echo "FILE=${FILE}"
echo "FILERS=${FILERS}"
echo "FILTER=${FILTER}"
echo "LOG=${LOG}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "TOLL=${TOLL}"
echo "PING=${PING}"

#  LOG rotating
touch ${LOG} ${TMP}
# Check & move LOG-file if longer then max.
LOGSIZE=`du -ka $LOG | cut -f1`
if [ $LOGSIZE -ge $MAXLOGSIZE ]; then
  mv $LOG $LOG.old
  touch $LOG
fi

echo "`date` $0 (v${VERSION}) started."|tee -a $LOG|tee -a ${TMP}

for FILER in `cat ${FILERS}|grep -v ^\#|grep ${FILTER}|awk -F\; '{print $1}'`
do
  echo " "|tee -a ${TMP}
  ${PING} -c 1 ${FILER} 1> /dev/null 2>&1
  EC="$?"
  if [ ${EC} -lt 1 ]; then
    echo "`date` ${FILER} ping = OK"|tee -a ${TMP}
    ${SSH} ${FILER} vfiler status|tee -a ${TMP}

    for VFILER in `${SSH} ${FILER} vfiler status|grep running|awk '{print $1}'`
    do
      ${SSH} ${FILER} vfiler status -r ${VFILER}|tee -a ${TMP}


    done
  else
    echo "`date` ${FILER} ping NOT ok"|tee -a ${TMP}
  fi
done

SUBJECT=":${HOSTNAME}: FSOD filer status ${DATE} [${PGM} v${VERSION}]"
if [ "${FILTER}" != "[1234567890]" ]; then
  SUBJECT=":${HOSTNAME}: FSOD filer status (${FILTER}) ${DATE} [${PGM} v${VERSION}]"
fi
if [ ${TOLL} ]; then
# Send to LiveLink via mail-rule (fsod_qtree@elink.atos.net)
  SUBJECT=":${HOSTNAME}: FSOD filer status ${DATE} [${PGM} v${VERSION}] {TO_LL:fsod_mgt_status}"
fi
if [ ${MAIL} ]; then
  cat ${TMP}|uuencode ${FILE}|mailx -s "${SUBJECT}" ${MAILTO}
  echo "`date` Mailed ${FILE} to ${MAILTO} (${SUBJECT}) "|tee -a ${LOG}
fi

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

