
#!/bin/bash
# File	: proc_asup-files_for_uptime.sh
# By	: Maarten.deBoer@atos.net, 150925
# Subject	: Script to process ASUP-files for uptime info
#set -x
#(0.2)	: Mod. ASUPDATADIR
#(0.3)	: Mod. search for uptime in CF-MONITOR.txt whne UPTIME=0
#(0.4)	: Some mod in uptime check from ASUP data
#(0.5),171026	: Update ASUPDATADIR/filenames
#(0.6),180129	:  Added some echo VARs, Mod cut -d\/ -f6, Added sp-latest-configuration.txt & storage_failover.xml
#(0.7),180420	: WEEK -> date +%V (ISO weeknrs)
PGM="`basename $0|cut -d\. -f1`" 
VER="0.6"
TMP="/tmp/${PGM}.$$"

BASEDIR="`pwd | sed 's/scripts//'|sed 's/bin//'`"
LOG="${BASEDIR}/log/${PGM}.log"
OUT="controllers-uptime.csv"
DATADIR="${BASEDIR}/data"
COUNTRY="`echo ${BASEDIR}| cut -d\/ -f6`"

ASUPDATADIR="/appl/asup/data"

MAILTO="maarten.deboer@atos.net"

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

# Read Functions file
source ./afsp-db_functions.sh
DB_FUNC_VER

echo "BASEDIR=${BASEDIR}"
echo "COUNTRY=${COUNTRY}"
echo "DATADIR=${DATADIR}"
sleep 1

if [ ! -d ${BASEDIR}/data/uptime ]; then
  mkdir ${BASEDIR}/data/uptime
fi

  echo "${COUNTRY} ..."
  echo "# Processed by ${PGM} v${VER} at `hostname`" > ${TMP}
  OUT="${BASEDIR}/data/uptime/controllers-uptime.csv"
  # If database, then cd to database
  if [ -d /appl/mdr/mdrglob/afsp/${COUNTRY}/data/database ]; then
    cd /appl/mdr/mdrglob/afsp/${COUNTRY}/data/database
	ls -1 | while read DBFILE
	do
#	  echo "${DBFILE} ..."
	  DB_READ ${DBFILE}

	  if [ "${DB_CONTROLER_NAME}" != "" ] && [ "${DB_SERIAL_NUMBER}" != "" ]; then
	    DAYS=""
		echo "${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME} ... "
	    if [ -f ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/messages.log.gz ]; then
		  UPTIMELINE="`zcat ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/messages.log.gz|grep 'kern.uptime.filer:info'|tail -1`"
		  UPTI34="`echo ${UPTIMELINE}|cut -d\] -f2|awk '{print $3,$4}'| sed -e 's/,//g'`"
		  DAYS="`echo ${UPTI34}| grep day|cut -d' ' -f1`"
		  echo "  (messages.log.gz for uptime.filer:info) => ${DAYS}days "
		fi  # messages.log.gz

		if [ "${DAYS}" = "" ]; then
		  DAYS="0"
		  if [ -f ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/CF-MONITOR.txt ]; then
		    UPTIMEMS="`grep uptime ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/CF-MONITOR.txt|tail -1|awk -F\: '{print $2}'|awk '{print $1}'`"
		    DAYS="`expr ${UPTIMEMS} / 86400000`"
		    echo "  (CF-MONITOR.txt for uptime: ${UPTIMEMS}ms) => ${DAYS}days "
	      fi  # CF-MONITOR.txt
		  if [ -f ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/sp-latest-configuration.txt ]; then
		    UPTIMELINE=`grep "load average" ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/sp-latest-configuration.txt|head -1`
            DAYS=`echo ${UPTIMELINE}|awk '{print $3}'`
			echo "  (sp-latest-configuration.txt for uptime) => ${DAYS}days"
	      fi  # sp-latest-configuration.txt
		  if [ -f ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/storage_failover.xml ]; then
		    UPTIMELINE=`grep '<total_system_uptime>' ${ASUPDATADIR}/${DB_SERIAL_NUMBER}_${DB_CONTROLER_NAME}/storage_failover.xml` 
			UPTIMES=`echo ${UPTIMELINE}|cut -d\> -f2| cut -d\< -f1`
#echo "UPTIMES=${UPTIMES}"
			if [ "${UPTIMES}" != "" ]; then
			  DAYS="`expr ${UPTIMES} / 86400000`"
			fi
		    echo "  (storage_failover.xml for uptime: ${UPTIMES}s) => ${DAYS}days "
		   fi  # storage_failover.xml
        fi  # DAYS=""

		echo "${DB_CONTROLER_NAME};${DAYS} days;"|tee -a ${TMP}

	  fi  # NAME && SER.NR

	done  # FILE
  fi  # database

  cp ${TMP} ${OUT}


# Create week dir
# etc/month-week.csv
ETC="${BASEDIR}/etc/date-week-month.csv"
if [ -f ${ETC} ]; then
  DATE="`date +%F`"
#  WEEK="`grep ${DATE} ${ETC}|awk -F\; '{print $2}'`"
  WEEK="`date +%Y'w'%V`"
  echo "${DATE} -> ${WEEK}"
  # Check if new week dir exists, otherwise create
  if [ ! -d ${BASEDIR}/data/uptime/${WEEK} ]; then
    mkdir ${BASEDIR}/data/uptime/${WEEK}
    cp ${OUT} ${BASEDIR}/data/uptime/${WEEK}/
    echo "  Created ${BASEDIR}/data/uptime/${WEEK}/ and copied ${OUT} to it"|tee -a ${LOG}
  fi  # -d
fi  # date-week-month

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

