
#!/bin/sh
# File	: chk_ifs_ping.sh
# By	: Maarten.deBoer@Atos.net, 240808
# Subject	: Script to check Interfaces (by IP-address) with ping
#(0.2),240808	: Upd LOG-file layout
#(0.3),240808	: Add LOG-check & create
#(0.4),240808	: Mod. LOGfile writing, DATADIR
#(0.5),240813	: Add CMD(update)
#(0.6),240813	: Add CMD(mail)
#(0.7),240925	: Add CMD(web) for web-page-update
#(0.8),240925	: Add RCFILE
#(0.9),240925	: Add .htm for Mobile
#(0.10),240926	: Add date
#(0.11),240926	: Add ${HOSTNAME}
#(0.12),240926	: Add REM(ote)_DATA_DIR
#(0.13),240926  : Add used .csv in web-page
PGM=`basename $0|cut -d\. -f1`
VER="0.13"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
HOSTNAME=`hostname |cut -d\. -f1`

HOSTS="${HOME}/etc/${PGM}.hosts"
MAX_PING=5
DATADIR="${HOME}/data"
CMD=""
UPD_URL="http://atos.agrarix.net:8080/SCRIPTS/${PGM}.sh"
WGET="/usr/bin/wget"
TMPPGM="/tmp/${PGM}.sh"
MAILX="/usr/bin/mailx"
UPDWEB=""
WEBDIR="/var/www/vhosts/techlab.agrarix.it/html/access"
PAGE="${WEBDIR}/index.html"
PAGEM="${WEBDIR}/index.htm"
PING_RESULT=""
BGC=""
FSIZE=5
FSIZEM=6
MAILTO="maarten.deboer@atos.net"
RCFILE="${HOME}/etc/${PGM}.rc"
#REM_DATA_DIR="agrarix.it:data/"
REM_DATA_DIR=""
CSV="${HOME}/data/${PGM}.csv"

if [ -f ${RCFILE} ] ; then
  echo "  RCFILE(${RCFILE}} found. Reading it..."|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE

if [ "${1}" != "" ]; then
  CMD="${1}"
fi  # ${1}

echo "`date` ${PGM} v${VER} started."
echo "  CMD=${CMD}"
echo "  CSV=${CSV}"
echo "  FSIZE=${FSIZE}"
echo "  FSIZEM=${FSIZEM}"
echo "  HOSTNAME=${HOSTNAME}"
echo "  HOSTS=${HOSTS}"
echo "  LOG=${LOG}"
echo "  MAILTO=${MAILTO}"
echo "  MAILX=${MAILX}"
echo "  MAX_PING=${MAX_PING}"
echo "  REM_DATA_DIR=${REM_DATA_DIR}"
echo "  RCFILE=${RCFILE}"
echo "  TMP=${TMP}"
echo "  UPD_URL=${UPD_URL}"
echo "  UPDWEB=${UPDWEB}"
echo "  WGET=${WGET}"
echo "  WEBDIR=${WEBDIR}"
echo "  PAGE=${PAGE}"
sleep 1

touch ${TMP}

if [ "${CMD}" != "" ] && [ "${CMD}" = "update" ]; then
  type ${WGET}
  EC=${?}
  if [ ${EC} -eq 0 ]; then
    ${0} ver
    echo "`date +%Y-%m-%d-%H-%M-%S` Updating ${PGM} from ${UPD_URL}."|tee -a ${LOG}
    echo "  SLEEPING 5 sec's"
    sleep 5
    ${WGET} ${UPD_URL} -O ${TMPPGM}
    chmod +x ${TMPPGM}
    cp ${TMPPGM} ${0}
    ${0} ver
  else
    echo "`date +%Y-%m-%d-%H-%M-%S` NO ${WGET} found. NOT updating."|tee -a ${LOG}
  fi  # EC =0
fi  # CMD

if [ "${CMD}" != "" ] && [ "${CMD}" = "mail" ]; then
  type ${MAILX}
  EC=${?}
  if [ ${EC} -eq 0 ] && [ "${MAILTO}" != "" ]; then
    echo "  SLEEPING 5 sec's"
    sleep 5
    cat ${LOG} |${MAILX} -s "${PGM} v${VER}: LOGfile" "${MAILTO}"
    EC=${?}
    echo "`date +%Y-%m-%d-%H-%M-%S` Mailed(${EC}) to ${MAILTO}."|tee -a ${LOG}
  else
    echo "`date +%Y-%m-%d-%H-%M-%S` NO ${MAILX} found OR MAILTO is empty. NOT mailing."|tee -a ${LOG}
  fi  # EC =0
fi  # CMD

if [ "${CMD}" != "" ] && [ "${CMD}" = "ver" ]; then
  echo "`date +%Y-%m-%d-%H-%M-%S` ${PGM} ver:${VER}"|tee -a ${LOG}
  exit 3
fi  # ver

if [ ! -d ${DATADIR} ]; then
  echo "  DATADIR (${DATADIR}) NOT found. Creating ..."|tee -a ${LOG}
  mkdir -p ${DATADIR}
fi  # HOSTS
if [ ! -f ${HOSTS} ]; then
  echo "  HOSTS (${HOSTS}) NOT found. Exiting ..."|tee -a ${LOG}
  exit 4
fi  # HOSTS
if [ ! -f ${LOG} ]; then
  echo "`date +%Y-%m-%d-%H-%M-%S` ${PGM} v${VER} create LOGfile."|tee -a ${LOG}
fi  # HOSTS
DATI_H=`date +%H`
DATI_M=`date +%M`
DATI_S=`date +%S`
if [ ${DATI_H} -eq 0 ] && [ ${DATI_M} -eq 0 ] && [ ${DATI_S} -eq 0 ]; then
  echo "`date +%Y-%m-%d-%H-%M-%S` ${PGM} v${VER} Timestamp."|tee -a ${LOG}
fi  # H & M & S

if [ "${CMD}" != "" ] && [ "${CMD}" = "web" ]; then
  if [ ! -d ${WEBDIR} ]; then
    echo "`date +%Y-%m-%d-%H-%M-%S` ${PGM} v${VER} NO WEBDIR (${WEBDIR}). Exiting ..."|tee -a ${LOG}
    exit 5
  fi  # WEBDIR
  UPDWEB=1
# WEB-HRD
  echo "<!DOCTYPE HTML>" > ${PAGE}
  echo "<!DOCTYPE HTML>" > ${PAGEM}
  echo "  <HTML>" >> ${PAGE}
  echo "  <HTML>" >> ${PAGEM}
  echo "    <HEAD>" >> ${PAGE}
  echo "    <HEAD>" >> ${PAGEM}
  echo "      <meta http-equiv='Content-Language' content='en-us'>" >> ${PAGE}
  echo "      <meta http-equiv='Content-Language' content='en-us'>" >> ${PAGEM}
  echo "      <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'> " >> ${PAGE}
  echo "      <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'> " >> ${PAGEM}
  echo "      <meta name='author' content=\"${MAILTO}\"> " >> ${PAGE}
  echo "      <meta name='author' content=\"${MAILTO}\"> " >> ${PAGEM}
  echo "      <meta name='generator' content=\"Agrarix-IT: ${PGM} v${VER}\"> " >> ${PAGE}
  echo "      <meta name='generator' content=\"Agrarix-IT: ${PGM} v${VER}\"> " >> ${PAGEM}
  echo "      <meta name='up-time' content=\"`date +%Y-%m-%d-%H-%M-%S`\"> " >> ${PAGE}
  echo "      <meta name='up-time' content=\"`date +%Y-%m-%d-%H-%M-%S`\"> " >> ${PAGEM}
  echo "      <TITLE>Atos - TechLab Access</TITLE>" >> ${PAGE}
  echo "      <TITLE>Atos - TechLab Access</TITLE>" >> ${PAGEM}
  echo "      <link rel='icon' href='TechLab_logo.png' type='image/jpg'> " >> ${PAGE}
  echo "      <link rel='icon' href='TechLab_logo.png' type='image/jpg'> " >> ${PAGEM}
  echo "    </HEAD>" >> ${PAGE}
  echo "    </HEAD>" >> ${PAGEM}

  echo "    <BODY aLink=red bgColor=#D3D0D3 link=red text=#000000 vLink=#ff0000>" >> ${PAGE}
  echo "    <BODY aLink=red bgColor=#D3D0D3 link=red text=#000000 vLink=#ff0000>" >> ${PAGEM}

  echo "    <TABLE BORDER=0 WIDTH='100%' cellspacing='0'>" >> ${PAGE}
  echo "    <TABLE BORDER=0 WIDTH='100%' cellspacing='0'>" >> ${PAGEM}
  echo "      <TR WIDTH=100% HEIGHT=40px>" >> ${PAGE}
  echo "      <TR WIDTH=100% HEIGHT=40px>" >> ${PAGEM}
  echo "        <TD bgColor=#0066A1>" >> ${PAGE}
  echo "        <TD bgColor=#0066A1>" >> ${PAGEM}
  echo "           <FONT COLOR=white face='verdana' size=${FSIZE}> <A HREF='/'>TechLab:</A> access status</FONT> <BR>" >> ${PAGE}
  echo "           <FONT COLOR=white face='verdana' size=${FSIZEM}> <A HREF='/'>TechLab:</A> access status</FONT> <BR>" >> ${PAGEM}
  echo "        </TD>" >> ${PAGE}
  echo "        </TD>" >> ${PAGEM}
  echo "      </TR>" >> ${PAGE}
  echo "      </TR>" >> ${PAGEM}
  echo "      </TABLE>" >> ${PAGE}
  echo "      </TABLE>" >> ${PAGEM}

  echo "      <TABLE BORDER=1 WIDTH='100%' cellspacing='0'> " >> ${PAGE}
  echo "      <TABLE BORDER=1 WIDTH='100%' cellspacing='0'> " >> ${PAGEM}
  echo "        <TR> <TH><FONT SIZE=${FSIZE}>HOSTNAME</TH> <TH><FONT SIZE=${FSIZE}>IP ADDR <BR> (IP NAME)</TH> <TH><FONT SIZE=${FSIZE}>PING RESULT</TH> <TH><FONT SIZE=${FSIZE}>DATI</TH> </TR>" >> ${PAGE}
  echo "        <TR> <TH><FONT SIZE=${FSIZEM}>HOSTNAME</TH> <TH><FONT SIZE=${FSIZEM}>IP ADDR <BR> (IP NAME)</TH> <TH><FONT SIZE=${FSIZEM}>PING RESULT</TH> <TH><FONT SIZE=${FSIZEM}>DATI</TH> </TR>" >> ${PAGEM}
fi  # web


cat ${HOSTS}|grep -v ^#|while read LINE
do
#  echo -n "  ${IP_ADDR} (${IP_NAME}) "
  IP_ADDR=`echo ${LINE}|awk '{print $1}'`
  IP_ADDR_NAME=`echo "${IP_ADDR}"|sed 's/\./-/g'`
  IP_NAME=`echo ${LINE}|awk '{print $2}'`
  PING_ANSW=`ping -W 3 -c 1 ${IP_ADDR}`
  PING_EC=${?}
  PING_CNT=1
  DATI="`date +%Y-%m-%d' '%H:%M:%S`"
  if [ ${PING_EC} -ne 0 ] && [ ! -f ${DATADIR}/${IP_ADDR_NAME}.failed ]; then
    echo -n "`date +%Y-%m-%d-%H-%M-%S` ${IP_ADDR} (${IP_NAME}) [${HOSTNAME}] "|tee -a ${LOG}
    PING_CNT=1
    while [ ${PING_CNT} -lt ${MAX_PING} ]
    do
      sleep 1
      PING_ANSW=`ping -W 3 -c 1 ${IP_ADDR}`
      PING_EC=${?}
      if [ ${PING_EC} -ne 0 ]; then
        PING_CNT=`expr ${PING_CNT} + 1`
      fi  # EC <> 0
      echo -n "${PING_CNT} "
      DATI="`date +%Y-%m-%d' '%H:%M:%S`"
    done  # while
    touch ${DATADIR}/${IP_ADDR_NAME}.failed
    echo "${PING_CNT}x FAILED [${DATADIR}/${IP_ADDR_NAME}.failed] ."|tee -a ${LOG}
    PING_RESULT="${PING_CNT}x FAILED"
    BGC="orange"
  else
    PING_RESULT="ok"
    BGC="lightgreen"
    if [ -f ${DATADIR}/${IP_ADDR_NAME}.failed ]; then
      rm ${DATADIR}/${IP_ADDR_NAME}.failed
      echo "  `date +%Y-%m-%d-%H-%M-%S` ${IP_ADDR} (${IP_NAME}) [${HOSTNAME}] OK again (removed .failed)"|tee -a ${LOG}
      PING_RESULT="ok (again)"
      BGC="lightgreen"
    fi  # -f
    echo -n "  `date +%Y-%m-%d-%H-%M-%S` ${IP_ADDR} (${IP_NAME}) [${HOSTNAME}] "
    echo "=${PING_EC} ${PING_CNT}x"
  fi  # EC <> 0
# TMP for REM_DATA
  echo "${HOSTNAME};${IP_ADDR} (${IP_NAME});${PING_RESULT};${DATI};" >> ${TMP}

  if [ ${UPDWEB} ]; then
    echo "        <TR>" >> ${PAGE}
    echo "        <TR>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${HOSTNAME}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${HOSTNAME}</TD>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${IP_ADDR}<BR> (${IP_NAME}) </TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${IP_ADDR}<BR> (${IP_NAME}) </TD>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${PING_RESULT}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${PING_RESULT}</TD>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${DATI}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${DATI}</TD>" >> ${PAGEM}
    echo "        </TR>" >> ${PAGE}
    echo "        </TR>" >> ${PAGEM}
  fi  # WEBUPD
done  # IP_ADDR


if [ ${UPDWEB} ] && [ -f ${CSV} ]; then
  echo "  Reading ${CSV} for WEB-page"
  cat ${CSV}|while read LINE
  do
    REM_HOSTNAME=`echo ${LINE}|awk -F\; '{print $1}'`
    REM_IP_ADDR=`echo ${LINE}|awk -F\; '{print $2}'|awk '{print $1}'`
    REM_IP_NAME=`echo ${LINE}|awk -F\; '{print $2}'|awk '{print $2}'`
    REM_PING_RESULT=`echo ${LINE}|awk -F\; '{print $3}'`
    REM_DATI=`echo ${LINE}|awk -F\; '{print $4}'`

    if [ "${REM_PING_RESULT}" != "" ]; then
      if [ "${REM_PING_RESULT}" = "ok" ]; then
        BGC="lightgreen"
      else
        BGC="orange"
      fi  # "ok"
    else
      BGC=""
    fi  # <> ""   

    echo "        <TR>" >> ${PAGE}
    echo "        <TR>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${REM_HOSTNAME}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${REM_HOSTNAME}</TD>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${REM_IP_ADDR}<BR> ${REM_IP_NAME} </TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${REM_IP_ADDR}<BR> ${REM_IP_NAME} </TD>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${REM_PING_RESULT}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${REM_PING_RESULT}</TD>" >> ${PAGEM}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${REM_DATI}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZEM}>${REM_DATI}</TD>" >> ${PAGEM}
    echo "        </TR>" >> ${PAGE}
    echo "        </TR>" >> ${PAGEM}

  done  # LINE
fi  # UPDWEB && CSV


if [ ${UPDWEB} ]; then
# WEB-tail
  echo "      </TABLE> " >> ${PAGE}
  echo "      </TABLE> " >> ${PAGEM}

  echo "      <TABLE WIDTH='100%' cellspacing='0'>" >> ${PAGE}
  echo "      <TABLE WIDTH='100%' cellspacing='0'>" >> ${PAGEM}
  echo "      <TR> " >> ${PAGE}
  echo "      <TR> " >> ${PAGEM}
  echo "        <TD bgColor=#0066A1>" >> ${PAGE}
  echo "        <TD bgColor=#0066A1>" >> ${PAGEM}
  echo "          <FONT COLOR=white face='Verdana' size='1'>" >> ${PAGE}
  echo "          <FONT COLOR=white face='Verdana' size='1'>" >> ${PAGEM}
  echo "            <CENTER>" >> ${PAGE}
  echo "            <CENTER>" >> ${PAGEM}
  echo "              Contact: |Content Owner: <A HREF=mailto:${MAILTO}>Maarten de Boer</A>|Last Update: `date`|[${PGM} v${VER}] <BR>" >> ${PAGE}
  echo "              Contact: |Content Owner: <A HREF=mailto:${MAILTO}>Maarten de Boer</A>|Last Update: `date`|[${PGM} v${VER}] (mobile) <BR>" >> ${PAGEM}
  echo "              For internal use (c) Atos S.A. 2024 all rights reserved. Reproduction in whole or in part is prohibited without the written consent of Atos SA. <BR>" >> ${PAGE}
  echo "              For internal use (c) Atos S.A. 2024 all rights reserved. Reproduction in whole or in part is prohibited without the written consent of Atos SA. <BR>" >> ${PAGEM}
  echo "            </CENTER>" >> ${PAGE}
  echo "            </CENTER>" >> ${PAGEM}
  echo "          </FONT>" >> ${PAGE}
  echo "          </FONT>" >> ${PAGEM}
  echo "        </TD>" >> ${PAGE}
  echo "        </TD>" >> ${PAGEM}
  echo "      </TR>" >> ${PAGE}
  echo "      </TR>" >> ${PAGEM}
  echo "      </TABLE>" >> ${PAGE}
  echo "      </TABLE>" >> ${PAGEM}

  echo "    </BODY>" >> ${PAGE}
  echo "    </BODY>" >> ${PAGEM}
  echo "  </HTML>" >> ${PAGE}
  echo "  </HTML>" >> ${PAGEM}
fi  # UPDWEB


if [ "${REM_DATA_DIR}" != "" ]; then
  scp ${TMP} ${REM_DATA_DIR}/${PGM}.csv
  EC=${?}
  echo "  CSV-data copied to ${REM_DATA_DIR}(${EC})"
fi

rm ${TMP}
echo "`date` ${PGM} v${VER} finished."
exit 0

