
#!/bin/sh
# File	: get_filer_aggr_vols.sh
# By	: M. de Boer, 10615
# Subject	: Get all Aggr's + Vol's in CSV file
#(0.2)	: Added AGGRONLY
#(0.3)	: Added ${MAILSUBJ}
#(0.4)	: Added SnapReserve at Aggr & Volumes. -m & (v${VERSION}) at #
#(0.5)	: A la SOD-reporting. 
#	With "Date Frame Pool Available	Allocated Used Available-Allocated % Available-Used % Allocated-Used %"
#	-n|--nomail
#(0.6)	: echo \c -> echo -n
#(0.7)	: Added --toll ${MAILSUBJ} -> ${SUBJECT}, ${FILERSTR}, ${CSVSTR}
#(0.8)	: "(Volume) Used [GB]" added

PGM="`basename $0|cut -d\. -f1`"
VERSION="0.8"
TMP="/tmp/$PGM.$$"
MAILTO="maarten.deboer@atos.net"
HOSTNAME="`hostname|cut -d\. -f1`"
MAIL="1"
FILERS="$HOME/etc/filers"
MAILFILE="/tmp/$PGM.$$.mail"
SSH="/usr/bin/ssh -n"
CSVSTR="FSOD_Aggr-Vol"
FILTERSTR="[1234567890]*"
AGGRONLY=""
SUBJECT="Filer Aggregates+Volumes report"
DATE="`date +%d-%m-%Y`"
TOLL=""
FILTER="${FILTERSTR}"

USAGE()
{
  echo "Usage: $PGM [options] "
  echo "  Version: ${VERSION}"
  echo "  options:"
  echo "    -a : Aggr only"
  echo "    -f : filter filername (${FILTER})"
  echo "    -h : this help"
  echo "    -n : do NOT send mail"
  echo "    -V : Version"
  echo "    -x : set -x"
  echo "    --aggronly : Aggr only"
  echo "    --toll     : send to LiveLink (via mailbox-role)"
  echo "    --help     : this help"
  echo "    --mailto   : change MAILTO address & do send mail (${MAILTO})"
  echo "    --nomail   : do NOT send mail"
}

# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -a | --aggronly) AGGRONLY=1 ;;
    -n | --nomail) MAIL="" ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    --toll) TOLL=1; MAIL=1; MAILTO="maarten.deboer@atos.net" ;;
    -h | --help) USAGE; exit 1 ;;
    -f) FILTER=$2; shift ;;
    -V) echo "${PGM}: v${VERSION}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done

if [ ${AGGRONLY} ]; then
  SUBJECT="Filer Aggregates (only) report"
  CSVSTR="FSOD_Aggr"
fi

# FILTER (-f) is altered, then add in filename
if [ "${FILTERSTR}" != "${FILTER}" ]; then
  CSV="${CSVSTR}_${FILTER}_`date +%Y-%m-%d`.csv"
else
  CSV="${CSVSTR}_`date +%Y-%m-%d`.csv"
fi


echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "AGGRONLY=${AGGRONLY}"
echo "SUBJECT=${SUBJECT}"
echo "FILTER=${FILTER}"
echo "TOLL=${TOLL}"
echo "CSV=${CSV}"

 
echo "# Date;Frame (Filername);Pool (Aggrname);(Volname);Available (Total) [GB];Allocated (Used) [GB];(Volume) Used [GB];Available-Allocated (Perc) [%];(SnapReserve) [%]; " >> ${TMP}

for FILER in `cat ${FILERS}|grep -v \#|awk -F\; '{print$1}'|grep ${FILTER}`
do
  echo "${FILER};"
  ${SSH} ${FILER} aggr status|grep online|grep -v Aggr|awk '{print $1}'|sort|while read AGGR
  do
    echo "${FILER} ; ${AGGR}" 
    echo -n "${DATE};${FILER};" >> ${TMP}
    AGGRDF=`${SSH} ${FILER} df -gA ${AGGR}|grep -v Aggregate|grep -v snapshot|awk '{print $1"; ;"$2";"$3";;"$5";"}'|sed -e 's/GB//g'|sed -e 's/\%//g'`
    AGGRSNAPRES=`${SSH} ${FILER} snap reserve -A ${AGGR}|awk '{print $7}'|sed -e 's/\%//g'`
    echo "${AGGRDF} ${AGGRSNAPRES};"  >> ${TMP}
# When not "--aggronly" (is AGGR only), then also Volume info
    if [ "${AGGRONLY}" = "" ]; then
      ${SSH} ${FILER} aggr show_space ${AGGR}|grep volume|grep -v aggregate|awk '{print $1}'|while read VOL
      do
        echo -n "${DATE};${FILER};${AGGR};" >> ${TMP}
        VOLDF=`${SSH} ${FILER} df -g ${VOL}|grep -v Filesystem|grep -v snapshot|awk '{print $1";"$2";"$3";"$4";"$5";"}'|sed -e 's/GB//g'|sed -e 's/\%//g'`
        VOLSNAPRES=`${SSH} ${FILER} snap reserve ${VOL}|awk '{print $7}'|sed -e 's/\%//g'`
        echo "${VOLDF}${VOLSNAPRES};" >> ${TMP}

      done
    fi  # [ ! ${AGGRONLY} ]

  done

done

echo "" >>  ${TMP}
echo "# From ${PGM} (v${VERSION})" >>  ${TMP}
echo "# At;${HOSTNAME};`date`" >> ${TMP}
echo "# Filter;${FILTER};" >> ${TMP}

if [ $MAIL ]; then
# Subject
  SUBJECT=":${HOSTNAME}: ${SUBJECT} [${PGM} v${VERSION}]"
  if [ ${TOLL} ]; then
    SUBJECT="${SUBJECT} {TO_LL:fsod_capacity}"
  fi
  echo "Sending the output to ${MAILTO} ..."
  cat ${TMP} | uuencode ${CSV}| mailx -s "${SUBJECT}" ${MAILTO}
fi

rm $TMP
echo "`date` End"
exit 0

