
#!/bin/ksh
# File	: make_backup_report.sh
# By	: Maarten.deBoer@AtosOrigin.com, 120905
# Subject	: To make a report on NAS(FSOD)backup (SnapShot & SnapVaults)
#(0.2)	: Added SV-scheds
#(0.3)	: Added option --toll (Send to LiveLink)
#(0.4)	: Removed : at REMFILER & Added Local Snapvault Snap Sched
# Initialize variabels                                                     #
PGM="`basename $0|cut -d\. -f1`"
VERSION="0.4"
TMP="/tmp/${PGM}.$$"
HOSTNAME="`hostname|cut -d\. -f1`"
SSH="/usr/bin/ssh -n"
FILERS="${HOME}/etc/filers"
MAXLOGSIZE=1024   # In K's
LOG="${HOME}/log/${PGM}.log"
MAILTO="maarten.deboer@atos.net"
FILTER="[1234567890]*"
CUSTCODE=""
DATADIR=${HOME}/data/out
DATE=`date '+%Y-%m-%d'`
MAIL=""
TOLL=""

#--------------------------------------------------------------------------#
# Functions                                                                #
#--------------------------------------------------------------------------#
USAGE()
{
  echo "Usage: ${PGM} -c <cust.code> [<options>]"
  echo "  Version: ${VERSION}"
  echo "  options    :"
  echo "    -c       : Custom code"
  echo "    -f       : filter (filername) (${FILTER})"
  echo "    -h       : this help"
  echo "    -m       : do send mail"
  echo "    -V       : Version"
  echo "    -x       : set -x"
  echo "    --mail   : do send mail"
  echo "    --mailto : change MAILTO address & do send mail (${MAILTO})"
  echo "    --toll   : sen TO LiveLink (via mailbox-rule)"
  echo "    --help   : this help"
}
# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -f) FILTER=$2; shift ;;
    -c) CUSTCODE=$2; shift ;;
    -m | --mail) MAIL=1 ;;
    --toll) TOLL=1; MAIL=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VERSION}"; exit 3 ;;
    -x)  set -x ;;
    -u | --usd) USD=1;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done

if [ -z "${CUSTCODE}" ]
then
  echo "No (part of) customer code."|tee -a ${LOG}
  USAGE
  echo "`date` $0 (v${VERSION}) Exiting ..."|tee -a ${LOG}
  exit 1
fi

touch ${TMP}
mkdir ${DATADIR}
CUSTOMER=`echo "${CUSTCODE}"|tr [:lower:] [:upper:]`
FILE="${DATADIR}/${PGM}_${CUSTOMER}_${DATE}.csv"
CSVFILE="FSOD_backup_report_${CUSTOMER}_${DATE}.csv"

cp /dev/null ${FILE}

#--------------------------------------------------------------------------#
#  LOG rotating
#--------------------------------------------------------------------------#
touch ${LOG}
# 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${VERSION}) started."|tee -a ${LOG}

echo "# Filer;vFiler;Volume;Local SnapShot;Date;Time;Schedule (Weeks Days Hours @list);Local Qtree;Remote filer;Remote volume;Remote Qtree;Remote SnapVault;Remote Schedule (cnt @day_list @hour_list)" >> ${FILE}

for FILER in `cat ${FILERS}|grep -v ^\#|grep ${FILTER}|awk -F\; '{print $1}'`
do
  echo "${FILER} ..."
# Get SnapVault-destinations for later
  ${SSH} ${FILER} snapvault destinations > ${TMP}.SVdest
  for VFILER in `${SSH} ${FILER} vfiler status|grep -v vfiler|grep running|grep ${CUSTCODE}|sort|awk '{print $1}'`
  do
    ${SSH} ${FILER} vfiler run -q ${VFILER} vol status|grep -v vfiler|grep online|sort|awk '{print $1}'|while read VOL
    do
      SCHED="`${SSH} ${FILER} vfiler run -q ${VFILER} snap sched ${VOL}|cut -d\: -f2`"

# Local SnapShots + Sched.
      ${SSH} ${FILER} vfiler run -q ${VFILER} snap list ${VOL}|grep -v snapmirror|grep ':'|cut -d\) -f3|awk -v FILER="${FILER}" -v VFILER="${VFILER}" -v VOL="${VOL}" -v SCHED="${SCHED}" '{print FILER";"VFILER";"VOL";"$4";`"$1,$2";"$3";"SCHED";"}'|tee -a ${FILE}

      ${SSH} ${FILER} snapvault snap sched ${VOL}|awk -v FILER="${FILER}" -v VFILER="${VFILER}" -v VOL="${VOL}" '{print FILER";"VFILER";"VOL";"$3,"; ; ;"$4";"}'|tee -a ${FILE}

# Remote SnapVaults
##echo "${VOL}|REMFILER=${REMFILER}|REMVOL=${REMVOL}|REMSVSCHED=${REMSVSCHED}|"
      grep ${VOL} ${TMP}.SVdest|awk '{print $1";"$2}'|sed 's/://'|awk -F/ -v FILER="${FILER}" -v VFILER="${VFILER}" -v VOL="${VOL}" '{print FILER";"VFILER";"VOL"; ; ; ; ;"$4";"$6";"$7";"}'|tee -a ${FILE}


# Remote Scheds
      REMFILER="`grep ${VOL} ${TMP}.SVdest|cut -d\: -f1|cut -d' ' -f2|sort -u`"
      REMVOL="`grep ${VOL} ${TMP}.SVdest|cut -d\: -f2|cut -d\/ -f3|sort -u`"
      if [ "${REMFILER}" != "" ] && [ "${REMVOL}" != "" ]; then
        ${SSH} ${REMFILER} snapvault snap sched ${REMVOL}|awk -v FILER="${FILER}" -v VFILER="${VFILER}" -v VOL="${VOL}" '{print FILER";"VFILER";"VOL"; ; ; ; ; ; ;"$2"; ;"$3,";"$4";"}'|tee -a ${FILE}
      fi


    done  # ${VOL}

  done  # for VFILER

done   # for FILER in 

echo "# ${PGM} v${VERSION}"|tee -a ${FILE}
echo "# With: (part)customer code=${CUSTCODE}, (filer)FILTER=${FILTER}, MAILTO=${MAILTO} "|tee -a ${FILE}
echo "# Made at `date` at ${HOSTNAME} "|tee -a ${FILE}

SUBJECT=":${HOSTNAME}: FSOD backup report ${CUSTOMER} ${DATE} [${PGM} v${VERSION}]"
if [ ${TOLL} ]; then
# Send to LiveLink via mail-rule (fsod_backup@elink.atos.net)
  SUBJECT=":${HOSTNAME}: FSOD backup report ${CUSTOMER} ${DATE} [${PGM} v${VERSION}] {TO_LL:fsod_backup}"
fi
if [ ${MAIL} ]; then
  cat ${FILE}|uuencode ${CSVFILE}|mailx -s "${SUBJECT}" ${MAILTO}
  echo "`date` Mailed ${CSVFILE} to ${MAILTO} (${SUBJECT}) "|tee -a ${LOG}
fi 

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

