
#!/bin/ksh
# File	: chk_disks.sh
# By	: Maarten.deBoer@atos.net, 2014-12-09
# Subject	: Script to check for broken disks, which might not "seen" by OnCommand(DFM)
#(0.2)	: Added putting data into WEB-location
#
PGM="`basename $0|cut -d\. -f1`"
TMP="/tmp/${PGM}.$$"
HOSTNAME="`hostname|cut -d\. -f1`"
VER="0.2"
LOG="${HOME}/log/${PGM}.log"

FILTER="[?]*"
FILERS="${HOME}/etc/filers"
SSH="/usr/bin/ssh -n"
MAIL=""
MAILTO="maarten.deboer@atos.net"

NAGIOSSEV="WARNING"
NAGIOS=""
IMI=""
SDMMAIL="ESBIncident.it-solutions@atos.net"
#SDMMAIL="maarten.deboer@atos.net"
#SDMUSER="nl19471"
#SDMREPLYTO="maarten.deboer@atos.net"
SDMMSG="${TMP}.sdmmsg"
SDMTYPE="Query"
SDMTEXT="${TMP}.sdmtext"
SDMSEV="4"
#SDMGROUP="NL.Storage.FSOD"
SDMGROUP="PL.Storage.FSOD"

SDMUSER="nldsm01"
SDMREPLYTO="fsod@atos.net"

WEBSITE="${HOME}/web/data"
WEBFILE="${HOME}/web/data/${PGM}.csv"

#--------------------------------------------------------------------------#
# Functions								   #
#--------------------------------------------------------------------------#
CREATE_SDM_TICKET()
# CREATE_SDM_TICKET "${FILER}" "${SDMTYPE}" "${SDMTEXT}" "${SDMSEV}"
# $1=Filer(CI), $2=SDMTYPE, $3=SDM-text $4=SEV
{
  echo "@REQUESTTYPE: ${2}" > ${SDMMSG}
  echo "@REQUESTAREA: NL.Storage.StorageOnDemand" >> ${SDMMSG}
  echo "@SEVERITY: ${4}" >> ${SDMMSG}
  echo "@CI: ${1}" >> ${SDMMSG}
  echo "@ORGANISATION: AtosOrigin.Netherlands" >> ${SDMMSG}
  echo "@GROUP: ${SDMGROUP}" >> ${SDMMSG}
  echo "@REPLYTO: ${SDMREPLYTO}" >> ${SDMMSG}
  echo "@PROXYUSER: ${SDMUSER}"  >> ${SDMMSG}
  cat ${3} >> ${SDMMSG}
  echo "[@${HOSTNAME}:${PGM} v${VER}]" >> ${SDMMSG}
  echo "@ENDOFSDMMESSAGE" >> ${SDMMSG}

  cat ${SDMMSG} | mailx -s "${SDMUSER}: ${PGM} ${2} at ${1}." ${SDMMAIL}

  echo "`date` ${PGM}: Mailed to SDM-IMI (${SDMMAIL})"|tee -a ${LOG}
}

SEND_TO_NAGIOS()
# SEND_TO_NAGIOS ${NAGIOSSEV} ${MSGSTR}
# $1=NAGIOSSEV $2=MSGSTR
{
# Nagios will be needed for every item (volume). Because limitation of 255 char's
# For more; IMI need to be used.
  if [ "${NAGIOS}" ]; then
  #----------------------------------------------------------------#
  # To Nagios (via logger)                                                         #
  # ------                                                         #
  # MINOR         Nagios-WARNING & SEV.3                           #
  # WARNING       Nagios-WARNING & SEV.3                           #
  # CRITICAL      Nagios-CRITICAL & SEV.2                          #
  # FATAL         Nagios-CRITICAL & SEV.2                          #
  # logger -t NOTIFY FSOD-SUPPORT <Nagios-SEV> "Text"              #
  #----------------------------------------------------------------#
  /usr/bin/logger -t NOTIFY FSOD-SUPPORT ${1} "${MSGSTR}"
# echo "logger: NOTIFY FSOD-SUPPORT ${1} ${2}"|tee -a ${LOG}
  echo "logger: NOTIFY TEST-SUPPORT ${1} ${2}"|tee -a ${LOG}
  fi  # [ "${NAGIOS}" ]; then
}

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -e          : new ETC/filer name (${FILERS})"
  echo "    -f          : filter filername (${FILTER})"
  echo "    -h|--help   : this help"
  echo "    -i|--imi    : send alert (to SDM) via IMI(mail)"
  echo "    -m|--mail   : Mail the output to (${MAILTO})"
  echo "    --mailto    : Mailto (${MAILTO})"
  echo "    -n|--nagios : send (short)alert (to SDM) via logger+Nagios"
  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 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    -i | --imi) IMI=1;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    -m | --mail) MAIL=1;;
    -n | --nagios) NAGIOS=1;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done

#--------------------------------------------------------------------------#
echo "`date` ${PGM}: v${VER} @${HOSTNAME} Started with FILER=${FILTER} & VOLUME=${VOLFILTER}"| tee -a ${LOG}
echo "FILERS=${FILERS}"
echo "FILTER=${FILTER}"
echo "MAILTO=${MAILTO}"
echo "IMI=${IMI}"
echo "NAGIOS=${NAGIOS}"
echo "TMP=${TMP}"
echo "PGM=${PGM}"
echo "SDMMAIL=${SDMMAIL}"
echo "SDMUSER=${SDMUSER}"
echo "SDMMSG=${SDMMSG}"
echo "SDMREPLYTO=${SDMREPLYTO}"
echo "SDMTYPE=${SDMTYPE}"
echo "SDMTEXT=${SDMTEXT}"
echo "SDMSEV=${SDMSEV}"
echo "SDMGROUP=${SDMGROUP}"
echo "VER=${VER}"

if [ ! -f ${FILERS} ]; then
  echo "${FILERS} NOT found. Exiting ..."
  exit 2
fi 

touch ${TMP} ${SDMMSG} ${SDMTEXT}
echo "" > ${WEBFILE}
for FILER in `cat ${FILERS}|grep -v \^#|awk -F\; '{print $1}'|grep "${FILTER}"`
do
  # clean some file 1st
  echo "Filer: ${FILER} ..."
  ${SSH} ${FILER} vol status -f > ${TMP}
  grep '(empty)' ${TMP} > /dev/null
  EC=$?
  if [ ${EC} -gt 0 ]; then
    echo "${FILER}: Broken disks"|tee -a ${SDMTEXT} ${LOG}
    cat ${TMP} |tee -a ${SDMTEXT}
    echo "--------------------------------" >> ${SDMTEXT}
# WEB
    echo "${FILER},${TMP}" >> ${WEBFILE}
  fi  # ${EC}

done  # for FILER in `cat ${FILERS}|grep -v \^#|awk -F\; '{print $1}'|grep "${FILTER}"`

if [ "${MAIL}" ]; then
  echo "`date` @${HOSTNAME} ${PGM} v${VER}"|tee -a ${SDMTEXT}
  cat ${SDMTEXT} |mailx -s "${HOSTNAME}: Check disks [${PGM} v${VER}]" ${MAILTO}
  echo "Mailed to ${MAILTO}"|tee -a ${LOG}
fi  # MAIL

# Error-text is NOT send per CI (Filer). Therefore CI=HOSTNAME
if [ "${IMI}" ]; then
  if [ -s ${SDMTEXT} ]; then  # If size > 0
    CREATE_SDM_TICKET "${HOSTNAME}" "${SDMTYPE}" "${SDMTEXT}" "${SDMSEV}"
    cp /dev/null ${SDMTEXT}
  fi  # [ -s ${SDMTEXT} ]; then  # If size > 0
fi  # IMI


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

