
#!/bin/ksh
# 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)	: Added grep <CUSTOMERSTR>; option -c; LOG; option -e
#(0.9)	: Mod; RHEL6 (mailx -a). Added; df -s (saved/a-sis/de-dupe); Changed to ksh caused by calc
#(0.10)	: Mod for cDOT. Removed TOLL
#(0.11)	: Added sending aggr-data to Graphite
#(0.12)	: Added sending vol-data to Graphite
#(0.13)	: Disabling (#) vol-data to Graphite
#(0.14)	: Enabling vol & aggr data upload to GRAPHITE

PGM="`basename $0|cut -d\. -f1`"
VER="0.14"
TMP="/tmp/${PGM}.$$"
MAILTO="maarten.deboer@atos.net"
HOSTNAME="`hostname|cut -d\. -f1`"
MAIL="1"
FILERS="${HOME}/etc/filers_all"
MAILFILE="/tmp/${PGM}.$$.mail"
SSH="/usr/bin/ssh -n"
CSVSTR="FSOD_Aggr-Vol"
FILTERSTR="[?]*"
AGGRONLY=""
SUBJECT="Filer Aggregates+Volumes report"
DATE="`date +%d-%m-%Y`"
FILTER="${FILTERSTR}"
CUSTCODE=""
LOG="${HOME}/log/${PGM}.log"
GRAPHITESRV="10.192.109.224 2003"
GRAPHITE=""
NC="${HOME}/bin/nc"
GROUP="nl"

USAGE()
{
  echo "Usage: $PGM [options] "
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -a : Aggr only"
  echo "    -c|--cust : Customercode"
  echo "    -e|--etc  : Etc/filers-file (${FILERS})"
  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 "    --graphite : send to Graphite"
  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 ;;
    -c | --cust) CUSTCODE=${2}; shift ;;
    -e | --etc) FILERS=${2}; shift ;;
    -n | --nomail) MAIL="" ;;
    --graphite) GRAPHITE="1" ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -f) FILTER=${2}; shift ;;
    -V) echo "${PGM}: v${VER}"; 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

if [ "${CUSTCODE}" != "" ]; then
  SUBJECT="${SUBJECT} with Customercode=${CUSTCODE}"
  CSVSTR="${CSVSTR}_${CUSTCODE}"
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 "`date` ${PGM} v${VER} started." | tee -a ${LOG}

echo "AGGRONLY=${AGGRONLY}"
echo "GRAPHITE=${GRAPHITE}"
echo "CSV=${CSV}"
echo "CUSTCODE=${CUSTCODE}"
echo "FILERS=${FILERS}"
echo "FILTER=${FILTER}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "SUBJECT=${SUBJECT}"

echo "# Date;Frame (Filername);Pool (Aggrname);(Volname);Available (Total) [GB];Allocated (Used) [GB];(Volume) Used [GB];Available-Allocated (Perc) [%];(SnapReserve) [%];(Volume) Saved (de-duped) [GB];(Volume) Saved (% = Saved/ (Used+Saved)) [%];" >> ${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 -g -A ${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}
    if [ ${GRAPHITE} ]; then
      HDR="filer.cap.${GROUP}"
      DATES="`date +%s`"
# Add data via NetApp to Graphite-server
      AGGRTOTAL="`echo ${AGGRDF}|awk -F\; '{print $3}'`"
      AGGRUSED="`echo ${AGGRDF}|awk -F\; '{print $4}'`"
      echo "GRAPHITE AGGR: ${AGGR} ${AGGRTOTAL} ${AGGRUSED}"
      echo "${HDR}.${FILER}.aggr.${AGGR}.total ${AGGRTOTAL} ${DATES}"|${NC} ${GRAPHITESRV}
      echo "${HDR}.${FILER}.aggr.${AGGR}.used ${AGGRUSED} ${DATES}"|${NC} ${GRAPHITESRV}
    fi

# When not "--aggronly" (is AGGR only), then also Volume info
# 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";;"$5}'|sed -e 's/GB//g'|sed -e 's/\%//g'`
        VOLSNAPRES=`${SSH} ${FILER} snap reserve ${VOL}|awk '{print $7}'|sed -e 's/\%//g'`
        VOLSAVED=`${SSH} ${FILER} df -s ${VOL}|grep -v Filesystem|grep -v snapshot|awk '{print $3}'|sed -e 's/GB//g'|sed -e 's/\%//g'`
        VOLSAVEDPERC=`${SSH} ${FILER} df -s ${VOL}|grep -v Filesystem|grep -v snapshot|awk '{print $4}'|sed -e 's/GB//g'|sed -e 's/\%//g'`
        let "VOLSAVEDGB = ${VOLSAVED} / 1024/1024"

        echo "${VOLDF};${VOLSNAPRES};${VOLSAVEDGB};${VOLSAVEDPERC};" >> ${TMP}
# get_filer_aggr_vols.ksh

## Add data via NetApp to Graphite-server
        if [ ${GRAPHITE} ]; then
          HDR="filer.cap.${GROUP}"
          DATES="`date +%s`"
          VOLTOTAL="`echo ${VOLDF}|awk -F\; '{print $2}'`"
          VOLUSED="`echo ${VOLDF}|awk -F\; '{print $3}'`"
          echo "GRAPHITE VOL: ${VOL} ${VOLTOTAL} ${VOLUSED}"
          echo "${HDR}.${FILER}.vol.${VOL}.total ${VOLTOTAL} ${DATES}"|${NC} ${GRAPHITESRV}
          echo "${HDR}.${FILER}.vol.${VOL}.used ${VOLUSED} ${DATES}"|${NC} ${GRAPHITESRV}
        fi

      done
    fi  # [ ! ${AGGRONLY} ]

  done

done

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

if [ $MAIL ]; then
## Subject
  SUBJECT=":${HOSTNAME}: ${SUBJECT} [${PGM} v${VER}]"
  echo "`date` Sending the output to ${MAILTO} ..."|tee -a ${LOG}
  if [ "${CUSTCODE}" != "" ]; then
# Select CUST-code
##    cat ${TMP}|egrep -i -e"^#|${CUSTCODE}"|uuencode ${CSV}|mailx -s "${SUBJECT}" ${MAILTO}
    cat ${TMP}|egrep -i -e"^#|${CUSTCODE}" > /tmp/${CSV}
    date|mailx -a /tmp/${CSV} -s "${SUBJECT}" ${MAILTO}
  else
##    cat ${TMP}|uuencode ${CSV}|mailx -s "${SUBJECT}" ${MAILTO}
    cat ${TMP} > /tmp/${CSV}
    date|mailx -a /tmp/${CSV} -s "${SUBJECT}" ${MAILTO}
  fi
fi

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

