
#!/bin/sh
# File  : netapp-ontap-inventory-aggregate.sh
# By    : Maarten.deBoer@Atos.net, 230113. 230116
# Subject       : Get Netapp ONTAP inventory (in 1 row /system)
#(0.2),230118	: Mod. MAILTO & SUBJECT
#set -x
PGM="`basename $0|cut -d\. -f1`"
TMP="/tmp/${PGM}.$$"
VER="0.2"
MAIL=""
HOSTNAME=`hostname |cut -d\. -f1`
SSH="/bin/ssh -n"

# The following VARs might be changed
CLUSTERS="${HOME}/etc/clusters"
USER=""
#MAILTO="netapp-inventory@atos.net netapp@nlxnetapp02.bcklan.ao-srv.com"
MAILTO="netapp-inventory@atos.net nl19471@nlxnetapp02.bcklan.ao-srv.com"
LOGDIR="${HOME}/log"
LOG="${LOGDIR}/${PGM}.log"
DATI=`date +%Y-%m-%d-%H-%M-%S`
CSV="/tmp/${PGM}_${HOSTNAME}_${DATI}.csv"
CFILTER="[?]*"

# Functions
USAGE()
{
  echo "Usage: ${PGM} <option(s)>"
  echo "  Version: ${VER}"
  echo "  options           :"
  echo "    -c              : specify Cfilter (${CFILTER})"
  echo "    -e              : specify Etc/clusters-file (${CLUSTERS})"
  echo "    -h | --help     : this help"
  echo "    -m | --mail     : do send mail"
  echo "    -V              : Version"
  echo "    -x              : set -x"
  echo "    --mailto        : change MAILTO address & do send mail (${MAILTO})"
}
## MAIN
# Check options
while [ ${#} -ge 1 ]
  do
  case ${1} in
    -c) CFILTER=${2}; shift ;;
    -e) CLUSTERS=${2}; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -m | --mail) MAIL=1 ;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
  done

if [ ! -d ${LOGDIR} ]; then
  echo "  No LOGDIR (${LOGDIR}) found. Creating ..."
  mkdir -p ${LOGDIR}
fi
echo "`date` ${PGM} v${VER} started."|tee -a ${LOG} ${TMP}.mail
echo "CFILTER=${CFILTER}" | tee -a ${LOG} ${TMP}.mail
echo "CLUSTERS=${CLUSTERS}" | tee -a ${LOG} ${TMP}.mail
echo "LOGDIR=${LOGDIR}" | tee -a ${LOG} ${TMP}.mail
echo "HOSTNAME=${HOSTNAME}" | tee -a ${LOG} ${TMP}.mail
echo "MAIL=${MAIL}" | tee -a ${LOG} ${TMP}.mail
echo "MAILTO=${MAILTO}" | tee -a ${LOG} ${TMP}.mail
echo "PGM=${PGM}" | tee -a ${LOG} ${TMP}.mail
echo "VER=${VER}" | tee -a ${LOG} ${TMP}.mail
sleep 1

# Check ${CLUSTERS} file
if [ ! -f ${CLUSTERS} ]; then
  echo "  Clusters-file (${CLUSTERS}) not found. Exiting ..."|tee -a ${LOG};exit 2;
fi

# Items which can be collected (by a script):
echo "# CLUSTER;NODENAME;SER_NR;AGGREGATE;STORAGE-TYPE;AGGREGATE-TYPE;DISKCOUNT;NODE;NODES;SIZE;VOLCOUNT;PHYSICAL-USED;PHYSICAL-USED-PERCENT;SNAPLOCK-TYPE;CREATION-TIMESTAMP;" > ${TMP}

# Start getting info
cat ${CLUSTERS}|grep -v \^#|grep "${CFILTER}"|awk -F\; '{print $1}'|sort|while read CLUSTER REST
do
  echo "  ${CLUSTER} ..." 
  ping -c 1 -i 1 ${CLUSTER} 1>/dev/null
  EC=${?}
  if [ ${EC} -eq 0 ]; then
    ${SSH} ${USER}${CLUSTER} "set -showseparator \";\" ; node show -field node,serialnumber"|grep ";"|grep -vi node|while read LINE1
    do
# node;serialnumber
      NODENAME=`echo ${LINE1}|awk -F\; '{print $1}'` 
      SER_NR=`echo ${LINE1}|awk -F\; '{print $2}'` 

      ${SSH} ${USER}${CLUSTER} "set -unit gb -showseparator \";\" ;storage aggregate show -node ${NODENAME} -field node,aggregate,physical-used,size,physical-used-percent,volcount,snap,creation-timestamp,storage-type,diskcount"|grep ";"|grep -vi aggregate|while read LINE2
      do
# aggregate;storage-type;aggregate-type;diskcount;node;nodes;size;volcount;physical-used;physical-used-percent;snaplock-type;creation-timestamp;
        AGGREGATE=`echo ${LINE2}|awk -F\; '{print $1}'` 
        STOR_TYPE=`echo ${LINE2}|awk -F\; '{print $2}'` 
        AGGR_TYPE=`echo ${LINE2}|awk -F\; '{print $3}'` 
        DISK_CNT=`echo ${LINE2}|awk -F\; '{print $4}'` 
        NODE=`echo ${LINE2}|awk -F\; '{print $5}'` 
        NODES=`echo ${LINE2}|awk -F\; '{print $6}'` 
        SIZE=`echo ${LINE2}|awk -F\; '{print $7}'` 
        VOL_CNT=`echo ${LINE2}|awk -F\; '{print $8}'` 
        PHYSICAL_USED=`echo ${LINE2}|awk -F\; '{print $9}'` 
        PHYS_USED_PERC=`echo ${LINE2}|awk -F\; '{print $10}'` 
        SNAPLOCK_TYPE=`echo ${LINE2}|awk -F\; '{print $11}'` 
        CREATION_TIMESTAMP=`echo ${LINE2}|awk -F\; '{print $12}'` 


        echo "${CLUSTER};${NODENAME};${SER_NR};${AGGREGATE};${STOR_TYPE};${AGGR_TYPE};${DISK_CNT};${NODE};${NODES};${SIZE};${VOL_CNT};${PHYSICAL_USED};${PHYS_USED_PERC};${SNAPLOCK_TYPE};${CREATION_TIMESTAMP};" | tee -a ${TMP}

      done  # LINE2

    done  # LINE1

  else
    echo "  NO answer (ping) from ${CLUSTER}"|tee -a ${LOG}
  fi  # ping

done  # CLUSTER

if [ ${MAIL} ] && [ "${MAILTO}" != "" ]; then
  cp ${TMP} ${CSV}
  cat ${TMP}.mail|mailx -a ${CSV} -s "(netapp-inventory) ontap-aggregate @${HOSTNAME}" ${MAILTO}
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
  rm ${CSV} ${TMP}.mail
fi

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

