
#!/bin/bash
# File	: upd_decarbon.sh
# By	: Maarten.deBoer, 201019
# Subject	: Script to update the decarbon website
#(0.2),201020	: Add unknown systems in 1st row
#(0.3),201103	: Mod. to (new) structure
#(0.4),201103	: Upd. some text
#(0.5),201104	: Upd. with newest file in DATADIR
#(0.6),201104	: Added DETAIL, SYSNAME -> CLUSTERNAME
#(0.7),201105	: Added overview of INPUT-dir (input.html)
#(0.8),201105	: Add HTML_TOP(), HTML_FOOTER()
#(0.9).201105	: Add mailing some pages to extern
PGM="`basename $0|cut -d\. -f1`"
VER="0.9"
TMP="/tmp/${PGM}.$$.asc"
BASEDIR="/appl/netapp/decarbon"
LOG="${BASEDIR}/log/${PGM}.log"
RCFILE="${BASEDIR}/etc/${PGM}.rc"
UP_DATI=`date +%Y-%m-%d-%H-%M-%S`
MAIL=1
MAILTO="maarten.deboer@atos.net"
TXTFILE="${BASEDIR}/etc/${PGM}.txt"
#HTMLMAILTO="atos@agrarix.it"

DATADIR="${BASEDIR}/data"
ETCDIR="${BASEDIR}/etc"
DETAILDIR="${BASEDIR}/details"
INDIR="${BASEDIR}/input"

PAGEDIR="/appl/netapp/html/decarbon"
TITLE="Storage DeCarbonize Dashboard"

#PROCDATE=`date +%Y-%m-%d --set=yesterday`


HTML_TOP()
{
  HTML_PAGE="${1}"
  touch ${HTML_PAGE}
  echo "<!DOCTYPE html>" > ${HTML_PAGE}
  echo "<HTML>" >> ${HTML_PAGE}
  echo "<HEAD>" >> ${HTML_PAGE}
  echo "<META charset='UTF-8'>" >> ${HTML_PAGE}
  echo "<META name='author' content='Maarten de Boer' />" >> ${HTML_PAGE}
  echo "<META name='author' content='Maarten de Boer' />" >> ${HTML_PAGE}
  echo "<META name='generator' content='${PGM} v${VER}' />">> ${HTML_PAGE}
  echo "<META name='up-dati' content='${UP_DATI}' />">> ${HTML_PAGE}
  echo "<TITLE>${TITLE}</TITLE>" >> ${HTML_PAGE}
  echo "<basefont face='verdana'>" >> ${HTML_PAGE}
  echo "</HEAD>" >> ${HTML_PAGE}

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

  echo "<BODY aLink=red bgColor=lightgrey link=red text=#000000 vLink=red>" >> ${HTML_PAGE}
  echo "<TABLE BORDER=0 WIDTH='100%' ID='top-part'>" >> ${HTML_PAGE}
  echo "  <TR HEIGHT=40px>" >> ${HTML_PAGE}
#echo "  <TD BGCOLOR=#5BC3FC>" >> ${PAGE}
  echo "    <TD BGCOLOR=lightgreen>" >> ${HTML_PAGE}
  echo "      <FONT COLOR=darkgrey face='verdana' size='8'> <B>${TITLE}</B> </FONT>" >> ${HTML_PAGE}
  echo "      <BR>" >> ${HTML_PAGE}
#  echo "      <DIV align=left>" >> ${HTML_PAGE}
#  echo "      <FONT COLOR=black face='verdana' size='3'>For storage environments in country => </A>  </FONT> " >> ${HTML_PAGE}
#  echo "     </B> </FONT> " >> ${HTML_PAGE}
  echo "      <DIV align=right>" >> ${HTML_PAGE}
  echo "      <FONT COLOR=black face='verdana' size='1'>At `hostname` </B> </FONT>" >> ${HTML_PAGE}
  echo "      </DIV>" >> ${HTML_PAGE}
  echo "    </TD>" >> ${HTML_PAGE}
  echo "  </TR>" >> ${HTML_PAGE}
  echo "</TABLE>" >> ${HTML_PAGE}
}

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


echo "`date` ${PGM} ${VER} started."|tee -a ${LOG}
touch ${TMP}

if [ -f ${RCFILE} ]; then
  echo "  RCFILE(${RCFILE}) found. Using it ..."|tee -a ${LOG}
  . ${RCFILE}
fi

CLUSTERFILE="${BASEDIR}/etc/country2systems2cluster2vendor.csv"
PAGE="${PAGEDIR}/index.html"
#DATAFILE="${BASEDIR}/data/country-systems_${PROCDATE}.csv"
#UNKNOWNFILE="${BASEDIR}/data/unknown-systems_${PROCDATE}.csv"

echo "PGM=${PGM}"
echo "VER=${VER}"
echo "LOG=${LOG}"
echo "CLUSTERFILE=${CLUSTERFILE}"
echo "DATADIR=${DATADIR}"
echo "DATAFILE=${DATAFILE}"
echo "DETAILDIR=${DETAILDIR}"
echo "INDIR=${INDIR}"
echo "PAGEDIR=${PAGEDIR}"
echo "PAGE=${PAGE}"
#echo "PROCDATE=${PROCDATE}"
echo "TITLE=${TITLE}"
#echo "UNKNOWNFILE=${UNKNOWNFILE}"
sleep 1

if [ ! -f ${CLUSTERFILE} ]; then
  echo "  NO NO CLUSTER-file (${CLUSTERFILE}) found. Exiting ..."|tee -a ${LOG}
  exit 4
fi
if [ ! -d ${DATADIR} ]; then
  echo "  NO DATA-dir (${DATADIR}) found. Exiting ..."|tee -a ${LOG}
  exit 5
fi
if [ ! -d ${DETAILDIR} ]; then
  echo "  NO DETAIL-dir (${DETAILDIR}) found. Exiting ..."|tee -a ${LOG}
  exit 6
fi

HTML_TOP ${PAGE}

echo "<TABLE BORDER=1 WIDTH='100%' cellspacing='0' ID='dashboard'>" >> ${PAGE}
echo "  <TR>" >> ${PAGE}
echo "    <TD>" >>  ${PAGE}
echo "      <FONT COLOR=black face='verdana' size='2'><B>Unknown</FONT>" >> ${PAGE}
echo "    </TD>" >>  ${PAGE}


# Countries
echo "  Countries ..."
cat ${CLUSTERFILE}|grep -v ^#|awk -F\; '{print $1}'|sort -u|while read COUNTRY REST
do
#  echo "  ${COUNTRY} "
# selecte LAST file available
  DATAFILE=`grep "^${COUNTRY};" ${DATADIR}/country-systems*.csv|cut -d\: -f1|sort -u|tail -1`
# Get PROCDATE /country
  PROCDATE=`echo ${DATAFILE}|cut -d\_ -f2|cut -d\. -f1`
  if [ "${PROCDATE}" != "" ]; then
    PROCDATE="(${PROCDATE})"
  fi

  echo "    <TD>" >>  ${PAGE}
  echo "      <FONT COLOR=black face='verdana' size='2'><B><CENTER>${COUNTRY} ${PROCDATE}</FONT>" >> ${PAGE}
  echo "    </TD>" >>  ${PAGE}
done  # ${CLUSTERFILE}
echo "  </TR>" >> ${PAGE}

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

echo "    <TD>" >>  ${PAGE}
# Check if a unknown-file has some information
cat ../data/unknown-systems_*.csv|grep -v ^#|awk -F\; '{print $2}'|sort -u|while read LINE
  do
    echo "    <FONT COLOR=red face='verdana' size='2'> ${LINE} <BR> </FONT> <BR>" >> ${PAGE}
  done  # cat
echo "    </TD>" >>  ${PAGE}


echo "  Country info ..."

cat ${CLUSTERFILE}|grep -v ^#|awk -F\; '{print $1}'|sort -u|while read COUNTRY REST
do
  echo "  ${COUNTRY} "
  echo "    <TD>" >>  ${PAGE}

# selecte LAST file available
  DATAFILE=`grep "^${COUNTRY};" ${DATADIR}/country-systems*.csv|cut -d\: -f1|sort -u|tail -1`

  PROCDATE=`echo ${DATAFILE}|cut -d\_ -f2|cut -d\. -f1`
  if [ "${DATAFILE}" != "" ]; then

# ---------------------------------------
# SYStem
# country; system(cluster / HA)name; vendor ; SSD [GiB]; HDD [GiB]; Legay(7mode) [GiB]; " 
  cat ${DATAFILE}|grep "^${COUNTRY};"|sort -u|grep -v ^#|sort|awk -F\; '{print $2,$3}'|while read CLUSTERNAME VENDOR REST
  do
    echo "   ${CLUSTERNAME} (${VENDOR}) [${PROCDATE}]"

# When a SYStemNAME, then process for html-PAGE
    if [ "${CLUSTERNAME}" != "" ]; then
# update DETAILs
# nlnaf100;nlnaf100-01;n01a0601;hdd;100402
      if [ -f ${DETAILDIR}/${CLUSTERNAME}_${PROCDATE}.csv ]; then
        echo "  ${DETAILDIR}/${CLUSTERNAME}_${PROCDATE}.csv"
        DPAGE="${PAGEDIR}/${CLUSTERNAME}.html"
        HTML_TOP ${DPAGE}

        echo "    <TABLE border=1 cellspacing='0' ID='detail-page'>" >> ${DPAGE}
        echo "      <TR>" >> ${DPAGE}
        echo "        <TH> CLUSTERNAME </TH>" >> ${DPAGE}
        echo "        <TH> SYSTEMNAME </TH>" >> ${DPAGE}
        echo "        <TH> AGGR / POOL-NAME </TH>" >> ${DPAGE}
        echo "        <TH> TYPE </TH>" >> ${DPAGE}
        echo "        <TH> SIZE_GB </TH>" >> ${DPAGE}
        echo "      </TR>" >> ${DPAGE}

        cat ${DETAILDIR}/${CLUSTERNAME}_${PROCDATE}.csv|sort -u|grep -v ^#|awk -F\; '{print $1,$2,$3,$4,$5}'|while read CLUSTERNAME SYSTEMNAME AGGRNAME TYPE SIZE_GB REST2
        do
          echo "      <TR>" >> ${DPAGE}
          echo "        <TD> ${CLUSTERNAME} </TD>" >> ${DPAGE}
          echo "        <TD> ${SYSTEMNAME} </TD>" >> ${DPAGE}
          echo "        <TD> ${AGGRNAME} </TD>" >> ${DPAGE}
          if [ "${TYPE}" = "ssd" ]; then
            echo "        <TD BGCOLOR=green> ${TYPE} </TD>" >> ${DPAGE}
          else
            if [ "${TYPE}" = "legacy" ]; then
              echo "        <TD BGCOLOR=red> ${TYPE} </TD>" >> ${DPAGE}
            else
              echo "        <TD BGCOLOR=orange> ${TYPE} </TD>" >> ${DPAGE}
            fi
          fi  # TYPE
          echo "        <TD> ${SIZE_GB} </TD>" >> ${DPAGE}
          echo "      </TR>" >> ${DPAGE}
        done  # cat .csv
        echo "      <TR>" >> ${DPAGE}
        echo "        <TH> Name of location / cluster </TH>" >> ${DPAGE}
        echo "        <TH> Name of the box / system </TH>" >> ${DPAGE}
        echo "        <TH> Name of the pool of disken of one storage class </TH>" >> ${DPAGE}
        echo "        <TH> Type of disks [sdd, hdd, hybrid, legacy] </TH>" >> ${DPAGE}
        echo "        <TH> Size in GiB </TH>" >> ${DPAGE}
        echo "      </TR>" >> ${DPAGE}
        echo "    </TABLE>" >> ${DPAGE}
        HTML_FOOTER ${DPAGE}
        if [ "${HTMLMAILTO}" != "" ]; then
          cat ${DPAGE}|mailx -s "html:${CLUSTERNAME}.html" ${HTMLMAILTO}
          echo "  Mailed ${CLUSTERNAME}.html to ${HTMLMAILTO}"|tee -a ${LOG}
        fi
      fi  # DETAILs

      SSD=`grep "${COUNTRY};" ${DATAFILE}|grep "${CLUSTERNAME};"|sort -u|grep -v ^#|sort|awk -F\; '{print $4}'`
# Make TB's of it
      if [ "${SSD}" = "" ]; then
        SSD_TB=0
      else
        SSD_TB=`expr ${SSD} / 1024`
      fi
      HDD=`grep "${COUNTRY};" ${DATAFILE}|grep "${CLUSTERNAME};"|sort -u|grep -v ^#|sort|awk -F\; '{print $5}'`
# Make TB's of it
      if [ "${HDD}" = "" ]; then
        HDD_TB=0
      else
        HDD_TB=`expr ${HDD} / 1024`
      fi
      OLD=`grep "${COUNTRY};" ${DATAFILE}|grep "${CLUSTERNAME};"|sort -u|grep -v ^#|sort|awk -F\; '{print $6}'`
# Make TB's of it
      if [ "${OLD}" = "" ]; then
        OLD_TB=0
      else
        OLD_TB=`expr ${OLD} / 1024`
      fi
      echo "     S:${SSD_TB}TiB(${SSD}GB) H:${HDD_TB}TiB(${HDD}GB) O:${OLD_TB}TiB(${OLD}GB) "
  
      echo "      <TABLE BORDER=0 width='0%' cellspacing='0' ID='pct-bar'>" >> ${PAGE}
      echo "        <TR>" >> ${PAGE}

# Calculate PCT for "bar"-graph
      TTL=`expr ${SSD} + ${HDD} + ${OLD}`
      if [ ${TTL} -gt 0 ]; then
        PCT1=`expr ${SSD} \* 100 / ${TTL}`
        PCT2=`expr ${HDD} \* 100 / ${TTL}`
        PCT3=`expr ${OLD} \* 100 / ${TTL}`
      else
        PCT1=0
        PCT2=0
        PCT3=0
      fi
      echo "${PCT1} ${PCT2} ${PCT3} / ${TTL}"


      V=""
      if [ "${VENDOR}" = "netapp" ]; then
        V="N"
      fi
      if [ "${VENDOR}" = "emc" ]; then
        V="E"
      fi
      if [ "${VENDOR}" = "hds" ]; then
        V="H"
      fi
#echo "VENDOR=${VENDOR} V=${V}"
      if [ -f ${PAGEDIR}/${CLUSTERNAME}.html ]; then
        echo "          <TD WIDTH='1%'><FONT COLOR=black face='verdana' size='2'><A HREF=${CLUSTERNAME}.html>${V}:${CLUSTERNAME}:</A></FONT> </TD>" >> ${PAGE}
      else
        echo "          <TD WIDTH='1%'><FONT COLOR=black face='verdana' size='2'>${V}:${CLUSTERNAME}:</FONT> </TD>" >> ${PAGE}
      fi

      echo "          <TD WIDTH=${PCT1}% BGCOLOR=green><FONT COLOR=black face='verdana' size='2'>${SSD_TB}</FONT> </TD>" >> ${PAGE}
      echo "          <TD WIDTH=${PCT2}% BGCOLOR=orange><FONT COLOR=black face='verdana' size='2'>${HDD_TB}</FONT> </TD>" >> ${PAGE}
      echo "          <TD WIDTH=${PCT3}% BGCOLOR=red><FONT COLOR=black face='verdana' size='2'>${OLD_TB}</FONT> </TD>" >> ${PAGE}

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

    fi  # CLUSTERNAME <> ""

  done  # CLUSTERNAME

  fi  # DATAFILE <> ""

  echo "    </TD>" >>  ${PAGE}
done  # ${CLUSTERFILE}

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

# EXTRA
echo "<HR>" >> ${PAGE}
echo "<TABLE BORDER=1 cellspacing='0' ID='buttons'>" >> ${PAGE}
echo "  <TR>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='3'> EXTRA: </FONT> </TD>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='3'> <A HREF=inputdir.html>inputdir</A> </FONT> </TD>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='3'> <A HREF=\"https://nlxnetapp02.bcklan.ao-srv.com:3443/d/sPcDl22Mz/storage-decarbonize?orgId=4\" target=_blank >Grafana(ext)</A> </FONT> </TD>" >> ${PAGE}
echo "  </TR>" >> ${PAGE}
echo "</TABLE>" >> ${PAGE}

echo "<HR>" >> ${PAGE}
echo "<TABLE BORDER=0 ID='legenda'>" >> ${PAGE}
echo "  <TR>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='2'> <B> Legenda: </FONT> </TD>" >> ${PAGE}
echo "    <TD></TD>" >> ${PAGE}
echo "    <TD></TD>" >> ${PAGE}
echo "  </TR>" >> ${PAGE}
echo "  <TR>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='2'>E = <IMG SRC=EMC2.jpg height=20%> </FONT> </TD>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='2'>H = <IMG SRC=HDS.png height=10%> </FONT> </TD>" >> ${PAGE}
echo "    <TD><FONT COLOR=black face='verdana' size='2'>N = <IMG SRC=NetApp.jpg height=20%> </FONT> </TD>" >> ${PAGE}
echo "  </TR>" >> ${PAGE}
echo "  <TR>" >> ${PAGE}
echo "    <TD BGCOLOR=green><FONT COLOR=black face='verdana' size='2'>SSD <B>TiB</FONT> </TD>" >> ${PAGE}
echo "    <TD BGCOLOR=orange><FONT COLOR=black face='verdana' size='2'>HDD <B>TiB</FONT> </TD>" >> ${PAGE}
echo "    <TD BGCOLOR=red><FONT COLOR=black face='verdana' size='2'>Legacy(N:7mode) <B>TiB</FONT> </TD>" >> ${PAGE}
echo "  </TR>" >> ${PAGE}
echo "</TABLE>" >> ${PAGE}

# When (explanation)TXT-file
if [ -f ${TXTFILE} ]; then
  echo "<HR>" >> ${PAGE}
  echo "  <FONT COLOR=black face='verdana' size='2'>" >> ${PAGE}
  cat ${TXTFILE}|while read LINE
  do
    echo "${LINE} <BR>" >> ${PAGE}
  done  # TXTFILE
  echo "  </FONT>" >> ${PAGE}
fi  # TXTFILE


HTML_FOOTER ${PAGE}

# INPUTdir-overview
IPAGE="${PAGEDIR}/inputdir.html"
HTML_TOP ${IPAGE}
echo "  <TABLE border=1 cellspacing='0' ID='inputdir'>" >> ${IPAGE}
echo "    <TR>" >> ${IPAGE}
echo "      <TH> FILENAME in input-dir: </TD>" >> ${IPAGE}
echo "    </TR>" >> ${IPAGE}
ls -1tr ${INDIR}|while read LINE
do
  echo "    <TR>" >> ${IPAGE}
  echo "      <TD> ${LINE} </TD>" >> ${IPAGE}
  echo "    </TR>" >> ${IPAGE}
done  # ls -1
echo "  </TABLE>" >> ${IPAGE}
HTML_FOOTER ${IPAGE}


if [ "${HTMLMAILTO}" != "" ]; then
  cat ${PAGE}|mailx -s "html:decarbon.html" ${HTMLMAILTO}
  cat ${IPAGE}|mailx -s "html:inputdir.html" ${HTMLMAILTO}
  echo "  Mailed HTML-pages to ${HTMLMAILTO}"|tee -a ${LOG}
fi

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

