
#!/bin/ksh
# File	: cdot_backup.sh
# By	: Maarten.deBoer@Atosnet, 160226
# Subject	: Script about (NetApp-)NAS (cDOT) "backups" (SnapShot & SnapVaults) to report & check
# Initialize variabels                                                     #
#(0.2),220504	: Upd. mail part. Removed RHEL check
#(0.3),250217	: From cdot_make_backup_report.sh
#(0.4),250217	: Added --check (for none)
#(0.5),250218	: Add --qtree (report)
#(0.6),250218	: Add # snaps /volume
PGM="`basename $0|cut -d\. -f1`"
VER="0.6"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
HOSTNAME="`hostname|cut -d\. -f1`"
CLUSTERS="${HOME}/etc/clusters"
MAXLOGSIZE=1024   # In K's
MAILTO="maarten.deboer@atos.net"
FILTER="[?]*"
CUSTCODE=""
DATE=`date '+%Y-%m-%d'`
MAIL=""
RPT=""
CHK=""
CHK_STR="[?]*"
SUBJECT="@${HOSTNAME}: FSOD backup ${DATE} [${PGM} v${VER}]"
CSV="/tmp/FSOD_backup_${DATE}.csv"
WITH_QTREE=""
SNAP_LIST=""

#--------------------------------------------------------------------------#
# Functions                                                                #
#--------------------------------------------------------------------------#
USAGE()
{
  echo "Usage: ${PGM} -c <cust.code> [<options>]"
  echo "  Version: ${VER}"
  echo "  options         :"
  echo "    -c            : Custom code"
  echo "    -f            : cluster Filter (${FILTER})"
  echo "    -h            : this help"
  echo "    -m            : do send mail"
  echo "    -V            : Version"
  echo "    -q|--qtree    : with Qtree"
  echo "    -r|--rpt      : create RePorT (and mail)"
  echo "    -s|--snaplist : with Snaplist)"
  echo "    -x            : set -"
  echo "    --chk         : CHecK (and mail)"
  echo "    --mail        : do send mail"
  echo "    --mailto      : change MAILTO address & do send mail (${MAILTO})"
  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 ;;
    -q | --qtree) WITH_QTREE=1;;
    -r | --rpt) RPT=1;MAIL=1 ;;
    -s | --snaplist) SNAP_LIST=1;;
    --chk) CHK=1;CHK_STR="none";MAIL=1 ;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    -u | --usd) USD=1;;
    *)  echo "`date` Option $1 not known."|tee -a ${LOG}; USAGE; exit 1 ;;
  esac
    shift
done

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

CUSTOMER=`echo "${CUSTCODE}"|tr [:lower:] [:upper:]`

#--------------------------------------------------------------------------#
#  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

# ------------------------
# MAIN
# ------------------------
echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "  CLUSTERS=${CLUSTERS}"
echo "  CUSTCODE=${CUSTCODE}"
echo "  CUSTOMER=${CUSTOMER}"
echo "  CSV=${CSV}"
echo "  FILTER=${FILTER}"
echo "  MAIL=${MAIL}"
echo "  MAILTO=${MAILTO}"
echo "  RPT=${RPT}"
echo "  CHK=${CHK}"
echo "  CHK_STR=${CHK_STR}"
echo "  WITH_QTREE=${WITH_QTREE}"
echo "  SNAP_LIST=${SNAP_LIST}"
sleep 1

touch ${TMP}

if [ ${RPT} ] || [ ${CHK} ];then
  if [ ${RPT} ];then
    echo "  Creating REPORT (${CSV})"|tee -a ${LOG}
    SUBJECT="@${HOSTNAME}: FSOD (snapshot)backup report ${CUSTOMER} ${DATE} [${PGM} v${VER}]"
    CSV="/tmp/FSOD_backup_report_${CUSTOMER}_${DATE}.csv"
  fi
  if [ ${CHK} ];then
    echo "  Checking for ${CHK_STR}"|tee -a ${LOG}
    SUBJECT=":${HOSTNAME}: FSOD (snapshot)backup CHECK ${CUSTOMER} ${DATE} [${PGM} v${VER}]"
    CSV="/tmp/FSOD_backup_check_${CUSTOMER}_${DATE}.csv"
  fi  # CHK
  cat ${CLUSTERS}|grep -v ^\#|grep ${FILTER}|while read CLUSTER
  do
    echo "    ${CLUSTER}"
    ${SSH} ${CLUSTER} "set -showseparator \";\" ; vserver show -operational-state running -field vserver"|grep "${CUSTCODE}"|cut -d\; -f1|sort|while read VSERVER
    do
      echo "      ${VSERVER}"
      ${SSH} ${CLUSTER} "set -showseparator \";\" ; volume show -vserver ${VSERVER} -state online -field snapshot-policy"|grep "${VSERVER}"|egrep -v "vol0root|vol0ls01"|grep "${CHK_STR}"|while  read LINE
      do
        # vserver     volume         snapshot-policy  qtree(s)
        VOLUME=`echo ${LINE}|awk -F\; '{print $2}'`
        SH_POL=`echo ${LINE}|awk -F\; '{print $3}'`

        QTREES=""
        if [ ${WITH_QTREE} ]; then
          ${SSH} ${CLUSTER} "set -showseparator \";\" ; qtree show -vserver ${VSERVER} -volume ${VOLUME} -qtree !\"\" -field qtree"|grep "${VSERVER}"|awk -F\; '{print $3}'|while read QTREE
          do
            echo "${CLUSTER};${VSERVER};${VOLUME};${SH_POL};${QTREE};"|tee -a ${TMP}
          done  # QTREE
        else
          if [ ${SNAP_LIST} ]; then
            ${SSH} ${CLUSTER} "set -showseparator \";\" ; snap show -vserver ${VSERVER} -volume ${VOLUME} -field snapshot,create-time"|grep "${VSERVER}"|egrep -v "snapmirror|vserverdr"| while read LINE2
            do
              SNAPSHOT=`echo ${LINE2}|awk -F\; '{print $3}'`
              CREATE_TIME=`echo ${LINE2}|awk -F\; '{print $4}'`
              echo "${CLUSTER};${VSERVER};${VOLUME};${SH_POL};${SNAPSHOT};${CREATE_TIME};"|tee -a ${TMP}
            done  # LINE2
          else
            echo "${CLUSTER};${VSERVER};${VOLUME};${SH_POL};"|tee -a ${TMP}
          fi  # SNAP_LIST
        fi  # WITH_QTREE
      done  # LINE
    done  # VSERVER
  done  # CLUSTER
fi  # RPT

# Is size TMP <> 0 AND ...
if [ -s ${TMP} ] && [ ${MAIL} ] && [ "${MAILTO}" != "" ]; then
  echo "#"|tee -a ${TMP}
  echo "# `date` by ${PGM} v${VER} @ ${HOSTNAME}"|tee -a ${TMP}
  echo "# With: (part)customer code=${CUSTCODE}, (cluster)FILTER=${FILTER}, MAILTO=${MAILTO} "|tee -a ${TMP}
  echo "# And: CHK=${CHK} RPT=${RPT} SNAP_LIST=${SNAP_LIST} WITH_QTREE=${WITH_QTREE}"|tee -a ${TMP}
  echo "# CLUSTER;VSERVER;VOLUME;SNAPSHOT-POLICY;" > ${CSV}
  if [ ${WITH_QTREE} ]; then
    echo "# CLUSTER;VSERVER;VOLUME;SNAPSHOT-POLICY;QTREE;" > ${CSV}
  fi  # WITH_QTREE
  if [ ${SNAP_LIST} ]; then
    echo "# CLUSTER;VSERVER;VOLUME;SNAPSHOT-POLICY;SNAPSHOT;CREATE_TIME;" > ${CSV}
  fi  # SNAP_LIST

  cat ${TMP} >> ${CSV}
  echo "`date` ${PGM}: [${PGM} v${VER}] at ${HOSTNAME}"|mailx -s "${SUBJECT}" -a ${CSV} ${MAILTO}
  EC=${?}
  echo "  Mailed ${CSV} to ${MAILTO} [${SUBJECT}] (${EC}) "|tee -a ${LOG}
  rm ${CSV}
fi  # MAIL ...

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

