
#!/bin/sh
# File	: upd_cx-info.sh
# By	: Maarten.deBoer@Atos.net, 240212
# Subject	: Script to Update CX-info-web-page
#(0.2),240212	: Add * version-file
#(0.3),240213	: Added FONTSIZE, ping CX_IPADDR
#(0.4),240213	: Mod BGcolors
#(0.5),240215	: Mod's
#(0.6),240313	: Add lightblue (hostname <> IP-suffix)
#(0.7),240322	: Add CX temp.
#(0.8),240822	: Add HEADER, temp color
#(0.9),240826	: Add Save Temperatore-data.CSV
#(0.10),240827	: Add Nexus temp
#(0.11),240918	: Add "air outlet"
#(0.12),240925	: Mod. grep "${FILTER}" to egrep "${FILTER}"
#(0.13),250206	: Upd; no ping, no temp
PGM=`basename $0|cut -d\. -f1`
VER="0.13"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
RCFILE="${HOME}/etc/${PGM}.rc"
FONTSIZE1=6
FONTSIZE2=5
REMARKS=""

TEMP_DATA_CSV="${HOME}/data/${PGM}_temperature.csv"
TEMP_INFO_HTML="temp-info.html"

#CX_HOSTS="${HOME}/etc/system_ping.hosts"
CX_HOSTS="${HOME}/etc/cisco.hosts"
CX_DIR="/CX-info"
FILTER="CX"
FS_1=5
FS_H=5
HEADER="<A HREF='/techlab'>TechLab:</A> Cisco Switch page."

BASEDIR=""
WEBDIR="/var/www/html/techlab/cx"
HTML="${BASEDIR}/${WEBDIR}/index.html"
EXTURL="http://10.90.32.23/techlab/cx/"
TITLE="TechLab: Cisco Switch page"

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

echo "<TABLE BORDER=0 WIDTH='100%' cellspacing='0'>" >> ${HTML2}
echo "<TR WIDTH=100% HEIGHT=40px>" >> ${HTML2}
echo "  <TD bgColor=#0066A1>" >> ${HTML2}
echo "    <FONT COLOR=white face='verdana' size=${FS_H}> ${HEADER} <BR> </FONT>" >> ${HTML2}
echo "    <DIV align=right>" >> ${HTML2}
echo "      <FONT COLOR=white face='verdana' size='-3'> For internal use. (c) Atos `date +%Y` </B> </FONT>" >> ${HTML2}
echo "    </DIV>" >> ${HTML2}
echo "  </TD>" >> ${HTML2}
echo "</TR>" >> ${HTML2}
echo "</TABLE>" >> ${HTML2}

#----------------------------------------------------------------
echo "<TABLE BORDER=1 WIDTH='100%' cellspacing='0'>" >> ${HTML2}
echo "  <TR WIDTH=100% >" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> PORT: </TH>" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> NAME: </TH>" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> STATUS: </TH>" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> VLAN: </TH>" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> DUPLEX: </TH>" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> SPEED: </TH>" >> ${HTML2}
echo "    <TH><FONT SIZE=${FONTSIZE2}> TYPE: </TH>" >> ${HTML2}
echo "  </TR>" >> ${HTML2}

LAST_STATUS_FILE=`ls -1 ${CX_DIR}/${DIR}/*interface-status*| tail -1`
echo "    LAST_STATUS_FILE=${LAST_STATUS_FILE}"

cat ${LAST_STATUS_FILE}|grep -vi port|while read LINE2
do
  PORT=`echo ${LINE2}|awk '{print $1}'`
  NAME=`echo ${LINE2}|awk '{print $2}'`
  STATUS=`echo ${LINE2}|awk '{print $3}'`
  VLAN=`echo ${LINE2}|awk '{print $4}'`
  DUPLEX=`echo ${LINE2}|awk '{print $5}'`
  SPEED=`echo ${LINE2}|awk '{print $6}'`
  TYPE=`echo ${LINE2}|awk '{print $7}'`

#  echo "      STATUS=${STATUS}|"

  STATUS_BGC=""
  case ${STATUS} in
    "connected") STATUS_BGC="lightgreen" ;;
    "disabled") STATUS_BGC="yellow" ;;
    "notconnect") STATUS_BGC="orange" ;;
  esac
  NAME_BGC=""
  ANSW=`echo ${NAME}|grep -v '^-'`
  if [ "${ANSW}" != "" ]; then
    NAME_BGC=${STATUS_BGC}
  fi

  if [ "${STATUS}" != "" ]; then
    echo "  <TR WIDTH=100% >" >> ${HTML2}
    echo "    <TD><FONT SIZE=${FONTSIZE2}> ${PORT} </TD>" >> ${HTML2}
    echo "    <TD BGCOLOR=${NAME_BGC}><FONT SIZE=${FONTSIZE2}> ${NAME} </TD>" >> ${HTML2}
    echo "    <TD BGCOLOR=${STATUS_BGC}><FONT SIZE=${FONTSIZE}> ${STATUS} </TD>" >> ${HTML2}
    echo "    <TD><FONT SIZE=${FONTSIZE2}> ${VLAN} </TD>" >> ${HTML2}
    echo "    <TD><FONT SIZE=${FONTSIZE2}> ${DUPLEX} </TD>" >> ${HTML2}
    echo "    <TD><FONT SIZE=${FONTSIZE2}> ${SPEED} </TD>" >> ${HTML2}
    echo "    <TD><FONT SIZE=${FONTSIZE2}> ${TYPE} </TD>" >> ${HTML2}
    echo "  </TR>" >> ${HTML2}
  fi  # STATUS <> ""
done  # LINE2

echo "</TABLE>" >> ${HTML2}
#----------------------------------------------------------------

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

echo "</BODY>" >> ${HTML2}
echo "</HTML>" >> ${HTML2}
}
# UPD_SUBDIR_PAGE

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using ..."|tee -a ${LOG}
  . ${RCFILE}
fi
if [ "${1}" != "" ]; then
  FILTER="${1}"
fi  # $1
echo "  BASEDIR=${BASEDIR}"
echo "  FILTER=${FILTER}"
echo "  WEBDIR=${WEBDIR}"
echo "  HTML=${HTML}"
echo "  CX_HOSTS=${CX_HOSTS}"
echo "  CX_DIR=${CX_DIR}"
echo "  TITLE=${TITLE}"
sleep 1

if [ ! -f ${CX_HOSTS} ]; then
  echo "  NO CX_HOSTS (${CX_HOSTS}) found. Exiting ..."|tee -a ${LOG}
  exit 4
fi

touch ${TMP}

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> ${TITLE} </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=0 WIDTH='100%' cellspacing='0'>" >> ${HTML}
echo "<TR WIDTH=100% HEIGHT=40px>" >> ${HTML}
echo "  <TD bgColor=#0066A1>" >> ${HTML}
echo "    <FONT COLOR=white face='verdana' size=${FS_H}> ${HEADER} <BR> </FONT>" >> ${HTML}
echo "    <DIV align=right>" >> ${HTML}
echo "      <FONT COLOR=white face='verdana' size='-3'> For internal use. (c) Atos `date +%Y` </B> </FONT>" >> ${HTML}
echo "    </DIV>" >> ${HTML}
echo "  </TD>" >> ${HTML}
echo "</TR>" >> ${HTML}
echo "</TABLE>" >> ${HTML}

echo "<TABLE BORDER=1 WIDTH='100%' cellspacing='0'>" >> ${HTML}

echo "  <TR WIDTH=100% >" >> ${HTML}
echo "    <TH><FONT SIZE=${FONTSIZE1}> CX: </FONT> </TH>" >> ${HTML}
echo "    <TH><FONT SIZE=${FONTSIZE1}> Version info: <BR> </FONT>" >> ${HTML}
echo "    <FONT SIZE=${FONTSIZE2}> * Switch | Ports | Model | SW Version | SW Image</FONT> </TH>" >> ${HTML}
if [ -f ${WEBDIR}/${TEMP_INFO_HTML} ]; then
  echo "    <TH><FONT SIZE=${FONTSIZE1}> <A HREF=\"${TEMP_INFO_HTML}\"> Temp. info: </A> </FONT> </TH>" >> ${HTML}
else
  echo "    <TH><FONT SIZE=${FONTSIZE1}> Temp. info:  </FONT> </TH>" >> ${HTML}
fi  # -f TEMP_INFO_CSV
echo "  </TR>" >> ${HTML}

# _temperature.csv
echo -n "# Header: " >> ${TEMP_DATA_CSV}
ls -1 ${CX_DIR}|egrep "${FILTER}"|while read DIR
do
  echo -n "${DIR};" >> ${TEMP_DATA_CSV}
done  # ls -1
echo "" >> ${TEMP_DATA_CSV}
echo -n "`date +%Y-%m-%d' '%H:%M:%S`;" >> ${TEMP_DATA_CSV}

ls -1 ${CX_DIR}|egrep "${FILTER}"|while read DIR
do
  IP_ADDR=`grep "${DIR}" ${CX_HOSTS}|grep -v ^#|awk '{print $1}'`
  echo "    ${DIR} (${IP_ADDR})"
  sleep 1

  ECP=255
  if [ "${IP_ADDR}" != "" ]; then
# Check/ping IP_ADDR
    ping -c 1 -W 2 ${IP_ADDR}
    ECP=${?}
  fi  # 
  IP_BGC="orange"
  if [ ${ECP} -eq 0 ]; then
    IP_BGC="lightgreen"
  fi
  if [ "${IP_ADDR}" == "" ]; then
    IP_BGC="yellow"
  fi

# lightblue
  CX_NR=`echo ${DIR}|grep CX|sed 's/CX//g'|sed 's/^0//g'`
  IP_SUFFIX=`echo ${IP_ADDR}|cut -d\. -f4`
echo "CX_NR=${CX_NR} IP_SUFFIX=${IP_SUFFIX}"
sleep 1

  if [ "${CX_NR}" != "${IP_SUFFIX}" ]; then
    IP_BGC="lightblue"
    REMARKS="CXname <> IP-suffix"
  fi

# ---------------------------------
# Sub.dir
  SUBDIR="${WEBDIR}/${DIR}"
  if [ ! -d ${SUBDIR} ]; then
    mkdir ${SUBDIR}
  fi  # ! -d
  HTML2="${SUBDIR}/index.html"
  UPD_SUBDIR_PAGE
# ---------------------------------

  echo "  <TR>" >> ${HTML}

  if [ -d ${SUBDIR} ]; then
# CX:
    echo "    <TD BGCOLOR=${IP_BGC}><FONT SIZE=${FONTSIZE1}>" >> ${HTML}
    echo "    <A HREF=\"${DIR}\">${DIR}</A> (${IP_ADDR})" >> ${HTML}
    echo "    </TD>" >> ${HTML}
  else
    echo "    <TD><FONT SIZE=${FONTSIZE1}>" >> ${HTML}
    echo "    ${DIR} (${IP_ADDR}) ${REMARKS}" >> ${HTML}
    echo "    </FONT></TD>" >> ${HTML}
  fi

# Version info:
  echo "    <TD><FONT SIZE=${FONTSIZE1}>" >> ${HTML}
  if [ ${ECP} -eq 0 ]; then
# IOS version
#    VERSION=`grep -i " ios " ${CX_DIR}/${DIR}/CX*version*|tail -1`
    VER_INFO=`grep -i "*" ${CX_DIR}/${DIR}/CX*version*|cut -d\: -f2-|tail -1`
  else
    VER_INFO="No answer on ping"
  fi
  echo "    <FONT SIZE=${FONTSIZE2}>${VER_INFO}</FONT>" >> ${HTML}
  echo "    </TD>" >> ${HTML}

# -----------------
# Temperature Info
# ! NOT when "No answer on ping"
  if [ "${VER_INFO}" != "No answer on ping" ]; then
# Cur. system = ${DIR}
# Select last file
    LAST_ENV_FILE=`ls -1 ${CX_DIR}/${DIR}/CX*show-env-all* |tail -1`
    TEMP_INFO=`cat ${LAST_ENV_FILE}|grep -i temp |grep -i value |cut -d\: -f2|cut -d" " -f2|tail -1`
    echo "    LAST_ENV_FILE=${LAST_FILE} TEMP_INFO=${TEMP_INFO}"

    LAST_ENV_FILE=`ls -1 ${CX_DIR}/${DIR}/CX*_show-environment_*|tail -1`
    TEMP_INFO_NX=`cat ${LAST_ENV_FILE}|egrep "Outlet|FRONT|BACK" |awk '{print $5}'|sort -n|tail -1`
    if [ "${TEMP_INFO_NX}" = "" ]; then
      LAST_ENV_FILE=`ls -1 ${CX_DIR}/${DIR}/CX*_show-environment_*|tail -1`
      TEMP_INFO_NX=`cat ${LAST_ENV_FILE}|grep "air outlet" |awk '{print $4}'|sed 's/C//g'|sort -n|tail -1`
    fi
    echo "    LAST_ENV_FILE=${LAST_ENV_FILE} TEMP_INFO_NX=${TEMP_INFO_NX}|"

    if [ "${TEMP_INFO}" == "" ] && [ "${TEMP_INFO_NX}" != "" ]; then
      TEMP_INFO=${TEMP_INFO_NX}
    fi  # TEMP_INFO
    echo "    TEMP_INFO=${TEMP_INFO}"
    sleep 1

    BGC_TEMP=""
    TEMP=`echo ${TEMP_INFO}|awk '{print $1}'|sed 's/ //g'`
    if [ "${TEMP}" != "" ] && [ ${TEMP} -lt 30 ]; then
      BGC_TEMP="lightgreen"
    fi
    if [ "${TEMP}" != "" ] && [ ${TEMP} -ge 30 ]; then
      BGC_TEMP="yellow"
    fi
    if [ "${TEMP}" != "" ] && [ ${TEMP} -ge 40 ]; then
      BGC_TEMP="orange"
    fi
    if [ "${TEMP}" != "" ] && [ ${TEMP} -ge 50 ]; then
      BGC_TEMP="red"
    fi
    echo "    <TD BGCOLOR=${BGC_TEMP}><FONT SIZE=${FONTSIZE1}> ${TEMP_INFO} " >> ${HTML}
    echo "    </FONT></TD>" >> ${HTML}
  else
    echo "    <TD><FONT SIZE=${FONTSIZE1}>  " >> ${HTML}
  fi  # No answer on ping
  echo "  </TR>" >> ${HTML}

# Add temperature data
  echo -n "${TEMP};" >> ${TEMP_DATA_CSV}
  
done  # DIR

echo ";" >> ${TEMP_DATA_CSV}


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

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

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

rm ${TMP}
echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

