
#!/bin/sh
# File	: upd_status-page.sh
# By	: MaartenDeBoer, 2016-12-20
# Subject	: Script to update status-(WEB)page
#(0.2)	: Add colors
#(0.3)	: Add PGM v
#(0.4)	: Add some ouput
#(0.5)	: Add upload time
#(0.6)	: Add INETIP
#(0.7)	: Add reverse lookup with INETIP
#(0.8)	: Added PAGEDIR, mod LOG
#(0.9)	: Added '% /'
#(0.10)	: Mod & Add SPEEDTEST
#(0.11)	: Mod SPEEDTEST TD & HOSTNAME, LOG
#(0.12)	: Mod HOSTNAME, UPTIMESTR
#(0.13)	: Some Atos MODs
#(0.14) : Added APPLICS, UNAME-R
#(0.15),180301	: Added Atos colors
PGM="`basename $0|cut -d\. -f1`"
VER="0.15"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
HOSTNAME="`hostname|cut -d\. -f1`"

INDIR="${HOME}/mailed-status"
PAGEDIR="/var/www/html/server-status"
#LOG="${PAGEDIR}/${PGM}.log"
PAGE="${PAGEDIR}/index.html"
TITLE="server status"

echo "`date` ${PGM} v${VER} started. (${HOSTNAME})"|tee -a ${LOG}
touch ${TMP}
if [ ! -d ${PAGEDIR} ]; then
  echo "  Pagedir ${PAGEDIR} does NOT exist. Exiting ..."|tee -a ${LOG}
  exit 2
fi

echo "<!DOCTYPE html>" > ${PAGE}
echo "<HTML>" >> ${PAGE}
echo "<HEAD>" >> ${PAGE}
echo "<META charset='UTF-8'>" >> ${PAGE}
echo "<META name='author' content='Maarten de Boer' />" >> ${PAGE}
echo "<META name='author' content='Maarten de Boer' />" >> ${PAGE}
echo "<META name='generator' content='${PGM} v${VER}' />">> ${PAGE}
echo "<TITLE>${TITLE}</TITLE>" >> ${PAGE}
echo "<basefont face='verdana'>" >> ${PAGE}
echo "</HEAD>" >> ${PAGE}
echo "<BODY aLink=red bgColor=#D3D0D3 link=red text=#000000 vLink=red>" >> ${PAGE}
echo "<TABLE BORDER=0 WIDTH='100%'>" >> ${PAGE}
echo "<TR HEIGHT=40px>" >> ${PAGE}
echo "  <TD bgColor=#0066A1>" >> ${PAGE}
echo "    <FONT COLOR=white face='verdana' size='6'> <B>${TITLE}</B> </FONT>" >> ${PAGE}
echo "    <BR>" >> ${PAGE}
echo "    <DIV align=left>" >> ${PAGE}

echo "    <DIV align=right>" >> ${PAGE}
echo "    <FONT COLOR=white face='verdana' size='-3'>At `hostname` </B> </FONT>" >> ${PAGE}
#echo "    <FONT COLOR=white face='verdana' size='-3'>For internal use. (c) Atos BTN 2016 </B> </FONT>" >> ${PAGE}
echo "    </DIV>" >> ${PAGE}
echo "  <TD>" >> ${PAGE}
echo "</TR>" >> ${PAGE}
echo "</TABLE>" >> ${PAGE}


echo "  <TABLE BORDER=1>" >> ${PAGE}

echo "   <TR> " >> ${PAGE}
echo "    <TD><B>HOST</B></TD> " >> ${PAGE}
echo "    <TD><B>Last upload (UTC)</B></TD> " >> ${PAGE}
#echo "    <TD><B>HOSTNAME</B></TD> " >> ${PAGE}
#echo "    <TD><B>INETIP</B></TD> " >> ${PAGE}
echo "    <TD><B>Own IP</B></TD> " >> ${PAGE}
echo "    <TD><B>APPLIC(s)</B></TD> " >> ${PAGE}
#echo "    <TD><B>SPEEDTEST</B></TD> " >> ${PAGE}
echo "    <TD><B>Top DF (excl. redhat|media)</B></TD> " >> ${PAGE}
echo "    <TD><B>UPTIME</B></TD> " >> ${PAGE}
echo "    <TD><B>UNAME-R</B></TD> " >> ${PAGE}
echo "    <TD><B>S.LOAD</B></TD> " >> ${PAGE}
echo "    <TD><B>USERS</B></TD> " >> ${PAGE}
echo "    <TD><B>PGM v</B></TD> " >> ${PAGE}
echo "   </TR> " >> ${PAGE}


cd ${INDIR}
# get list of First FileNAMEs (HOSTnames)
ls -1 |grep -v index.html|cut -d\_ -f1|sort -u|while read FNAME
do
  echo "   <TR> " >> ${PAGE}
# Search for latest file for the HOST(NAME)
  LASTFILE="`ls -1 ${FNAME}_*|sort|tail -1`"
  DATISTRUTC="`grep DATISTRUTC ${LASTFILE}|cut -d\= -f2`"
  HOSTNAME="`grep 'HOSTNAME=' ${LASTFILE}|cut -d\= -f2`"
  STP="`grep SPEEDTEST-PING ${LASTFILE}|cut -d\= -f2`"
  STD="`grep SPEEDTEST-DOWNLOAD ${LASTFILE}|cut -d\= -f2`"
  STU="`grep SPEEDTEST-UPLOAD ${LASTFILE}|cut -d\= -f2`"
  UPTIMESTR="`grep UPTIME ${LASTFILE}|cut -d\= -f2`"
  UPTIMEDAYS="`echo ${UPTIMESTR}|cut -d\, -f1|cut -d' ' -f3`"
# Check for HH:MM in UPTIMEDAYS, then < 1 day
  UPTIMEHRS=`echo ${UPTIMEDAYS}|grep ':'|awk '{print $1}'`
  if [ "${UPTIMEHRS}" != "" ]; then
    UPTIMEDAYS=0
  fi
  USERS="`echo ${UPTIMESTR}| cut -d\, -f3|cut -d' ' -f2`"
  SYSTEMLOAD="`echo ${UPTIMESTR}|cut -d\, -f4-6|cut -d\: -f2`"
  SLOAD1M="`echo ${UPTIMESTR}|cut -d\, -f4|cut -d\: -f2|cut -d\. -f1`"
  UNAME=`grep 'UNAME-R' ${LASTFILE}|cut -d\= -f2`
  INETIP="`grep INETIP ${LASTFILE}|cut -d\= -f2`"
  PGMV="`grep PGM ${LASTFILE}|cut -d\= -f2|cut -d' ' -f2`"

  IPADDR=`grep 'HOSTNAME-I=' ${LASTFILE}|cut -d\= -f2|awk '{print $1}'`
  APPLICS=`grep 'APPLICS=' ${LASTFILE}|cut -d\= -f2`

  echo "    <TD> ${FNAME} </TD> " >> ${PAGE}

# Upload time check
  UPLBGC="lightgreen"
#  CHKDATISTR="`date --utc --date=\"-12 hours\" +%Y%m%d%H%M%S`"
  CHKDATISTR="`date --utc --date=\"-1 hours\" +%Y%m%d%H%M%S`"
  if [ ${DATISTRUTC} -lt ${CHKDATISTR} ]; then
    UPLBGC="yellow"
  fi
#  CHKDATISTR="`date --utc --date=\"-24 hours\" +%Y%m%d%H%M%S`"
  CHKDATISTR="`date --utc --date=\"-2 hours\" +%Y%m%d%H%M%S`"
  if [ ${DATISTRUTC} -lt ${CHKDATISTR} ]; then
    UPLBGC="orange"
  fi
#  CHKDATISTR="`date --utc --date=\"-48 hours\" +%Y%m%d%H%M%S`"
  CHKDATISTR="`date --utc --date=\"-4 hours\" +%Y%m%d%H%M%S`"
  if [ ${DATISTRUTC} -lt ${CHKDATISTR} ]; then
    UPLBGC="red"
  fi
  echo "    <TD BGCOLOR=${UPLBGC}> ${DATISTRUTC} </TD> " >> ${PAGE}

# Check IP-addresses
  HOSTBGC=""
#  IPADDR1="`dig +short ${HOSTNAME}|grep [0-9]`"
#  if [ "${INETIP}" != "" ] && [ "${IPADDR1}" = "${INETIP}" ]; then
#    echo "${IPADDR1} = ${INETIP}"
#    HOSTBGC=lightgreen
#  fi
#  echo "    <TD BGCOLOR=${HOSTBGC}> ${HOSTNAME} </TD> " >> ${PAGE}
#  echo "    <TD BGCOLOR=${HOSTBGC}> ${INETIP} </TD> " >> ${PAGE}

# Own IP-addrsses
  echo "    <TD BGCOLOR=${HOSTBGC}> ${IPADDR} </TD> " >> ${PAGE}

# Applics

  echo "    <TD> ${APPLICS} </TD> " >> ${PAGE}

# SPEEDTEST
#  STBGC=""
#  if [ "${STP}" = "" ]; then
#    echo "    <TD BGCOLOR=${STBGC}> </TD> " >> ${PAGE}
#  else
#    echo "    <TD BGCOLOR=${STBGC}> P:${STP} <BR> D:${STD} <BR> U:${STU} </TD> " >> ${PAGE}
#  fi

# Top filled (%) FS (DF)
  touch ${TMP}
  cat ${LASTFILE}|egrep -v 'redhat|media'|grep '% /'|grep -v Use|while read LINE
  do
    IDX="`/usr/bin/expr index \"${LINE}\" '%'`"
    if [ ${IDX} -gt 0 ]; then
      IDX="`expr ${IDX} - 3`"
      FSINFO="`/usr/bin/expr substr \"${LINE}\" ${IDX} 50`"
      echo "${FSINFO}" >> ${TMP}
    fi
  done  # cat
  LASTLINE="`cat ${TMP}|sort -n|tail -1`"
  rm ${TMP}
  BGC="lightgreen"
  LASTNUM="`echo ${LASTLINE}|cut -d\% -f1`"
  if [ ${LASTNUM} -gt 50 ]; then
    BGC="yellow"
  fi
  if [ ${LASTNUM} -gt 75 ]; then
    BGC="orange"
  fi
  if [ ${LASTNUM} -gt 90 ]; then
    BGC="red"
  fi
  echo "    <TD BGCOLOR=${BGC}> ${LASTLINE} </TD> " >> ${PAGE}
  
# Uptime
  BGC=""
  BGC="red"
  if [ ${UPTIMEDAYS} -ge 7 ]; then
    BGC="orange"
  fi
  if [ ${UPTIMEDAYS} -ge 14 ]; then
    BGC="yellow"
  fi
  if [ ${UPTIMEDAYS} -ge 30 ]; then
    BGC="lightgreen"
  fi
  if [ ${UPTIMEDAYS} -ge 365 ]; then
    BGC="blue"
  fi
  if [ ${UPTIMEDAYS} -gt 0 ]; then
    echo "    <TD BGCOLOR=${BGC}> ${UPTIMEDAYS} days </TD> " >> ${PAGE}
  else
    echo "    <TD BGCOLOR=${BGC}> ${UPTIMEHRS} hours </TD> " >> ${PAGE}
  fi

# uname -r, --kernel-release     print the kernel release
  echo "    <TD> ${UNAME} </TD> " >> ${PAGE}

# Systemload
  SLBGC=""
  if [ ${SLOAD1M} -ge 0 ]; then
    SLBGC="lightgreen"
  fi
  if [ ${SLOAD1M} -ge 1 ]; then
    SLBGC="yellow"
  fi
  if [ ${SLOAD1M} -ge 3 ]; then
    SLBGC="orange"
  fi
  if [ ${SLOAD1M} -ge 5 ]; then
    SLBGC="red"
  fi
  echo "    <TD BGCOLOR=${SLBGC}> ${SYSTEMLOAD} </TD> " >> ${PAGE}

  echo "    <TD> ${USERS} </TD> " >> ${PAGE}

  echo "    <TD> ${PGMV} </TD> " >> ${PAGE}

#  echo "    <TD > ${UPTIMESTR} </TD> " >> ${PAGE}
  
  echo "   </TR> " >> ${PAGE}

  echo "${FNAME}|${USERS}|${DATISTRUTC}|${PGMV}|"
done  # ls -1

echo "   <TR> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "       <B>Legenda:</B> " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "      <FONT COLOR=green> green <1 Hr <BR>" >> ${PAGE}
echo "      <FONT COLOR=yellow> yellow >1 Hr <BR>" >> ${PAGE}
echo "      <FONT COLOR=orange> orange >2 Hr <BR>" >> ${PAGE}
echo "      <FONT COLOR=red> red >4 Hr <BR>" >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
#echo "       <FONT COLOR=green> HOSTNAME = INEIP</FONT> " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
#echo "       <FONT COLOR=green> HOSTNAME = INEIP</FONT> " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
#echo "     <TD> " >> ${PAGE}
#echo "       <FONT COLOR=''> SPEEDTEST <BR>" >> ${PAGE}
#echo "       <FONT COLOR=''> Ping, Download, Upload <BR>" >> ${PAGE}
#echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "      <FONT COLOR=green> green <=50% <BR>" >> ${PAGE}
echo "      <FONT COLOR=yellow> yellow >50% <BR>" >> ${PAGE}
echo "      <FONT COLOR=orange> orange >75% <BR>" >> ${PAGE}
echo "      <FONT COLOR=red> red >90% <BR>" >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "      <FONT COLOR=green> green >30 days  <BR>" >> ${PAGE}
echo "      <FONT COLOR=yellow> yellow >14 days  <BR>" >> ${PAGE}
echo "      <FONT COLOR=orange> orange >7 days  <BR>" >> ${PAGE}
echo "      <FONT COLOR=red> red  <7 days  <BR>" >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "      <FONT COLOR=green> green =0  <BR>" >> ${PAGE}
echo "      <FONT COLOR=yellow> yellow >1  <BR>" >> ${PAGE}
echo "      <FONT COLOR=orange> orange >3 <BR>" >> ${PAGE}
echo "      <FONT COLOR=red> red >5 <BR>" >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "       users " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "       pgm " >> ${PAGE}
echo "     </TD> " >> ${PAGE}
echo "   </TR> " >> ${PAGE}

echo "  </TABLE>" >> ${PAGE}

echo "  <BR>" >> ${PAGE}


echo "<TABLE BORDER=0 WIDTH='100%'>" >> ${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:Maarten.deBoer@Atos.net>Maarten de Boer</A> |Last Update: `date` [${PGM} v${VER}] <BR>" >> ${PAGE}
echo "For internal use (c) Atos S.A. `date +%Y` all rights reserved. Reproduction in whole or in part is prohibited without the written consent of Atos SA." >> ${PAGE}
echo "      </CENTER>" >> ${PAGE}
echo "    </FONT>" >> ${PAGE}
echo "  </TD>" >> ${PAGE}
echo "</TR>" >> ${PAGE}
echo "</TABLE>" >> ${PAGE}
echo "</BODY>" >> ${PAGE}
echo "</HTML>" >> ${PAGE}

exit 0

