
#!/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
#(0.5),241129	: Added FROM_HOST, Mod. ERR_FILES
#(0.6).241129	: Mod's, rename some F-names, add MAILATT
#(0.7),250102	: Add FILTER to CSV-filename
PGM=`basename $0|cut -d\. -f1`
VER="0.7"
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/ana_ifs_ping.csv"
OS_ID=""
MAILATT="-a"

LOGDIR="${HOME}/log"

#ERR_FILES="${HOME}/log/chk_ifs_ping.err"
ERR_FILES="${LOGDIR}/chk_ifs_ping*.err"
#DATESTR=`date +%Y-%m-%d`
DFILTER=`date +%Y-%m-%d`
CSV="/tmp/ana_ifs_ping_${DFILTER}.csv"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -c <CSV-file>    : CSV (${CSV})"
  echo "    -d <Date-filter> : DFILTER (${DFILTER})"
  echo "    -e <ERR-file(s)> : ERR_FILES (${ERR_FILES})"
  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
    -c) CSV="${2}"; shift ;;
    -d) DFILTER="${2}"; shift ;;
    -e) ERR_FILES="${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
CSV="/tmp/ana_ifs_ping_${DFILTER}.csv"

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
if [ -f /etc/os-release ]; then
  OS_ID=`cat /etc/os-release| grep "^ID"|cut -d\= -f2`
fi
if [ "${OS_ID}" = "debian" ]; then
  MAILATT="-A"
fi
echo " ASC=${ASC}"
echo " CSV=${CSV}"
echo " DFILTER=^${DFILTER}"
echo " ERR_FILES=${ERR_FILES}"
echo " LOGDIR=${LOGDIR}"
echo " MAIL=${MAIL}"
echo " MAILTO=${MAILTO}"
echo " TMP=${TMP}"
echo " OS_ID=${OS_ID}"
echo " MAILATT=${MAILATT}"
sleep 1

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

# Select (date-filter) ERRors to TMP
cd ${LOGDIR}
grep "^${DFILTER}" ${ERR_FILES}|cut -d\: -f2- > ${TMP}
cat ${TMP}
#SOURCE=`grep "${IP_ADDR}" ${TMP} |cut -d\[ -f2 | cut -d\] -f1 |sort -u`
#echo "From: ${SOURCE} " >> ${ASC}

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

# Anal the rest
echo "  Anal the rest"
# Loops 1:FROM_HOST, 2:DATE_STR, 3:IP_ADDR
# 2024-11-28-09-30-14 146.185.43.103 (atos.net) [tlenlmgt003] 5x FAILED .

# Loop.1:FROM_HOST
cat ${TMP}|cut -d\[ -f2|cut -d\] -f1|sort -u|while read FROM_HOST
do
#  echo "  FROM_HOST:${FROM_HOST}|"

# Loop.2:DATE_STR
  cat ${TMP}|cut -d\: -f2-|grep "[${FROM_HOST}]"|awk '{print $1}'|cut -d\- -f1-3|sort -u|while read DATE_STR
  do
    echo -n "${DATE_STR};${FROM_HOST};"|tee -a ${CSV}.2
    TOTAL_CNT=0

# Loop.3:IP_ADDR
    cat ${TMP}.IP_ADDR |awk '{print $1}'|while read IP_ADDR
    do
      if [ "${IP_ADDR}" != "" ]; then
        CNT=`cat ${TMP}|grep "\[${FROM_HOST}\]"|grep "^${DATE_STR}"|grep "${IP_ADDR}" |wc -l`
        echo -n "${CNT};"|tee -a ${CSV}.2
        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}.2
  done  # DATE_STR

done  # FROM_HOST


if [ ${MAIL} ] && [ "${MAILTO}" != "" ] && [ -s ${TMP} ]; then
  echo "-----------------------------------------" >> ${ASC}
  cat ${TMP} | sort -n > ${ASC}
# Sort date+time
  cat ${CSV}.2 |sort -n >> ${CSV}
  rm ${CSV}.2
# Mail
  date | mailx ${MAILATT} ${CSV} ${MAILATT} ${ASC} -s "Analyze & report ping ERRORs (${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

