
#!/bin/sh
# File  : ping_netw-nslookup.sh
# By    : MaartenDeBoer.nl, 090611, 110124
# Subject       : Ping filers from $HOME/etc/filers
#(0.2)	: Added nslookup
#(0.3),170511	: Some mod's
#(0.4),170512	: Added ${1}
#(0.5),170918	: Added web-page update + USAGE
#(0.6),170918	: Added colors
#(0.7),180705	: Mod nslookup | head -1
#
#(0.8b?),190311	: Added PREV result
#(0.9b),190311	: Added PREV with color
PGM="`basename $0|cut -d\. -f1`"
VER="0.9b"
TMP="/tmp/${PGM}.$$.csv"
LOG="${HOME}/log/${PGM}.log"
HOSTNAME="`hostname|cut -d\. -f1`"
MAIL=""
MAILTO="maarten@agrarix.nl"
NETW="192.168.178"
NETWEND=254
PART=1
WEBUPD=""
HTML="/mnt/nas/www/domains/status.agrarix.net/pages/netw0rk.html"
DATADIR="${HOME}/data"
DATAFILE="${DATADIR}/ping-netw-lookup.csv"
PREVRESULT=""

USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VER}"
  echo "  options        :"
  echo "    -e|--end     : End of network (${NETWEND})"
  echo "    -h|--help    : this Help"
  echo "    -m|--mail    : do send Mail"
  echo "    -n|--netw    : Netw (part) (${NETW})"
  echo "    -w|--webupd  : Update Web page (${HTML})"
  echo "    -V           : show Version"
  echo "    -x           : set -x"
  echo "    --mailto     : change MAILTO address & do send mail (${MAILTO})"
}
## MAIN
# Check options
if [ $# -eq 0 ]; then
  echo "No option(s) given. So not to know what to do. Exiting..."; echo; USAGE; exit 1
fi
while [ $# -gt 0 ]
  do
  case $1 in
    -m | --mail) MAIL=1 ;;
    -e | --etc) NETWEND=$2; shift ;;
    -n | --netw) NETW=$2; shift ;;
    -w | --webupd) WEBUPD=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known. Exiting..."; echo; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started. With NETW=${NETW}"|tee -a ${LOG}
touch ${TMP} 
echo "DATADIR=${DATADIR}"
echo "DATAFILE=${DATAFILE}"
echo "NETW=${NETW}"
echo "NETWEND=${NETWEND}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "WEBUPD=${WEBUPD}"
echo "HTML=${HTML}"

sleep 1

if [ ! ${DATADIR} ]; then
  mkdir -p ${DATADIR}
  echo "  NO ${DATADIR}. Created one"|tee -a ${LOG}
fi

while [ ${PART} -le ${NETWEND} ]
do
  echo "${NETW}.${PART}"
  echo "<TR>" >> ${TMP}.2

  IPCOL=""
  PINGCOL=""
  PINGSTR=""
  NSLCOL=""
  REMARKS=""
  PREVRESULT=""
  PREVCOL="yellow"

  NSL="`nslookup ${NETW}.${PART}|grep name|cut -d\= -f2|head -1`"
  ping -W 2 -c 1 -W 1 ${NETW}.${PART}
  EC=${?}
  if [ ${EC} -eq 0 ]; then
    echo "${NETW}.${PART};OK;${NSL};" | tee -a ${TMP}
    PINGSTR="OK"
  else
    echo "${NETW}.${PART};no ping;;" | tee -a ${TMP}
    PINGSTR="no ping" 
  fi

  if [ "${PINGSTR}" = "OK" ] && [ "${NSL}" != "" ]; then
    IPCOL="lightgreen"
    PINGCOL="lightgreen"
    NSLCOL="lightgreen"
    REMARKS="All OK"
  fi
  if [ "${PINGSTR}" = "OK" ] && [ "${NSL}" = "" ]; then
    IPCOL="yellow"
    PINGCOL="yellow"
    NSLCOL="yellow"
    REMARKS="Need to be added in DNS?"
  fi
  if [ "${PINGSTR}" != "OK" ] && [ "${NSL}" != "" ]; then
    IPCOL="orange"
    PINGCOL="orange"
    NSLCOL="orange"
    REMARKS="Is in DNS. But NO answer. Right?"
  fi

# Search for PREV
  if [ -f ${DATAFILE} ]; then
    PREVRESULT=`grep "${NETW}.${PART};" ${DATAFILE}|awk -F\; '{print $2}'`
    if [ "${PINGSTR}" = "${PREVRESULT}" ]; then
      PREVCOL=""lightgreen""
    fi
echo "  PREVRESULT=${PREVRESULT}  PREVCOL=${PREVCOL}"
  fi

  echo "  <TD BGCOLOR=${IPCOL}> ${NETW}.${PART} </TD>" >> ${TMP}.2
  echo "  <TD BGCOLOR=${PINGCOL}> ${PINGSTR} </TD>" >> ${TMP}.2
  echo "  <TD BGCOLOR=${NSLCOL}> ${NSL} </TD>" >>  ${TMP}.2
  echo "  <TD> ${REMARKS} </TD>" >>  ${TMP}.2
  echo "  <TD BGCOLOR=${PREVCOL}> ${PREVRESULT} </TD>" >> ${TMP}.2
  echo "</TR>" >> ${TMP}.2
  PART="`expr ${PART} + 1`"
done

if [ ${WEBUPD} ]; then

  echo "<!DOCTYPE html>" > ${HTML}
  echo "<HTML>" >> ${HTML}
  echo "<HEAD>" >> ${HTML}
  echo "<META charset='UTF-8'>" >> ${HTML}
  echo "<META content=Maarten de Boer name=AUTHOR>" >> ${HTML}
  echo "<TITLE> Ping & DNS status: </TITLE>" >> ${HTML}
  echo "<basefont face='verdana'>" >> ${HTML}
  echo "</HEAD>" >> ${HTML}
  echo "<BODY aLink=red bgColor=#D3D0D3 link=red text=#000000 vLink=#ff0000>" >> ${HTML}

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

  echo "<TR>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> IP-addr </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> ping </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> DNS </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> Remarks </TD>" >> ${HTML}
  echo "  <TD BGCOLOR=lightblue> <B> Previous (ping) result </TD>" >> ${HTML}
  echo "</TR>" >> ${HTML}
  
cat ${TMP}.2 >> ${HTML}

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

echo "<TABLE>" >> ${HTML}
echo "<TR> " >> ${HTML}
echo "  <TD bgColor=blue > " >> ${HTML}
echo "    <FONT COLOR=white face='Verdana' size='1'>" >> ${HTML}
echo "      <CENTER>" >> ${HTML}
echo "For (c)INTERNAL USE ONLY | Contact + Content Owner: <A HREF="mailto:Maarten@Agrarix.nl">Maarten de Boer</A> |Last Update: `date`|[${PGM} v${VER}]<BR>" >> ${HTML}
echo "      </CENTER>" >> ${HTML}
echo "    </FONT>" >> ${HTML}
echo "  </TD>" >> ${HTML}
echo "</TR>" >> ${HTML}
echo "</TABLE>" >> ${HTML}

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

fi  # WEBUDP

if [ ${MAIL} ]; then
  date| mailx -a ${TMP} -s ":${HOSTNAME}: ping netw ${NETW} [${PGM} v${VER}]" ${MAILTO}
  echo "`date` Mailed to ${MAILTO}"|tee -a ${LOG}
fi

# (new:) Keep TMP(DATAFILE)
cp ${TMP} ${DATAFILE}

rm ${TMP} ${TMP}.2
exit 0

