
#!/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
PGM=`basename $0|cut -d\. -f1`
VER="0.7"
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"
MAILTO="atos@agrarix.it"
WEBDIR="/var/www/vhosts/techlab.agrarix.it/html/access"
UPDWEB=""
PAGE="${WEBDIR}/index.html"
PING_RESULT=""
BGC=""
FSIZE=4
MAILTO="maarten.deboer@atos.net"


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

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

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 "  <HTML>" >> ${PAGE}
  echo "    <HEAD>" >> ${PAGE}
  echo "      <meta http-equiv='Content-Language' content='en-us'>" >> ${PAGE}
  echo "      <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'> " >> ${PAGE}
  echo "      <meta name='author' content=\"${MAILTO}\"> " >> ${PAGE}
  echo "      <meta name='generator' content=\"Agrarix-IT: ${PGM} v${VER}\"> " >> ${PAGE}
  echo "      <meta name='up-time' content=\"`date +%Y-%m-%d-%H-%M-%S`\"> " >> ${PAGE}
  echo "      <TITLE>Atos - Technology Lab Access</TITLE>" >> ${PAGE}
  echo "      <link rel='icon' href='TechLab_logo.png' type='image/jpg'> " >> ${PAGE}
  echo "    </HEAD>" >> ${PAGE}

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

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

  echo "      <TABLE BORDER=1 WIDTH='100%' cellspacing='0'> " >> ${PAGE}
  echo "        <TR> <TH>IP_ADDR</TH> <TH>IP_NAME</TH> <TH>PING_RESULT</TH> </TR>" >> ${PAGE}
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
  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} "
    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)"
    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

  if [ ${UPDWEB} ]; then
    echo "        <TR>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${IP_ADDR}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${IP_NAME}</TD>" >> ${PAGE}
    echo "          <TD BGCOLOR=${BGC}><FONT SIZE=${FSIZE}>${PING_RESULT}</TD" >> ${PAGE}
    echo "        </TR>" >> ${PAGE}
  fi  # WEBUPD

done  # IP_ADDR

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

  echo "      <TABLE WIDTH='100%' cellspacing='0'>" >> ${PAGE}
  echo "      <TR> " >> ${PAGE}
  echo "        <TD bgColor=#0066A1>" >> ${PAGE}
  echo "          <FONT COLOR=white face='Verdana' size='1'>" >> ${PAGE}
  echo "            <CENTER>" >> ${PAGE}
  echo "              Contact: |Content Owner: <A HREF=mailto:${MAILTO}>Maarten de Boer</A>|Last Update: `date`|[${PGM} v${VER}] <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>" >> ${PAGE}
  echo "            </CENTER>" >> ${PAGE}
  echo "          </FONT>" >> ${PAGE}
  echo "        </TD>" >> ${PAGE}
  echo "      </TR>" >> ${PAGE}
  echo "      </TABLE>" >> ${PAGE}

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

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

