
#!/bin/bash
# File	: cdot_rpt_raw-aggr_sizes.sh
# By	: Maarten.deBoer@atos.net, 191121
# Subject	: Script to report on RAW and Aggr sizes
PGM="`basename $0|cut -d\. -f1`"
VER="0.1"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
HOSTNAME="`hostname|cut -d\. -f1`"
MAILTO="maarten.deboer@atos.net"
MAIL=""
FILTER="[?]*"
CSV="/tmp/${PGM}_`date +%Y-%m-%d-%H-%M-%S`.csv"

CLUSTERS="${HOME}/etc/clusters"

#$ ssh nlnaf107 'set -unit GB -showseparator ";" ; aggr show -field aggr,node,size'|sed 's/GB//g'
# aggregate;node;nodes;size;

#$ ssh nlnaf107 'set -unit GB -showseparator ";" ; storage disk show -field physical-size,usable-size,node,aggr'
# disk;aggregate;nodelist;physical-size;usable-size;


# MAIN

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

# Check options
while [ $# -gt 0 ]
  do
  case ${1} in
    -e | --etc) CLUSTERS=${2}; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -f) FILTER=${2}; shift ;;
    -m | --mail) MAIL=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -v) VFILTER=${2}; shift ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

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

echo "# AGGREGATE;NODE;NODES;SIZE [GB];USED [GB]; " > ${TMP}.aggr

for CLUSTER in `cat ${CLUSTERS}|grep -v ^#|grep ${FILTER}`
do
  echo "  Getting info from ${CLUSTER} ..."|tee -a ${LOG}

  ${SSH} ${CLUSTER} "set -unit GB -showseparator \";\" ; aggr show -field aggr,node,size,used"|grep ${CLUSTER}|sed 's/GB//g'|tee -a ${TMP}.aggr

  ${SSH} ${CLUSTER} "set -unit GB -showseparator \";\" ; storage disk show -field physical-size,usable-size,node,aggr"|grep ${CLUSTER}|grep GB|tee -a ${TMP}.disk

# Collecting disk numbers /type
  cat ${TMP}.disk|awk -F\; '{print $4}'|sort -u|grep GB|while read DISKTYPE REST
  do
    DISKTYPECNT=`grep ${DISKTYPE} ${TMP}.disk|wc -l`
    DISKSIZE=`echo ${DISKTYPE}|sed 's/GB//g'`
echo "DISKSIZE=${DISKSIZE} DISKTYPECNT=${DISKTYPECNT}"
    DISKTYPEGB=`expr ${DISKSIZE} \* ${DISKTYPECNT}`
    echo ";${CLUSTER};${DISKSIZE};${DISKTYPECNT}x;=;${DISKTYPEGB};"|sed 's/GB//g'|tee -a ${TMP}

  done  # DISKTYPE
# empty disk-file for next Cluster
  cp /dev/null ${TMP}.disk

done  # for CLUSTER

if [ ${MAIL} ] && [ "${MAILTO}" != "" ]; then
  echo "  Mailing to ${MAILTO} ..."|tee -a ${LOG}
  cp ${TMP}.aggr ${CSV}
  echo "" >> ${CSV}
  echo "" >> ${CSV}
  echo "#RAW(physical-size in GB);CLUSTER;DISKTYPE [GB];CNT;=;TOTAL [GB];" >> ${CSV}
  cat ${TMP} >> ${CSV}
  echo "" >> ${CSV}
  echo "# " >> ${CSV}
  echo "# " >> ${CSV}
  echo "# `date` by ${PGM} v${VER} at ${HOSTNAME}" >> ${CSV}
  (cat ${CLUSTERS}|grep ${FILTER};echo;echo "`date`")| mailx -a ${CSV} -s ":${HOSTNAME}: RAW and Aggr sizes [${PGM} v${VER}]" ${MAILTO}
  rm ${CSV}
fi

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

