
#!/bin/sh
# FIle	: chk_dfm_procs.sh
# By	: Maarten.deBoer@Atos.net, 120106
# Subject	: Check DFM processes if running. Otherwise Alert
# Mod(0.2)	: Added USAGE(), RESTART, USD, No sudo. Need to run as root
# Mod(0.3)	: ? at nlxfsd0[23]
# Mod(0.4)	: Added sudo & mod. ${LOG} & mod subject
#set -x
PGM="`basename $0|cut -d\. -f1`"
VERSION="0.4"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
MESSAGES="/var/log/messages"
ALERT="/tmp/${PGM}.alert"
HOSTNAME="`hostname|cut -d\. -f1`"
MAIL="" 
RESTART=""
USD=""
MAILTO="maarten.deboer@atos.net"
MAILFILE="${TMP}.mail"
SUDO=""

USAGE()
{
  echo "Usage: ${PGM} [-h] [-V] [-x] [-m] [--help] [--mail]"
  echo "  Version: ${VERSION}"
  echo "  options          :"
  echo "    -h | --help    : this help"
  echo "    -m | --mail    : do send Mail"
  echo "    -r | --restart : Restart procs"
  echo "    -s | --sudo    : With `sudo`"
  echo "    -u | --usd     : Usd ticket"
  echo "    -V             : Version"
  echo "    -x             : set -x"
}

# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -s | --sudo) SUDO="sudo" ;;
    -r | --restart) RESTART=1 ;;
    -u | --usd) USD=1 ;;
    -m | --mail) MAIL=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VERSION}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done


echo "`date`: ${PGM} v${VERSION} started. Options MAIL=${MAIL} USD=${USD} RESTART=${RESTART} "|tee -a ${LOG}
# Check if all service are started.
${SUDO} /usr/bin/dfm service list | /bin/grep -v ': started' > ${TMP}
##/usr/bin/dfm service list >> ${LOG}
##echo "TMP:" >> ${LOG}
##cat ${TMP} >> ${LOG}

if [ -s ${TMP} ] ; then  # If size > 0
  MSGSTR="DFM:"
  cat ${TMP} |while read LINE
  do
    echo "${LINE}|"
    MSGSTR="${MSGSTR}, ${LINE}"
    if [ ${RESTART} ]; then
      PROC="`echo ${LINE}|cut -d\: -f1`"
      echo "`date`: will restart ${PROC} ..."|tee -a ${MAILFILE}
      ${SUDO} /usr/bin/dfm service start ${PROC}|tee -a ${MAILFILE}|tee -a ${LOG}
      ANSW="`/usr/bin/dfm services list ${PROC}`"
      MSGSTR="${MSGSTR}=>${ANSW}" 
      echo "`date`: ${MSGSTR}"|tee -a ${MAILFILE}|tee -a ${LOG}
    fi  # ${RESTART}
# Needed for transfering MSGSTR to rest of script
    echo "${MSGSTR}">${TMP}.2
  done

  TEXTSTR="`cat ${TMP}.2`"
  echo "TextStr: ${TEXTSTR}" >> ${MAILFILE}
# Check if alread an alert. If not then alert to ANGate > SDM(USD)
  if [ ! -s ${ALERT} ] ; then  # If size !> 0 = NO file
    echo ${TEXTSTR} > ${ALERT}
    if [ ${USD} ]; then
# MINOR                 Nagios-WARNING & SEV.3
# WARNING               Nagios-WARNING & SEV.3
# CRITICAL      Nagios-CRITICAL & SEV.2
# FATAL         Nagios-CRITICAL & SEV.2
#      NAGIOSSEV="CRITICAL"  # Nagios-CRITICAL & SDM-SEV.2
      NAGIOSSEV="WARNING"  # Nagios-WARNING & SDM-SEV.3
      /usr/bin/logger -t NOTIFY FSOD-SUPPORT ${NAGIOSSEV} "${TEXTSTR}"
      echo "`date`: logger -t NOTIFY FSOD-SUPPORT ${NAGIOSSEV} ${TEXTSTR}"|tee -a ${MAILFILE}|tee -a ${LOG}
      /bin/grep FSOD-SUPPORT ${MESSAGES}|tail -1
    fi
  fi
  rm ${TMP}.2
else
# No Alert situation > Cleanup 
# Check ALERT-file, If so clean
  if [ -s ${ALERT} ] ; then  # If size > 0 = NO file
    rm -f ${ALERT}
    echo "`date`: All proc's are started. Removed ${ALERT}."|tee -a ${MAILFILE}|tee -a ${LOG}
  fi
fi
if [ ${MAIL} ] && [ -s ${MAILFILE} ] ; then  # If size > 0 = NO file
  echo "Sending mail to ${MAILTO} ..."
  cat ${MAILFILE}|mailx -s "@${HOSTNAME}: Check DFM proc's [${PGM} v${VERSION}]" ${MAILTO}
  rm ${MAILFILE}
fi

rm ${TMP}
exit 0

