
#!/bin/sh
# File	: chk_vfiler_hosts.sh
# By	: Maarten.deBoer@Atos.net, 150508
# Subject	: Script check hosts connected to vfilers
#(0.2)	: Add ERR, ASC
PGM="`basename $0|cut -d\. -f1`"
VER="0.2"
TMP="/tmp/${PGM}.$$"
MAILTO="maarten.deboer@atos.net"
HOSTNAME="`hostname|cut -d\. -f1`"
LOG="${HOME}/log/${PGM}.log"
MAIL=""
SSH="/usr/bin/ssh -n"
FILERS="${HOME}/etc/filers"
FILTER="[?]*"
VFILTER="[?]*"
BUBBLE="i"
ERR="/tmp/${PGM}.$$.err"
ASC="/tmp/${PGM}.asc"

USAGE()
{
  echo "Usage: ${PGM} [options] "
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -b          : Bubble-string (${BUBBLE})"
  echo "    -e          : Etc/filer (${FILERS})"
  echo "    -f          : filter Filername (${FILTER})"
  echo "    -h | --help : this help"
  echo "    -m | --mail : do send mail"
  echo "    -v          : filter Vfilername (${VFILTER})"
  echo "    -V          : Version"
  echo "    -x          : set -x"
}

# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -b) BUBBLE=${2}; shift ;;
    -e) FILERS=${2}; shift ;;
    -f) FILTER=${2}; shift ;;
    -m | --mail) MAIL=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -v) VFILTER=${2}; shift ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
touch ${TMP} ${ERR}

for FILER in `cat ${FILERS}|grep -v \^#|grep ${FILTER}|awk -F\; '{print $1}'`
do
  echo "${FILER} ..."
  ${SSH} ${FILER} vfiler status|grep running|grep -v vfiler0|grep ${VFILTER}|awk '{print $1}'|while read VFILER
  do
    IPANSW="`${SSH} ${FILER} vfiler status -r ${VFILER}|grep IP|grep ${BUBBLE}`"
    if [ "${IPANSW}" != "" ]; then
      DEFGW="`${SSH} ${FILER} \"priv set advanced; vfiler run -q ${VFILER} netstat -rn\"| grep -v '/'| grep ${BUBBLE}|grep default|awk '{print $2}' 2> /dev/null`" 
      echo "${FILER}/${VFILER} (${IPANSW}) GW=${DEFGW}|"|tee -a ${TMP} ${ERR}
      if [ "${DEFGW}" != "" ]; then
        ${SSH} ${FILER} "priv set diag; vfiler run -q ${VFILER} ping -c 1 ${DEFGW}"| grep alive 2> /dev/null
        EC=${?}
        if [ ${EC} -eq 0 ]; then
          echo "${FILER}/${VFILER} GW:${DEFGW} = ok"|tee -a ${TMP}
        else
          echo "${FILER}/${VFILER} GW:${DEFGW} = NOT ok !!!!!"|tee -a ${TMP} ${ERR}
        fi  # EC
      fi
      ${SSH} ${FILER} "priv set advanced; vfiler run -q ${VFILER} netstat -rn"|egrep -v '/|Routing|Destination|default'|grep ${BUBBLE}|awk '{print $1}'|while read IPADDR
      do
        ${SSH} ${FILER} "priv set diag; vfiler run -q ${VFILER} ping -c 1 ${IPADDR}"| grep alive 2> /dev/null
        EC=${?}
        if [ ${EC} -eq 0 ]; then
          echo "${FILER}/${VFILER} host:${IPADDR} = ok"|tee -a ${TMP}
        else
          echo "${FILER}/${VFILER} host:${IPADDR} = NOT ok !!!!!"|tee -a ${TMP} ${ERR}
        fi  # EC
      done  # IPADDR
    fi  #  IPANSW
  done  #  ssh $FILER vfiler 
done  # for FILER in

if [ ${MAIL} ]; then
  echo "Sending the output to ${MAILTO} ..."
  cp ${TMP} ${ASC}
  cat ${ERR} | mailx -a ${ASC} -s ":${HOSTNAME}: [${PGM} v${VER}]" ${MAILTO}
fi

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

