
#!/bin/sh
# File	: cdot_make_aggr-vol_report.sh
# By	: Maarten.deBoer@Atos.net, 160617
# Subject	: Script to make aggr and volume report at cDOT
#(0.2)  : Volumes added
#(0.3),210914	: Added volume -fields
PGM="`basename $0|cut -d\. -f1`"
VER="0.3"
TMP="/tmp/${PGM}.$$"
HOSTNAME="`hostname|cut -d\. -f1`"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
MAIL=""
MAILTO="maarten.deboer@atos.net"
FILTER="[?]*"
DATE="`date +%Y-%m-%d`"
DATI="`date +%Y-%m-%d' '%H:%M`"
CLUSTERS="${HOME}/etc/clusters"
PREFIX="nlnaf"
CSV=""
ERR="${HOME}/log/${PGM}.err"
TMPERR="/tmp/${PGM}.$$.err"

USAGE()
{
  echo "Usage: ${PGM} [options]"
  echo "  Version: ${VER}"
  echo "  options          :"
  echo "    -e             : Etc/clusters file (${CLUSTERS})"
  echo "    -f             : Filter filername (${FILTER})"
  echo "    -h | --help    : this help"
  echo "    -m | --mail    : do send Mail (only)"
  echo "    --mailto       : change MAILTO address & do send mail (${MAILTO})"
  echo "    -V             : Version"
  echo "    -x             : set -x"
}

# Check options
while [ ${#} -gt 0 ]
  do
  case ${1} in
    -e) CLUSTERS=${2}; shift ;;
    -f) FILTER=${2}; shift ;;
    -m | --mail) MAIL=1 ;;
    -h | --help) USAGE; exit 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

SSHCMD()
# 1: Filername 2:Command-string
# When issue with connection to cluster, try the nodes (-01 & -02)
# "There are no entries matching your query." => EC=255
# "no connection" is also EC=255
{
  /usr/bin/ssh -n ${1} "${2}" 2> ${TMPERR}
  EC=${?}
  # Check if "ssh: connect to host 10.192.109.202 port 22: Connection refused" If so (EC2=0), the 2nd
  grep 'Connection refused' ${TMPERR}
  EC2=${?}
  if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
    echo "  EC=${EC} EC2=${EC2} ${1} ${2} " >> ${ERR}
    sleep 2
    /usr/bin/ssh -n ${1}-01 "${2}" 2> ${TMPERR}
    EC=${?}
    grep 'Connection refused' ${TMPERR}
    EC2=${?}
    if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
      echo "  EC=${EC} EC2=${EC2} ${1}-01 ${2} " >> ${ERR}
      sleep 2
      /usr/bin/ssh -n ${1}-02 "${2}" 2> ${TMPERR}
      EC=${?}
      grep 'Connection refused' ${TMPERR}
      EC2=${?}
      if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
        echo "  EC=${EC} EC2=${EC2} ${1}-02 ${2} " >> ${ERR}
        sleep 2
        /usr/bin/ssh -n ${1}-03 "${2}" 2> ${TMPERR}
        EC=${?}
        grep 'Connection refused' ${TMPERR}
        EC2=${?}
        if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
          echo "  EC=${EC} EC2=${EC2} ${1}-03 ${2} " >> ${ERR}
          echo "  EC=${EC} sleep 2 ..."
          sleep 2
          /usr/bin/ssh -n ${1}-04 "${2}" 2> ${TMPERR}
          EC=${?}
          grep 'Connection refused' ${TMPERR}
          EC2=${?}
          if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
            echo "  EC=${EC} EC2=${EC2} ${1}-04 ${2} " >> ${ERR}
            echo  "`date` ${PGM} ERROR with communication to ${1}. Connection to -01 - -04 failed too."|tee -a ${LOG} ${ERR}
          fi
        fi
      fi
    fi
  fi
}

CSV="FSOD-cDOT_Aggr-Volume_report_${DATE}.csv"
if [ "${FILTER}" != '[?]*' ]; then
  CSV="FSOD-cDOT_Aggr-Volume_report_${FILTER}_${DATE}.csv"
fi

DISKUSED=""
DISKLIMIT=""

echo "`date` ${PGM} v${VER} started. (--mailto ${MAILTO} )"|tee -a ${LOG} ${ERR}
touch ${TMP}

echo "CLUSTERS=${CLUSTERS}"
echo "CSV=${CSV}"
echo "DATE=${DATE}"
echo "FILE=${FILE}"
echo "FILTER=${FILTER}"
echo "HOSTNAME=${HOSTNAME}"
echo "LOG=${LOG}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "PGM=${PGM}"
echo "PREFIX=${PREFIX}"
echo "TMP=${TMP}"
echo "VER=${VER}"

#echo "# Cluster;Node;Aggregate;Size [GB];Available Size [GB];Used Size [GB];Total Physical Used Size [GB];Used Percentage [GB];Hybrid;Number Of Volumes;SVM;Vol.name;Vol.size [GB];Total User-Visible Size [GB];Vol.Used Size [GB];Space Saved by Storage Efficiency [GB];Space Saved by Deduplication [GB];Space Saved by Compression [GB];Volume Size Used by Snapshot Copies [GB];Space Guarantee Style; "|tee -a ${TMP}

#echo -n "# Cluster;Node;Aggregate;Size [GB];Available Size [GB];Used Size [GB];Total Physical Used Size [GB];Used Percentage [GB];Hybrid;Number Of Volumes;"|tee -a ${TMP}
echo -n "CLUSTER;NODE;AGGRNAME;SIZE;ASIZE;USIZE;UPERC;TOTALPUSED;SAVEDCOMPACT;COMPACTDATA:SISSAVED;SHAREDSIS;HYBRID;"|tee -a ${TMP}

#SVM;Vol.name;Vol.size [GB];Total User-Visible Size [GB];Vol.Used Size [GB];Space Saved by Storage Efficiency [GB];Space Saved by Deduplication [GB];Space Saved by Compression [GB];Volume Size Used by Snapshot Copies [GB];Space Guarantee Style; "|tee -a ${TMP}

#Vserver Name;Volume Name;Aggregate Name;Available Size;Total User-Visible Size;Used Size;Used Percentage;Space Guarantee Style;Node name;Space Saved by StorageEfficiency;Space Saved by Deduplication;Space Saved by Compression;Logical Used Size;Logical Used Percentage;Logical Available Size;Logical Space Reporting;Logical Space Enforcement;
      echo "SVM;Volume Name;Total User-Visible Size [GB];Used Size [GB];Space Guarantee Style;Space Saved by StorageEfficiency [GB];Logical Used Size [GB];Logical Available Size;Logical Space Reporting;Logical Space Enforcement;"|tee -a ${TMP}

for CLUSTER in `cat ${CLUSTERS}|grep -v \^#|awk -F\; '{print $1}'|grep "${FILTER}"`
do
  echo "  ${CLUSTER} ..."
  
  SSHCMD ${CLUSTER} 'set -unit GB -showseparator ";" ; aggr show -field cluster,node,size,usedsize,physical-used,availsize,hybrid,percent-used,data-compaction-space-saved,data-compacted-count,sis-space-saved,sis-shared-count '|grep ${PREFIX}|while read LINE
  do

# Aggregate;Node;Node;Available Size;Cluster;Hybrid;Used Percentage;Size;Used Size;Total Physical Used Size;Space Saved by Data Compaction;Amount of compacted data;Space Saved by Storage Efficiency;Amount of Shared bytes count by Storage Efficiency;

    AGGRNAME="`echo ${LINE}|awk -F\; '{print $1}'|sed 's/GB//g'`"
    NODE="`echo ${LINE}|awk -F\; '{print $2}'|sed 's/GB//g'`"
    ASIZE="`echo ${LINE}|awk -F\; '{print $4}'|sed 's/GB//g'`"
    CNAME="`echo ${LINE}|awk -F\; '{print $5}'|sed 's/GB//g'`"
    HYBRID="`echo ${LINE}|awk -F\; '{print $6}'|sed 's/GB//g'`"
    UPERC="`echo ${LINE}|awk -F\; '{print $7}'|sed 's/GB//g'`"
    SIZE="`echo ${LINE}|awk -F\; '{print $8}'|sed 's/GB//g'`"
    USIZE="`echo ${LINE}|awk -F\; '{print $9}'|sed 's/GB//g'`"
    TOTALPUSED="`echo ${LINE}|awk -F\; '{print $10}'|sed 's/GB//g'`"
    SAVEDCOMPACT="`echo ${LINE}|awk -F\; '{print $11}'|sed 's/GB//g'`"
    COMPACTDATA="`echo ${LINE}|awk -F\; '{print $12}'|sed 's/GB//g'`"
    SISSAVED="`echo ${LINE}|awk -F\; '{print $13}'|sed 's/GB//g'`"
    SHAREDSIS="`echo ${LINE}|awk -F\; '{print $14}'|sed 's/GB//g'`"

    echo "${CLUSTER};${NODE};${AGGRNAME};${SIZE};${ASIZE};${USIZE};${UPERC};${TOTALPUSED};${SAVEDCOMPACT};${COMPACTDATA}:${SISSAVED};${SHAREDSIS};${HYBRID};"|tee -a ${TMP}


    SSHCMD ${CLUSTER} "set -unit GB -showseparator \";\" ; volume show -aggregate ${AGGRNAME} -field vserver,node,volume,total,logical-used,is-space-reporting-logical, logical-available,is-space-enforce,percent-used,logical-used-percent, used,avail,sis-space-saved,space-guarantee"|grep ${PREFIX}|while read LINE2
    do
#Vserver Name;Volume Name;Available Size;Total User-Visible Size;Used Size;Used Percentage;Space Guarantee Style;Node name;Space Saved by Storage Efficiency;Logical Used Size;Logical Used Percentage;Logical Available Size;Logical Space Reporting;Logical Space Enforcement;

      SVM="`echo ${LINE2}|awk -F\; '{print $1}'`"
      VOLNAME="`echo ${LINE2}|awk -F\; '{print $2}'`"
      AVAILSIZE="`echo ${LINE2}|awk -F\; '{print $3}'|sed 's/GB//g'`"
      VOLTOTAL="`echo ${LINE2}|awk -F\; '{print $4}'|sed 's/GB//g'`"
      VOLUSED="`echo ${LINE2}|awk -F\; '{print $5}'|sed 's/GB//g'`"
      VOLPUSED="`echo ${LINE2}|awk -F\; '{print $6}'|sed 's/\%//g'`"
      VOLSPGAR="`echo ${LINE2}|awk -F\; '{print $7}'|sed 's/GB//g'`"
      NODENAME="`echo ${LINE2}|awk -F\; '{print $8}'|sed 's/GB//g'`"
      VOLSISSAVE="`echo ${LINE2}|awk -F\; '{print $9}'|sed 's/GB//g'`"
      VOLLOGUSED="`echo ${LINE2}|awk -F\; '{print $10}'|sed 's/GB//g'`"
      VOLLOGPUSED="`echo ${LINE2}|awk -F\; '{print $11}'|sed 's/\%//g'`"
      VOLLOGAVAIL="`echo ${LINE2}|awk -F\; '{print $12}'|sed 's/GB//g'`"
      ISSPCREPLOG="`echo ${LINE2}|awk -F\; '{print $13}'|sed 's/GB//g'`"
      ISSPCENFLOG="`echo ${LINE2}|awk -F\; '{print $14}'|sed 's/GB//g'`"

      echo ";;;;;;;;;;;;${SVM};${VOLNAME};${VOLTOTAL};${VOLUSED};${VOLSPGAR};${VOLSISSAVE};${VOLLOGUSED};${VOLLOGAVAIL};${ISSPCREPLOG};${ISSPCENFLOG};"|tee -a ${TMP}

#echo "# Cluster;Node;Aggregate;Size;Available Size;Used Size;Total Physical Used Size;Used Percentage;Hybrid;Number Of Volumes;SVM;Vol.name;Vol.size;Total User-Visible Size;Vol.Used Size;Space Saved by Storage Efficiency;Space Saved by Deduplication;Space Saved by Compression;Volume Size Used by Snapshot Copies; "|tee -a ${TMP}

    done  # volume show



  done  # show aggr

done  # CLUSTER


 
if [ ${MAIL} ]; then
  echo "#" >> ${TMP}
  echo "# Produced by ${PGM} v${VER} @${HOSTNAME} at ${DATI}" >> ${TMP}
  cp ${TMP} /tmp/${CSV}
  echo "${PGM} v${VER} at `date`" | mailx -a /tmp/${CSV} -s "@${HOSTNAME}: FSOD cDOT Aggr-Volume report ${DATE} [${PGM} v${VER}]" ${MAILTO}
  echo "`date` Mailed ${CSV} to ${MAILTO}"|tee -a ${LOG}
  rm /tmp/${CSV}
fi  # MAIL


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

