
#!/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)	: Added PURGE & separator _ -> .
#(0.13)	: Added MODEL
#(0.14)	: Add Kernel & OS-RELEASE
#(0.15)	: Add BOGOMIPS
#(0.16),190924	: Add HOSTNAME_I
#(0.17),190716	: Mod excl with ^/mnt
PGM="`basename $0|cut -d\. -f1`"
VER="0.17"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
HOSTNAME="`hostname|cut -d\. -f1`"
# Nr of files to be kept after purge. 
PURGE=1 
PURGECNT=10

INDIR="/mnt/nas/DATA/status/mailed"
#PAGE="/var/www/status/index.html"
PAGEDIR="/mnt/nas/www/domains/status.agrarix.net/pages"
LOG="${PAGEDIR}/${PGM}.log"
PAGE="${PAGEDIR}/index.html"

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 "<HTML>" > ${PAGE}
echo "  <HEAD>" >> ${PAGE}
echo "    <TITLE>" >> ${PAGE}
echo "Status page" >> ${PAGE}
echo "    </TITLE>" >> ${PAGE}
echo "  </HEAD>" >> ${PAGE}

echo "  <BODY>" >> ${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-I</B></TD> " >> ${PAGE}
#echo "    <TD><B>MODEL</B></TD> " >> ${PAGE}
#echo "    <TD><B>BOGOMIPS</B></TD> " >> ${PAGE}
echo "    <TD><B>RELEASE</B></TD> " >> ${PAGE}
echo "    <TD><B>INETIP</B></TD> " >> ${PAGE}
echo "    <TD><B>SPEEDTEST</B></TD> " >> ${PAGE}
echo "    <TD><B>Top DF (excl redhat|media|mnt)</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`
  HOSTNAME_I=`grep 'HOSTNAME-I=' ${LASTFILE}|cut -d\= -f2`
  MODEL=`grep 'DMESG-MODEL=' ${LASTFILE}|cut -d\= -f2|cut -d\: -f2`
  ANSW=`echo ${MODEL}|grep -i raspberry` 
  if [ "${ANSW}" = "" ]; then
  # No Raspberry in model. Find
    MODEL=`grep 'DMESG-MODEL=' ${LASTFILE}|cut -d\= -f2`
  fi
  BOGOMIPS=`grep 'BOGOMIPS=' ${LASTFILE}|cut -d\= -f2`
  RELEASE=`grep 'RELEASE=' ${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
  UNAME_R=`grep 'UNAME-R=' ${LASTFILE}|cut -d\= -f2`
  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`
  INETIP=`grep INETIP ${LASTFILE}|cut -d\= -f2`
  PGMV=`grep PGM ${LASTFILE}|cut -d\= -f2|cut -d' ' -f2`

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

# Upload time check
  if [ "${DATISTRUTC}" = "" ]; then
    DATISTRUTC=00000000000000
  fi
  UPLBGC="lightgreen"
  CHKDATISTR="`date --utc --date=\"-12 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`"
  if [ ${DATISTRUTC} -lt ${CHKDATISTR} ]; then
    UPLBGC="orange"
  fi
  CHKDATISTR="`date --utc --date=\"-48 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
  HOSTNAMEBGC=""
  IPADDR1="`dig +short ${HOSTNAME}|grep [0-9]`"
  if [ "${INETIP}" != "" ] && [ "${IPADDR1}" = "${INETIP}" ]; then
    echo "${IPADDR1} = ${INETIP}"
    HOSTNAMEBGC=lightgreen
  fi
  echo "    <TD BGCOLOR=${HOSTBGC}> ${HOSTNAME_I} </TD> " >> ${PAGE}
#  echo "    <TD> ${MODEL} </TD> " >> ${PAGE}
#  echo "    <TD> ${BOGOMIPS} </TD> " >> ${PAGE}
  echo "    <TD> ${RELEASE} </TD> " >> ${PAGE}
  echo "    <TD BGCOLOR=${HOSTBGC}> ${INETIP} </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|/mnt'|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

  echo "    <TD> ${UNAME_R} </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}|${MODEL}|"
  if [ ${PURGE} ]; then  
    FILECNT=`ls -1r ${FNAME}.*|wc -l` 
    REMOVECNT=`expr ${FILECNT} - ${PURGECNT}` 
    if [ ${REMOVECNT} -lt 0 ]; then
      REMOVECNT=0
    fi
    echo "FILECNT=${FILECNT} REMOVECNT=${REMOVECNT}" 
    ls -1r ${FNAME}.*|tail -${REMOVECNT}| while read RMNAME REST 
    do 
      echo " Removing ${RMNAME} ..."|tee -a ${LOG} 
      rm -f ${RMNAME} 
    done # RMNAME 
  fi # PURGE
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 <12 Hr <BR>" >> ${PAGE}
echo "      <FONT COLOR=yellow> yellow >12 Hr <BR>" >> ${PAGE}
echo "      <FONT COLOR=orange> orange >24 Hr <BR>" >> ${PAGE}
echo "      <FONT COLOR=red> red >48 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> model</FONT> " >> ${PAGE}
#echo "     </TD> " >> ${PAGE}
#echo "     <TD> " >> ${PAGE}
#echo "       <FONT> bogomips</FONT> " >> ${PAGE}
#echo "     </TD> " >> ${PAGE}
echo "     <TD> " >> ${PAGE}
echo "       <FONT> release</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 "       <FONT> kernel</FONT> " >> ${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 "Last update `date` ${PGM} v${VER} at ${HOSTNAME}" >> ${PAGE}

echo "  </BODY>" >> ${PAGE}
echo "</HTML>" >> ${PAGE}

exit 0

