
#!/bin/sh
# File	: proc_disk-firmware_csv-files.sh
# By	: Maarten.deBoer@Atos.net, 150512
# Subject	: Script to process disk-firmare csv-files for filers-patches
#(0.2)	: Diff way of counting
#(0.3)	: Added proc sh-file
#(0.4)	: Added IBM & NetApp
PGM="`basename $0|cut -d\. -f1`"
VER="0.4"
TMP="/tmp/${PGM}.$$"

BASEDIR="`pwd | sed 's/scripts//'|sed 's/bin//'`"
ETCENV="${BASEDIR}/etc/afsp.env"
LOG="${BASEDIR}/log/${PGM}.log"

INDIR="${BASEDIR}/incomming"
OUT="${BASEDIR}/data/${PGM}.csv"

DISKPATCHLEVEL="${BASEDIR}/etc/filer-disk-patch-levels.csv"
DISKPATCHLEVEL1="${BASEDIR}/etc/filer-disk-patch-levels-ibm.csv"
DISKPATCHLEVEL2="${BASEDIR}/etc/filer-disk-patch-levels-netapp.csv"
MAILTO="maarten.deboer@atos.net"

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

# Proces more files in INDIR
cd ${INDIR}
LASTDIR="`ls -1d 20??-??-??|tail -1`"
cd ${LASTDIR}

# Disk firmware
# Proces more files in INDIR
cd ${INDIR}
LASTDIR="`ls -1d 20??-??-??|tail -1`"
cd ${LASTDIR}
echo "Disk firmware (${INDIR}/${LASTDIR})"

OUT="${BASEDIR}/data/firmware/disk-model-firmware-vendor-more.csv"
echo "# DISKMODEL;FILER;(curr.)DISKFW;DISKVENDOR;CNT;PATCHLEVEL(to be IBM);PATCHLEVEL(to be NetApp);PATCHSTATUS;" > ${OUT} 
# Check if files are available
ls dfm-disk-model-firmware-vendor-more_*.csv 1> /dev/null 2> /dev/null
EC=${?}
if [ ${EC} -eq 0 ]; then
  ls -1 dfm-disk-model-firmware-vendor-more_*.csv | while read FILE
  do
    grep ',' ${FILE} 1> /dev/null
    RC=${?}
# If 0, file has ;
    if [ ${RC} -eq 0 ]; then
      echo "${FILE} , ..."
      cat ${FILE}|egrep -v '^#|Disk|Total'|sort -u|while read LINE
      do
        DISKMODEL="`echo ${LINE}|awk -F\, '{print $1}'`"
        DISKFW="`echo ${LINE}|awk -F\, '{print $2}'`"
        DISKVENDOR="`echo ${LINE}|awk -F\, '{print $3}'`"
        FILER="`echo ${LINE}|awk -F\, '{print $4}'|cut -d\. -f1`"
#        echo "${DISKMODEL};${DISKFW};${DISKVENDOR};${FILER};"
	    if [ "${DISKMODEL}" != "" ] && [ "${DISKFW}" != "" ] && [ "${DISKVENDOR}" != "" ] && [ "${FILER}}" != "" ]; then
	      CNT="`grep ${DISKMODEL} ${FILE}|grep ${DISKFW}|grep ${FILER}|wc -l`"
		fi
		echo "${DISKMODEL};${FILER};${DISKFW};${DISKVENDOR};${CNT};" >> ${TMP}
	  done  # cat
	fi  # RC
  done  # ls -1
fi  # EC

# Check if files are available
ls sh-disk-model-firmware-vendor-count_*.csv 1> /dev/null 2> /dev/null
EC=${?}
if [ ${EC} -eq 0 ]; then
# Disk Model;Disk Firmware Revision;Disk Vendor Name;Filer;Count;
  ls -1 sh-disk-model-firmware-vendor-count_*.csv | while read FILE
  do
    grep ';' ${FILE} 1> /dev/null
    RC=${?}
# If 0, file has ;
    if [ ${RC} -eq 0 ]; then
      echo "${FILE} ; ..."
      cat ${FILE}|egrep -v '^#|Disk|Total'|sort -u|while read LINE
      do
        DISKMODEL="`echo ${LINE}|awk -F\; '{print $1}'`"
        DISKFW="`echo ${LINE}|awk -F\; '{print $2}'`"
        DISKVENDOR="`echo ${LINE}|awk -F\; '{print $3}'`"
        FILER="`echo ${LINE}|awk -F\; '{print $4}'|cut -d\. -f1`"
        CNT="`echo ${LINE}|awk -F\; '{print $5}'|cut -d\. -f1`"
		echo "${DISKMODEL};${FILER};${DISKFW};${DISKVENDOR};${CNT};" >> ${TMP}
	  done  # cat
	fi  # RC
  done  # ls -1
fi  # EC

# Processing
cat ${TMP}|grep -v ^#|while read LINE
do
  DISKMODEL="`echo ${LINE}|awk -F\; '{print $1}'`"
  DISKFW="`echo ${LINE}|awk -F\; '{print $2}'`"
  DISKVENDOR="`echo ${LINE}|awk -F\; '{print $3}'`"
  FILER="`echo ${LINE}|awk -F\; '{print $4}'`"
  CNT="`echo ${LINE}|awk -F\; '{print $5}'`"
  if [ "${DISKMODEL}" != "" ] && [ "${DISKFW}" != "" ] && [ "${DISKVENDOR}" != "" ] && [ "${FILER}}" != "" ]; then
	# sort -u added for solving double entries
	PATCHLEVEL1="`cat ${DISKPATCHLEVEL1}|sort -u|grep ${DISKMODEL}|grep -v ^#|awk -F\; '{print $2}'`"
	PATCHLEVEL2="`cat ${DISKPATCHLEVEL2}|sort -u|grep ${DISKMODEL}|grep -v ^#|awk -F\; '{print $2}'`"
  fi  # [ ..... ]
  PATCHSTATUS=""
  if [ "${PATCHSTATUS}" = "" ] && [ "${PATCHLEVEL1}" = "${DISKFW}" ] && [ "${PATCHLEVEL2}" = "${DISKFW}" ]; then
    PATCHSTATUS="ok (IBM & NetApp);0"
  fi
  if [ "${PATCHSTATUS}" = "" ] && [ "${PATCHLEVEL1}" = "${DISKFW}" ] && [ "${PATCHLEVEL2}" = "" ]; then
    PATCHSTATUS="ok (IBM);0"
  fi
  if [ "${PATCHSTATUS}" = "" ] && [ "${PATCHLEVEL2}" = "${DISKFW}" ]; then
    PATCHSTATUS="ok (NetApp);0"
  fi
  echo "${DISKMODEL};${FILER};${DISKFW};${DISKVENDOR};${CNT};${PATCHLEVEL1};${PATCHLEVEL2};${PATCHSTATUS};" |tee -a  ${OUT} 
done  # cat ${TMP}


echo "Output of ${PGM}"| mailx -a ${OUT} -s "${PGM} v${VER}" ${MAILTO}

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

