
#!/bin/ksh
# File	: make_qtree-vault_report.sh
# By	: Maarten.deBoer@Atso.net, 160511
# Subject	: Script to make a report about Qtrees & SnapVaulted data. Based on volume names and NAT based on volumes at Vfilers
PGM="`basename ${0}|cut -d\. -f1`"
VER="0.1"
TMP="/tmp/${PGM}.$$"
DATUM=`date '+%m-%d-%Y'`
DATADIR=${HOME}/data/out
MAILTO="maarten.deboer@atos.net"
SSH="/usr/bin/ssh -n"
FILERS="${HOME}/etc/filers"
HOSTNAME="`hostname|cut -d\. -f1`"
MAXLOGSIZE=1024   # In K's
DATE=`date '+%Y-%m-%d'`
LOG="${HOME}/log/${PGM}.log"
CUSTCODE=""
FILTER="[?]*"
MAIL=""
VERBOSE=""

# Functions
USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VER}"
  echo "  options     :"
  echo "    -c|--cust : Customercode"
  echo "    -e|--etc  : Etc/filers-file (${FILERS})"
  echo "    -f        : Filter filername (${FILTER})"
  echo "    -h|--help : this Help"
  echo "    -m|--mail : do send Mail"
  echo "    --mailto  : change MAILTO address & do send mail (${MAILTO})"
  echo "    -v        : Verbose (gives some progres information)"
  echo "    -x        : set -x"
  echo "    -V        : show Version"
}
## MAIN
# Check options
if [ ${#} -eq 0 ]; then
  echo "No option(s) given. So not to know what to do. Exiting..."; echo; USAGE;
  exit 1
fi
while [ ${#} -ge 1 ]
  do
  case ${1} in
    -f) FILTER=${2}; shift ;;
    -c | --cust) CUSTCODE=${2}; shift ;;
    -e | --etc) FILERS=${2}; shift ;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    -m | --mail) MAIL=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -v) VERBOSE="1";;
    -x) set -x ;;
    *)  echo "Option ${1} not known. Exiting..."; echo; USAGE; exit 1 ;;
  esac
    shift
done

if [ -z "${CUSTCODE}" ]
then
  echo "No (part of) customer code given. So not to know what to do. Exiting..."; echo; USAGE;
  exit 1
fi

CUSTOMER=`echo "${CUSTCODE}"|tr [:lower:] [:upper:]`
CSVFILE="FSOD_Qtree-vault_report_${CUSTOMER}_${DATE}.csv"
if [ "${FILTER}" != '[?]*' ]; then
  CSVFILE="FSOD_Qtree_report_${CUSTOMER}-${FILTER}_${DATE}.csv"
fi

echo "CSVFILE=${CSVFILE}"
echo "CUSTCODE=${CUSTCODE}"
echo "CUSTOMER=${CUSTOMER}"
echo "DATE=${DATE}"
echo "FILERS=${FILERS}"
echo "FILTER=${FILTER}"
echo "LOG=${LOG}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "PGM=${PGM}"
echo "TOLL=${TOLL}"
echo "VERBOSE=${VERBOSE}"
echo "VER=${VER}"

#  LOG rotating
touch ${LOG} ${TMP}
# Check & move LOG-file if longer then max.
LOGSIZE=`du -ka $LOG | cut -f1`
if [ $LOGSIZE -ge $MAXLOGSIZE ]; then
  mv $LOG $LOG.old
  touch $LOG
fi

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

# Collect data of vfilers, volumes, qtrees, quotas and exportfs            #
echo "# Filer;Volume;Vol Size [KB];Vol Used [KB];Qtree Name;Qtree Status;Qtree Used [KB];Qtree Quota [KB];SnapVault source; SnapVault dest.;" > ${TMP}

for FILER in `cat ${FILERS}|grep -v ^\#|grep ${FILTER}|awk -F\; '{print $1}'`
do
  echo "${FILER} ..."
  touch ${TMP}.${FILER}.sv-status
  ${SSH} ${FILER} vol status|grep ${CUSTCODE}|grep online|awk '{print $1}'|while read VOLUME REST
  do
# Not the "base" (0) entry
#    echo "${FILER};"
    # Get /filer snapvault overview/information to be reused
    ${SSH} ${FILER} snapvault status > ${TMP}.${FILER}.sv-status
    if [ "${VOLUME}" != "" ]; then
      VOLSIZEKB="`${SSH} ${FILER} df -k ${VOLUME}|egrep -v 'Filesystem|.snapshot'|awk '{print $2}'|sed 's/KB//g'`"
      VOLUSEDKB="`${SSH} ${FILER} df -k ${VOLUME}|egrep -v 'Filesystem|.snapshot'|awk '{print $3}'|sed 's/KB//g'`"
      ${SSH} ${FILER} qtree status -i ${VOLUME}|egrep -v 'Tree|-----| 0 '|awk '{print $2}'|while read QTREE
      do
#        echo "${VOLUME};${QTREE};"
        if [ "${QTREE}" != "" ]; then
          VFILER="`${SSH} ${FILER} qtree status -v ${VOLUME}|egrep -v 'Volume|------'|head -1|awk '{print $5}'`"
          QTREESTATUS="`${SSH} ${FILER} qtree status -v ${VOLUME}|grep \" ${QTREE} \"|awk '{print $5}'`"
          if [ "${VFILER}" != "" ]; then
            QUOTAUSEDKB="`${SSH} ${FILER} vfiler run ${VFILER} quota report|grep ${VOLUME}|grep ${QTREE}|awk '{print $5}'`"
            QUOTALIMITKB="`${SSH} ${FILER} vfiler run ${VFILER} quota report|grep ${VOLUME}|grep ${QTREE}|awk '{print $6}'`"

            SNAPVAULTSRC="`grep ${VOLUME} ${TMP}.${FILER}.sv-status|grep ${QTREE}|awk  '{print $1}'`"
            SNAPVAULTDEST="`grep ${VOLUME} ${TMP}.${FILER}.sv-status|grep ${QTREE}|awk  '{print $2}'`"
            SNAPVAULTLAG="`grep ${VOLUME} ${TMP}.${FILER}.sv-status|grep ${QTREE}|awk  '{print $4}'`"

            echo "${FILER};${VOLUME};${VOLSIZEKB};${VOLUSEDKB};${QTREE};${QTREESTATUS};${QUOTAUSEDKB};${QUOTALIMITKB};${SNAPVAULTSRC};${SNAPVAULTDEST};${SNAPVAULTLAG};"|tee -a ${TMP}
            
          else
            echo "`date` ${PGM}: ERROR: Empty Vfiler at filer ${FILER} at volume ${VOLUME}"|tee -a ${LOG}
          fi
        else
          echo "`date` ${PGM}: ERROR: Empty Qtree at filer ${FILER} at volume ${VOLUME}"|tee -a ${LOG}
        fi

      done  # Qtree
    else
      echo "`date` ${PGM}: ERROR: Empty volume at filer ${FILER}"|tee -a ${LOG}
    fi

  done  # vol status
  rm ${TMP}.${FILER}.sv-status
done  # FILER

# Summarize all numbers. Output will be visible in excel document.         #
echo "# Processed at `date` " >>${TMP}
echo "# by ${HOSTNAME}:${PGM} v${VER} " >>${TMP}
echo "# with Customer selection ${CUSTCODE} " >>${TMP}
echo "# and Filter ${FILTER} " >>${TMP}


SUBJECT=":${HOSTNAME}: FSOD Qtree+vault ${CUSTOMER} ${DATE} [${PGM} v${VER}]"

if [ ${MAIL} ]; then
  RHREL="`/bin/rpm -qa|grep redhat-release|cut -d\- -f4| grep -i server`"
  if [ "${RHREL}" = "5Server" ]; then
    cat ${TMP}|uuencode ${CSVFILE}|mailx -s "${SUBJECT}" ${MAILTO}
  fi
  if [ "${RHREL}" = "6Server" ]; then
    cp ${TMP} /tmp/${CSVFILE}
    echo "${PGM}: [${PGM} v${VER}] at `date`"|mailx -s "@${HOSTNAME}: FSOD Qtree+vault report ${CUSTOMER} ${DATE} [${PGM} v${VER}]" -a /tmp/${CSVFILE} ${MAILTO}
    rm /tmp/${CSVFILE}
  fi
  echo "`date` Mailed ${CSVFILE} to ${MAILTO} (${SUBJECT}) "|tee -a ${LOG}
fi

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

