
#!/bin/sh
# File	: proc_asup_mail.sh
# By	: Maarten.deBoer@Atos.net, 1500805
# Subject	: Script to process (moving) ASUP-files to ASUPMAILPROCDIR (keep last). Processing into ASUPDATADIR
#(0.2)	: Added OUT-file in asup-dir, based on Ser.Nr
#(0.3)	: Change "verbose" output
#(0.4)	: Change ASUPDATA-name to sernr_ & sysid_ & not proc CSV
#(0.5)	: Mod filename
#(0.6)	: Mod; move ASUP file to ASUPMAILPROCDIR
#(0.7)	: Added proc of ASUP-files (7za)
#(0.8)	: Added: sed 's/=3D/=/g'
#(0.9)	: Changed to |sed 's/^3D//' 
#(0.10)	: Mod. ASUPMAILPROCDIR & ASUPDATADIR
#(0.11)	: Added body -> part
#(0.12)	: Removed <model> for better processing in proc_asup-files_to_db.sh
#(0.13)	: Mod file processing; Selecting by part of filename. To "unusable" chr's. By adding `cut -d\( -f1 `
#(0.14) : Swaped in /appl/asup/data-dir SERNR_HOSTNAME
#(0.15), 171206	: Changed DB. Own directory /appl/mdr/mdrglob/afsp/asup
#(0.16),171227	: Mod's
#set -x
PGM="`basename $0|cut -d\. -f1`"
VER="0.16"
TMP="/tmp/${PGM}.$$"

MUNPACK="/appl/mdr/mdrglob/bin/munpack"

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

#MAILINDIR="/appl/mdr/mdrglob/mail/asup"
MAILINDIR="/appl/asup/mail-in"

#ASUPMAILPROCDIR="${HOME}/asup-mail"
ASUPMAILPROCDIR="/appl/asup/mail-proc"

#ASUPDATADIR="${HOME}/asup-data"
ASUPDATADIR="/appl/asup/data"

# Skip some parts by emptying ("") it.
# Proc steps
PROC_1_MAILINDIR=1
PROC_2_MOVEFILES=""
PROC_3_TODATADIR=""
ST=0


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

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

ASUPOLDDIR="${BASEDIR}/data/asup"
# "OLD" dir
ASUPOLDDIR="/appl/mdr/mdrglob/afsp/glob/data/asup"
if [ ! -d ${ASUPOLDDIR} ]; then
  mkdir ${ASUPOLDDIR}
fi  # -d

if [ ! -d ${ASUPDBDIR} ]; then
  mkdir ${ASUPDBDIR}
fi  # -d

if [ ${PROC_1_MAILINDIR} ]; then

echo "  Getting ASUP info out of the mail. And puting into DB (from MAILINDIR=${MAILINDIR}) ..."
# SleepTime
sleep ${ST}

ls -1tr ${MAILINDIR}/mail*.asc|cut -d\( -f1 |while read FILEPART REST
do
  echo -n "." 
#  echo ${FILEPART}*

#CONFIDENTIALITY=NetApp Confidential
#GENERATED_ON=Wed Aug 05 11:22:55 CEST 2015
#VERSION=NetApp Release 8.2.2 Cluster-Mode: Fri Aug 22 01:46:52 PDT 2014
#SYSTEM_ID=0536945961
#SERIAL_NUM=211431000008
#HOSTNAME=nlnaf100-02
#SEQUENCE=904
#SNMP_CONTACT=<unknown>
#SNMP_LOCATION=Best
#PARTNER_SYSTEM_ID=0536945653
#PARTNER_HOSTNAME=nlnaf100-01
#BOOT_CLUSTERED='true'

#  SERNR=`grep ^SERIAL_NUM ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
# Sometimes did not work "Binary file (standard input) matches"
# "new"ASUP-DB
DB_SERIAL_NUMBER="" 
DB_CONTROLER_NAME=""
DB_MODEL_NAME=""
DB_OS_VERSION=""
DB_PARTNER_HOSTNAME=""
DB_SNMP_CONTACT=""
DB_SNMP_LOCATION=""
DB_ASUP_GENERATED_ON=""
DB_SYSTEM_ID=""
DB_DFM_SERVERNAME=""
DB_DFM_UPDATE_DATE=""
DB_REMARKS=""
# New since 2017-08-28
DB_CONTRACT_NAME=""
DB_SITE_NAME=""
DB_CONTACT_NAME=""

# Getting info out of ASUP-MAIL (${FILEPART}*)
# Using ${FILEPART}*, because some filename-char's caused errors (in the past)

  SERNR=`grep ^SERIAL_NUM ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${SERNR}" = "" ]; then
    SERNR=`cat ${FILEPART}*|head -20|grep ^SERIAL_NUM |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
  DB_SERIAL_NUMBER="${SERNR}"
  SYSID=`grep ^SYSTEM_ID ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${SYSID}" = "" ]; then
    SYSID=`cat ${FILEPART}*|head -20|grep ^SYSTEM_ID |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
  DB_SYSTEM_ID="${SYSID}"
  HOSTNAME=`grep ^HOSTNAME ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${HOSTNAME}" = "" ]; then
    HOSTNAME=`cat ${FILEPART}*|head -20|grep ^HOSTNAME |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
  DB_CONTROLER_NAME="${HOSTNAME}"
  LOCATION=`grep ^SNMP_LOCATION ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${LOCATION}" = "" ]; then
    LOCATION=`cat ${FILEPART}*|head -20|grep ^SNMP_LOCATION |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
  DB_SNMP_LOCATION="${LOCATION}"
  OSRELEASE=`grep ^VERSION ${FILEPART}*|awk -F\= '{print $2}'|cut -d\: -f1|sed 's/Release //g'|sed 's/NetApp //g'|sed 's/Data //g'|sed 's/ONTAP //g'|sed 's/^3D//'`
  if [ "${OSRELEASE}" = "" ]; then
    OSRELEASE=`cat ${FILEPART}*|head -20|grep ^VERSION |awk -F\= '{print $2}'|cut -d\: -f1|sed 's/Release //g'|sed 's/NetApp //g'|sed 's/Data //g'|sed 's/ONTAP //g'|sed 's/^3D//'`
  fi
  DB_OS_VERSION="${OSRELEASE}"
  PARTNER=`grep ^PARTNER_HOSTNAME ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${PARTNER}" = "" ]; then
    PARTNER=`cat ${FILEPART}*|head -20|grep ^PARTNER_HOSTNAME |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
  DB_PARTNER_HOSTNAME="${PARTNER}"
  CONTACT=`grep ^SNMP_CONTACT ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${CONTACT}" = "" ]; then
    CONTACT=`cat ${FILEPART}*|head -20|grep ^SNMP_CONTACT |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
  DB_SNMP_CONTACT="${CONTACT}"
  ASUPDATI=`grep ^GENERATED_ON ${FILEPART}*|awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${ASUPDATI}" = "" ]; then
    ASUPDATI=`cat ${FILEPART}*|head -20|grep ^GENERATED_ON |awk -F\= '{print $2}'|sed 's/^3D//'`
  fi
# used for updating ASUP-DB
#  DB_ASUP_GENERATED_ON="${ASUPDATI}"

# DBFILENAME=<SerialNumber>.asc
  if [ "${SERNR}" != "" ]; then
    DBFILENAME="${ASUPDBDIR}/${SERNR}.asc"
  else
    if [ "${SYSID}" != "" ]; then
      DBFILENAME="${ASUPDBDIR}/_${SYSID}.asc"
	else
      DBFILENAME="${ASUPDBDIR}/__${HOSTNAME}.asc"
	fi  # !SYSID
  fi  # !SERNR
  if [ "${DBFILENAME}" != "" ] && [ "${DBFILENAME}" != "${ASUPDBDIR}/__.asc" ]; then
    DB_READ ${DBFILENAME}
  fi

# If HOSTNAME is known & DB_ASUP_GENERATED_ON is new (= <> ASUPDATI) (then other info also available), update DB-file
  if [ "${HOSTNAME}" != "" ]; then
    if [ "${DB_ASUP_GENERATED_ON}" != "${ASUPDATI}" ]; then
	  echo "  |DB_ASUP_GENERATED_ON=${DB_ASUP_GENERATED_ON}|ASUPDATI=${ASUPDATI}|"
      DB_ASUP_GENERATED_ON="${ASUPDATI}"
      DB_WRITE ${DBFILENAME}
	fi
  fi

 # Place the last data in the filer-data-file. Based on SerNr.
 # OLD
  if [ "${SERNR}" != "" ]; then
    OUT="${ASUPOLDDIR}/sn_${SERNR}.csv"
    echo "${HOSTNAME};${LOCATION};;${OSRELEASE};<firmware>;${SERNR};${PARTNER};${CONTACT};${ASUPDATI};" >${OUT}
#    echo "sn_${SERNR} = ${HOSTNAME} = ${OSRELEASE} = ${ASUPDATI} = ${FILEPART}*"
  else
#    echo "${SERNR}=<empty> => ${FILEPART}* "
	cat ${FILEPART}*| grep SERIAL_NUM
    if [ "${SYSID}" != "" ]; then
      OUT="${ASUPOLDDIR}/si_${SYSID}.csv"
      echo "${HOSTNAME};${LOCATION};;${OSRELEASE};<firmware>;${SERNR};${PARTNER};${CONTACT};${ASUPDATI};" >${OUT}
#      echo "si_${SYSID} = ${HOSTNAME} = ${OSRELEASE} = ${ASUPDATI} = ${FILEPART}*"
	else
      OUT="${ASUPOLDDIR}/hn_${HOSTNAME}.csv"
      echo "${HOSTNAME};${LOCATION};;${OSRELEASE};<firmware>;${SERNR};${PARTNER};${CONTACT};${ASUPDATI};" >${OUT}
#      echo "hn_${HOSTNAME} = ${HOSTNAME} = ${OSRELEASE} = ${ASUPDATI} = ${FILEPART}*"
	fi
  fi  # SERNR

done  # ls -1
fi  # ${PROC_1_MAILINDIR}


if [ ${PROC_2_MOVEFILES} ]; then

echo "Moving ASUP-file(s) (${MAILINDIR}) to ASUP-mail-dir (${ASUPMAILPROCDIR}) and keep last  ..."
# SleepTime
sleep ${ST}
sleep ${ST}
sleep ${ST}

cd ${MAILINDIR}
ls -1 *.asc|cut -d\( -f1|while read FILEPART REST
do
  ASUPDATI=`cat ${FILEPART}*|head -20|grep ^GENERATED_ON|awk -F\= '{print $2}'|sed 's/^3D//'`
  SERNR=`cat ${FILEPART}*|head -20|grep ^SERIAL_NUM |awk -F\= '{print $2}'|sed 's/^3D//'`
  if [ "${SERNR}" = "" ]; then
    SYSID=`cat ${FILEPART}*|head -20|grep ^SYSTEM_ID |awk -F\= '{print $2}'|sed 's/^3D//'`
    if [ "${SYSID}" = "" ]; then
      HOSTNAME=`cat ${FILEPART}*|head -20|grep ^HOSTNAME |awk -F\= '{print $2}'|sed 's/^3D//'`
      CSVFILE="hn_${SERNR}.csv"
      CSVASUPDATI=`cat ${ASUPOLDDIR}/${CSVFILE}|awk -F\; '{print $9}'`
      # Check if last ASUP-file. Otherwise move
  	  if [ "${ASUPDATI}" != "${CSVASUPDATI}" ]; then
	    echo "|${ASUPDATI}<>${CSVASUPDATI}|"
	    mv ${FILEPART}* ${ASUPMAILPROCDIR}/
		echo "  ${FILEPART}* moved to ${ASUPMAILPROCDIR}/"|tee -a ${LOG}
  	  fi
	else
      CSVFILE="si_${SERNR}.csv"
      CSVASUPDATI="`cat ${ASUPOLDDIR}/${CSVFILE}|awk -F\; '{print $9}'`"
      # Check if last ASUP-file. Otherwise move
  	  if [ "${ASUPDATI}" != "${CSVASUPDATI}" ]; then
	    echo "|${ASUPDATI}<>${CSVASUPDATI}|"
	    mv ${FILEPART}* ${ASUPMAILPROCDIR}/
		echo "  ${FILEPART}* moved to ${ASUPMAILPROCDIR}/"|tee -a ${LOG}
  	  fi
    fi  # SYSID
  else
    CSVFILE="sn_${SERNR}.csv"
	CSVASUPDATI="`cat ${ASUPOLDDIR}/${CSVFILE}|awk -F\; '{print $9}'`"
	# Check if last ASUP-file. Otherwise move
	if [ "${ASUPDATI}" != "${CSVASUPDATI}" ]; then
	  echo "|${ASUPDATI}<>${CSVASUPDATI}|"
	  mv ${FILEPART}* ${ASUPMAILPROCDIR}/
      echo "  ${FILEPART}* moved to ${ASUPMAILPROCDIR}/"|tee -a ${LOG}
	fi
  fi  # SERNR
done  # ls -1 *.asc

fi  # ${PROC_2_MOVEFILES}

if [ ${PROC_3_TODATADIR} ]; then

echo "Start processing ASUP-mails into ASUP-data-dir (${ASUPDATADIR}) ..."
# SleepTime
sleep ${ST}
sleep ${ST}
sleep ${ST}
ls -1 ${ASUPMAILPROCDIR}/mail*.asc|cut -d\( -f1|while read FILEPART REST
do
  echo "  Processing ${FILEPART}*"|tee -a ${LOG}
  SERNR=`cat ${FILEPART}*|head -20|grep ^SERIAL_NUM |awk -F\= '{print $2}'|sed 's/^3D//'`
  SYSID=`cat ${FILEPART}*|head -20|grep ^SYSTEM_ID |awk -F\= '{print $2}'|sed 's/^3D//'`
  HOSTNAME=`cat ${FILEPART}*|head -20|grep ^HOSTNAME |awk -F\= '{print $2}'|sed 's/^3D//'`

  if [ "${HOSTNAME}" != "" ]; then
# Create a DIR with hostname & Sernr, of Sysid. When no Sernr / SysID, then only hostname
    if [ "${SERNR}" != "" ]; then
      DIR="${ASUPDATADIR}/${SERNR}_${HOSTNAME}"
    else
      if [ "${SYSID}" != "" ]; then
        DIR="${ASUPDATADIR}/${SYSID}__${HOSTNAME}"
      else
        DIR= "${ASUPDATADIR}/${HOSTNAME}"
      fi  # SERNR
    fi  # SERNR
    echo "  Processing in ${DIR}"|tee -a ${LOG}
    if [ ! -d ${DIR} ]; then
      mkdir ${DIR}/
    fi  # ! -d

#unpack the Mail and move the Mail-file to an archive (DONE/)
    ${MUNPACK} -C ${DIR} ${FILEPART}*
    mv ${FILEPART}* ${ASUPMAILPROCDIR}/DONE/

    if [ -f ${DIR}/body.7z ]; then
# Extract (no path = e) overwrite (-y) in dir (-o) ${DIR} 
      7za e -y -o${DIR} ${DIR}/body.7z 1> /dev/null
      EC=${?}
#  echo "  EC=${EC}"
    fi  # /body.7z

    if [ -f ${DIR}/body.tgz ]; then
      7za e -y -o${DIR} ${DIR}/body.tgz 1> /dev/null
      cd ${DIR}
      tar xvzf body.tgz 1> /dev/null
    fi  # body.tgz 

# part has been introdured (why, ?)
    ls -1 ${DIR}/part*|while read PARTFILE
    do
      echo " processing ${PARTFILE} ..."
      7za e -y -o${DIR} ${PARTFILE} 1> /dev/null
      rm ${PARTFILE}
    done  # ls -1 ${DIR}/part*

  fi  # HOSTNAME 
done  # ls -1 mail*.asc

fi  # ${PROC_3_TODATADIR}


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

