
#!/bin/sh
# File	: system_ping.sh
# By	: Maarten.deBoer@Atos.net, 240212
# Subject	: Script to ping systems for check, report & alert
#(0.2),240212	: Added EXCL_FILE
PGM=`basename $0|cut -d\. -f1`
VER="0.2"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
RCFILE="${HOME}/etc/${PGM}.rc"
CSV="/tmp/${PGM}.csv"

MAILTO="maarten.deboer@atos.net"
MAIL=""

HOSTS="${HOME}/etc/${PGM}.hosts"
EXCL_FILE="${HOME}/etc/${PGM}.excl"
CHECK=""
REPORT=""
ALERT=""

USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VER}"
  echo "  options         :"
  echo "    -c|--chk      : Check systems (from HOSTS (${HOSTS}))"
  echo "    -h|--help     : this Help"
  echo "    -m|--mail     : do send Mail"
  echo "    -V            : show Version"
  echo "    -x            : set -x"
  echo "    --mailto      : change MAILTO address & do send mail (${MAILTO})"
}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE} found. Reading it"|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE



## 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
if [ -f ${RCFILE} ]; then
  echo "  Reading RC-file (${RCFILE})..."|tee -a ${LOG}
  . ${RCFILE}
fi
while [ $# -gt 0 ]
  do
  case $1 in
    -c | --chk | --check) CHECK=1 ;;
    -r | --rpt | --report) REPORT=1 ;;
    -a | --alert) ALERT=1 ;;
    -m | --mail) MAIL=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known. Exiting..."; echo; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "  ALERT=${ALERT}"
echo "  CSV=${CSV}"
echo "  CHECK=${CHECK}"
echo "  EXCL_FILE=${EXCL_FILE}"
echo "  HOSTS=${HOSTS}"
echo "  MAIL=${MAIL}"
echo "  MAILTO=${MAILTO}"
echo "  REPORT=${REPORT}"
echo "  RCFILE=${RCFILE}"
echo "  TMP=${TMP}"
sleep 1

if [ ! -f ${HOSTS} ]; then
  echo "    NO HOSTS (${HOSTS}) fond. Exiting ..."|tee -a ${LOG}
  exit 4
fi  # HOSTS
touch ${TMP}
echo "# IP_ADDRess;NAME;RESULT (ExitCode);"|tee ${CSV}

if [ ${CHECK} ]; then
  echo "    CHECKing systems ..."|tee -a ${LOG}
  cat ${HOSTS} | grep -v ^# | while read LINE
  do
    IP_ADDR=`echo ${LINE}|awk '{print $1}'`
    NAME=`echo ${LINE}|awk '{print $2}'`
    echo "    NAME=${NAME} IP_ADDR=${IP_ADDR}"

    /usr/bin/ping -W 2 -c 1 -W 1 ${IP_ADDR}
    EC1=${?}
    if [ ${EC1} -eq 0 ]; then
      RESULT="OK"
    else
      RESULT="NOT ok"
      if [ -f ${EXCL_FILE} ]; then
        ANSW=`grep "${IP_ADDR}" ${EXCL_FILE}` 1>/dev/null 2>&1
        EC2=${?}
        if [ ${EC2} -eq 0 ]; then
          RESULT="not ok, but EXCLuded."
        fi  # EC2=0
        echo "EC2=${EC} ANSW=${ANSW}"
      fi  # EXCL_FILE
    fi  # EC1=0
    echo "${IP_ADDR};${NAME};${RESULT} (${EC1});"|tee -a ${TMP}

  done  # HOSTS

fi  # CHECK

if [ ${MAIL} ] && [ "${MAILTO}" != "" ]; then
  cat ${TMP} >> ${CSV}
  date | mailx -s ":${HOSTNAME}: System Ping result [${PGM} v${VER}]" -a ${CSV} ${MAILTO}
  echo "  Mailed CSV (${CSV}) to ${MAILTO}"|tee -a ${LOG}
fi

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

