
#!/bin/sh
# File	: chk_dataprot_config.sh (chk_sv_config.sh)
# By	: Maarten.deBoer@Atos.net, 120123
# Subject	: Script to check snapvault configs. Do all Qtrees has a SnapVault ?
# Mod(0.2)	: Added check for SV-lics & output for take in SnapVault
# Mod(0.3)	: Added create_qsm-<vfilerpart>.sh
# Mod(0.4)	: Added: check (Q)SM ; Renamed in chk_dataprot_config.sh
# Mod(0.5)	: Changed PROTFILER, NEWFILER-OLDFILER (after FSOD-SLB change)
# set -x
PGM="`basename $0|cut -d\. -f1`"
VERSION="0.5"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
FILERS="${HOME}/etc/filers"
MAILTO="maarten.deboer@atos.net"
HOSTNAME="`hostname|cut -d\. -f1`"
FILTER="[1234567890]*"
DATI="`date +%Y%m%d_%H%M%S`"

CUST="slb"
VFILERNR="01"
DPFILER="nlnaf59"
OLDFILER="nlnaf02"

if [ $# -ge 2 ]; then
  CUST=${1}
  VFILERNR=${2}
fi
case ${CUST}${VFILERNR} in
  slb01) OLDFILER="nlnaf01"; SRCFILER="nlnaf62"; DPFILER="nlnaf59" ;;
  slb02) OLDFILER="nlnaf01"; SRCFILER="nlnaf62"; DPFILER="nlnaf59" ;;
  slb03) OLDFILER="nlnaf03"; SRCFILER="nlnaf61"; DPFILER="nlnaf59" ;;
  slb04) OLDFILER="nlnaf04"; SRCFILER="nlnaf62"; DPFILER="nlnaf59" ;;
  slb05) OLDFILER="nlnaf01"; SRCFILER="nlnaf61"; DPFILER="nlnaf59" ;;
  slb06) OLDFILER="nlnaf01"; SRCFILER="nlnaf62"; DPFILER="nlnaf59" ;;
  slb07) OLDFILER="nlnaf25"; SRCFILER="nlnaf59"; DPFILER="nlnaf62" ;;
  slb08) OLDFILER="nlnaf26"; SRCFILER="nlnaf60"; DPFILER="nlnaf62" ;;
  slb10) OLDFILER="nlnaf01"; SRCFILER="nlnaf59"; DPFILER="nlnaf62" ;;
  slb11) OLDFILER="nlnaf01"; SRCFILER="nlnaf59"; DPFILER="nlnaf62" ;;
  *)
  echo "Selection ${CUST}${VFILERNR} NOT known. Exiting ..."
  exit 4
  ;;
esac


FILTER="${CUST}${VFILERNR}"
NEWSH="${HOME}/${CUST}/create_qsm-${CUST}${VFILERNR}.sh"

DPVOL="ao_slb99_vol9${VFILERNR}"

echo "Customer= ${CUST}"
echo "Vfilenr= ${VFILERNR}"
echo "Filter= ${FILTER}"
echo "DataProtFiler= ${DPFILER}"
echo "OLDFiler= ${OLDFILER}"

sleep 2

mkdir ${HOME}/${CUST}/
cp /dev/null ${NEWSH}

# After every 10 SM's a sleep
CMDCNT=0

echo "# Filer/vFiler;Volume;Qtree;Q-type;Q-mode;Snap Vault/Mirror;S-source;S-destination;Last update;Status;;First(oldest) Snap;" > ${TMP}
echo "# Filer/vFiler;Volume/Qtree;Type;Mode;Quota Used(KB);Quota Limit(KB);(Volume/Qtree); " > ${TMP}.need
for FILER in `cat ${FILERS}|grep -v \^#`
do
# Check is SnapVault/SnapMirror LIC is available.
  LIC="`${SSH} ${FILER} license|egrep 'sv|snapmirror'|grep -v 'not licensed'`"
  echo "${FILER} SV/SnapMirror LICs: ${LIC}"
# If NOT empty = Lic available, then get status
  if [ "${LIC}" != "" ]; then
    ${SSH} ${FILER} snapvault status > ${TMP}.sv
    ${SSH} ${FILER} snapmirror status > ${TMP}.sm
    ${SSH} ${FILER} vfiler status|grep running|grep ${FILTER}|awk '{print $1}'|while read VFILER
    do
      echo "${FILER}/${VFILER};"|tee -a ${TMP}
      echo "${FILER}/${VFILER} protection needed for Qtree ;" >> ${TMP}.need
# Gettting Qtree list. From this list every Qtree is checked for SM / SV.
      ${SSH} ${FILER} vfiler run ${VFILER} qtree status|grep -v '^$'|egrep -v '=====|Volume|-----'|awk '{print $1,$2,$3,$5}'|grep -v 'unix enabled'|awk '{print $1,$2,$3,$4}'|while read VOLUME QTREE TYPE MODE
      do
        SV="`grep \"${VOLUME}/${QTREE}\" ${TMP}.sv|awk '";"{print $1";"$2";"$4";"$5";"$6}'`"
# Check if in QSM. But remove QSM to new filers
        SM="`grep \"${VOLUME}/${QTREE}\" ${TMP}.sm|awk '";"{print $1";"$2";"$4";"$5";"$6}'|grep -v ${OLDFILER}`"
# No SV & SM
        if [ "${SV}" = "" ] && [ "${SM}" = "" ] ; then
          QRPT="`${SSH} ${FILER} vfiler run ${VFILER} quota report|grep ${QTREE}|awk '{print $5";"$6";("$3"/"$4");"}'`"
# Check is Volume/Qtree = equal. If not, then EMPTY
          CHECK="`echo ${QRPT}|grep "${VOLUME}/${QTREE}"|awk -F\; '{print $1";"$2}'`"
# If EMPTY then not OK. Quota <> Volume/Qtree
          if [ "${CHECK}" = "" ]; then
            CHECK="Volume/Qtree:${VOLUME}/${QTREE} <> Quota report:${QRPT}"
          fi
          NEED="`echo ";${VOLUME}/${QTREE};${TYPE};${MODE};${CHECK};"|grep ';normal;'`"
          echo ${NEED} >> ${TMP}.need
          echo ";${VOLUME};${QTREE};${TYPE};${MODE};-;;" >> ${TMP}

          if [ "${NEED}" != "" ]; then
          # Add to create-sh
echo "QRPT=${QRPT}"
            NEWSIZEKB="`echo "${QRPT}" | awk -F\; '{print $2}'`"
## CNT=`expr $CNT + 1`
##echo "${NEWSIZEKB}KB "
#            echo "#ssh ${DPFILER} vol size ${DPVOL} +${NEWSIZEKB}k" >> ${NEWSH}
            echo "ssh ${DPFILER} snapmirror initialize -S ${FILER}-sm:/vol/${VOLUME}/${QTREE} /vol/${DPVOL}/${QTREE} " >> ${NEWSH}
            CMDCNT=`expr ${CMDCNT} + 1`
# After every 10 SM's a sleep
            if [ ${CMDCNT} -gt 10 ]; then
              echo "sleep 300" >> ${NEWSH}
              CMDCNT=0
            fi
          fi

        else
echo "SV=${SV} SM=${SM}" > /dev/null
echo "SV=${SV} SM=${SM}" 
        fi
# Place V: / M: in front of ${SV} / ${SM}
        if [ "${SV}" != "" ]; then
          SNAPFILER="`echo ${SV}|awk -F\; '{print $2}'|cut -d\: -f1`"
          SNAPVOLUME="`echo ${SV}|awk -F\; '{print $2}'|cut -d\: -f2|cut -d\/ -f3`"
echo "SF=${SNAPFILER} SVol=${SNAPVOLUME}"
          FIRSTSNAP="`${SSH} ${SNAPFILER} snap list ${SNAPVOLUME}|cut -d\% -f5|awk '{print $5}'|grep sv|tail -1`"
          echo ";${VOLUME};${QTREE};${TYPE};${MODE};V;${SV};${FIRSTSNAP};" >> ${TMP}
        fi
        if [ "${SM}" != "" ]; then
# Get the 1st, oldest snap. So retention can be determined
          SNAPFILER="`echo ${SM}|awk -F\; '{print $2}'|cut -d\: -f1`"
          SNAPVOLUME="`echo ${SM}|awk -F\; '{print $2}'|cut -d\: -f2|cut -d\/ -f3`"
echo "SF=${SNAPFILER} SVol=${SNAPVOLUME}"
          FIRSTSNAP="`${SSH} ${SNAPFILER} snap list ${SNAPVOLUME}|cut -d\% -f5|awk '{print $5}'|grep night|tail -1`"
          echo ";${VOLUME};${QTREE};${TYPE};${MODE};M;${SM};${FIRSTSNAP};" >> ${TMP}
        fi
      done

      echo ";" >> ${TMP}
    done
  fi
done
echo " ;"
echo "# Produced by ${PGM} v${VERSION} at `hostname` at `date`"|tee -a ${TMP}
echo "# Produced by ${PGM} v${VERSION} at `hostname` at `date`"|tee -a ${TMP}.need
echo "# Produced by ${PGM} v${VERSION} at `hostname` at `date`"|tee -a ${NEWSH}
##echo "# /db & /mirr EXLCUDED"|tee -a ${TMP}.sv-need

cat ${TMP}|uuencode ${PGM}-${FILTER}-${DATI}.csv|mailx -s "Check Qtrees vs DataProtection (SV&SM) (FILTER=${FILTER})[${PGM} v${VERSION}]" ${MAILTO}
cat ${TMP}.need|uuencode ${PGM}-${FILTER}-${DATI}-needed.csv|mailx -s "Prot. needed (FILTER=${FILTER})[${PGM} v${VERSION}]" ${MAILTO}

echo "Mailed to ${MAILTO} (with FILTER=${FILTER}) ."

cp ${TMP}.sm /tmp/${PGM}.sm
cp ${TMP}.sv /tmp/${PGM}.sv
rm ${TMP} ${TMP}.sm ${TMP}.sv ${TMP}.need
exit 0

