
#!/bin/sh
# File	: rpt_ifs_ping.sh
# By	: MaartenDeBoer.nl, 241017
# Subject	: Script to report ERR's of (chk_ifs_ping.sh) on daily basis
#(0.2),241111	: Added ${1}
#(0.3),241121	: Mod DATESTR => DFILTER (Date Filter), Added RCFILE, ASC
#(0.4),241127	: Mod. CSV: DATE, Dest1, Dest2, ... Destn
PGM=`basename $0|cut -d\. -f1`
VER="0.4"
LOG="${HOME}/log/${PGM}.log"
TMP="/tmp/${PGM}.$$"
MAILTO="maarten.deboer@atos.net"
RCFILE="${HOME}/etc/${PGM}.rc"
MAIL="" 
ASC="/tmp/${PGM}.asc"
CSV="/tmp/${PGM}.csv"

ERRFILE="${HOME}/log/chk_ifs_ping.err"
#DATESTR=`date +%Y-%m-%d`
DFILTER=`date +%Y-%m-%d`

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -d <Date-filter>  : DFILTER (${DFILTER})"
  echo "    -e <ERR_file : EFF-FILE (${ERRFILE})"
  echo "    -f <Filter>  : dateFILTER (${DFILTER})"
  echo "    -m           : Mail TMP-file to ${MAILTO})"
  echo "    --mailto     : define MAILTO (${MAILTO}) address"
  echo "    -h | --help  : this help"
  echo "    -x           : set -x"
  echo "    -V           : Version"
}
# When RCFILE
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using ..."|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE
# Check options
while [ ${#} -gt 0 ]
  do
  case ${1} in
    -d) DFILTER="${2}"; shift ;;
    -f) DFILTER="${2}"; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -m) MAIL=1;;
    --mailto) MAILTO=${2}; MAIL=1; 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}
echo " ASC=${ASC}"
echo " CSV=${CSV}"
echo " DFILTER=${DFILTER}"
echo " ERRFILE=${ERRFILE}"
echo " MAIL=${MAIL}"
echo " MAILTO=${MAILTO}"
echo " TMP=${TMP}"
sleep 1

touch ${TMP} ${TMP}.mail
echo "${PGM} (v${VER}): DateFILTER = ${DFILTER}" > ${ASC}

grep "${DFILTER}" ${ERRFILE} > ${TMP}
SOURCE=`grep "${IP_ADDR}" ${TMP} |cut -d\[ -f2 | cut -d\] -f1 |sort -u`
echo "From: ${SOURCE} " >> ${ASC}

# Create Header
echo "" > ${TMP}.IP_ADDR
echo -n "# DATE;" |tee ${CSV}
cat ${TMP}|awk '{print $2}'|sort -u|while read IP_ADDR
do
  HOST_NAME=`grep "${IP_ADDR}" ${TMP} |cut -d\( -f2 | cut -d\) -f1 |sort -u`
  echo -n "${IP_ADDR} ${HOST_NAME};"|tee -a ${CSV}
  echo "${IP_ADDR} ${HOST_NAME};"|tee -a ${TMP}.IP_ADDR
done  # IP_ADDR
echo  "TOTAL;"|tee -a ${CSV}

# Anal the rest
cat ${TMP}|awk '{print $1}'|cut -d\- -f1-3|sort -u|while read DATE_STR
do
  echo -n "${DATE_STR};"|tee -a ${CSV}
  TOTAL_CNT=0
  cat ${TMP}.IP_ADDR |awk '{print $1}'|while read IP_ADDR
  do
    if [ "${IP_ADDR}" != "" ]; then
#      echo "  IP_ADDR=${IP_ADDR}"
      CNT=`cat ${TMP}|grep "${DATE_STR}"|grep -c "${IP_ADDR}"`
      echo -n "${CNT};"|tee -a ${CSV}
      TOTAL_CNT=`expr ${TOTAL_CNT} + ${CNT}`

      echo "${DATE_STR}: ${CNT}x ${IP_ADDR} ${HOST_NAME} (${TOTAL_CNT})" >> ${ASC}
    
      echo "${TOTAL_CNT}" > ${TMP}.TOTAL_CNT
    fi  # IP_ADDR <> "" 
  done  # IP_ADDR
  TOTAL_CNT=`cat ${TMP}.TOTAL_CNT`
  echo "${TOTAL_CNT};"| tee -a ${CSV}
done  # DATE_STR


if [ ${MAIL} ] && [ "${MAILTO}" != "" ] && [ -s ${TMP} ]; then
  echo "-----------------------------------------" >> ${ASC}
  cat ${TMP} >> ${ASC}
  cat ${ASC} | mailx -a ${CSV} -a ${ASC} -s "Check ping ERROR report (${DFILTER}) [${PGM} v${VER}]" "${MAILTO}"
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
fi  # MAILTO

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

