
#!/bin/sh
# File	: noc_vol_offline_rpt.sh
# By	: Maarten.deBoer@Atos.net, 160203, 240205
# Subject	: Script to report offline volumes at NetappOntap via CLI
#(0.2)	: Added USAGE
#(0.3)	: Changed Subject
#(0.4),211110,MdB	: Some updates, line verbose
#(0.5),230502,MdB	: Added excludes (for CC-volumes) EXCLFILE, -f => -c
#(0.6),231106,MdB	: Mod. DATA
#(0.7),240205	: From cdot_rpt_vol_offline.sh
PGM="`basename $0|cut -d\. -f1`"
VER="0.7"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
MAILTO="maarten.deboer@atos.net"
CLUSTERS="${HOME}/etc/clusters"
CSV="/tmp/${PGM}.csv"
DATA="${HOME}/data/netapp_vol_offline.csv"
MAIL=""
CFILTER="[?]*"
HOSTNAME=`hostname |cut -d\. -f2`
EXCLFILE="${HOME}/etc/${PGM}.excl"
REM_AFTER="14 days"
NETAPP_ENV="nl-fsod"
RCFILE="${HOME}/etc/${PGM}.rc"

USAGE()
{
  echo "Usage: $PGM [options] "
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -c         : Cluster filter (${CFILTER})"
  echo "    -e|--etc   : Etc/clusters-file (${CLUSTERS})"
  echo "    -h         : this help"
  echo "    -m|--mail  : send Mail"
  echo "    -V         : Version"
  echo "    -x         : set -x"
  echo "    --mailto   : change MAILTO address & do send mail (${MAILTO})"
}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using "|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE
# Check options
while [ $# -gt 0 ]
  do
  case ${1} in
    -e | --etc) CLUSTERS=${2}; shift ;;
    -m | --mail) MAIL=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -c) CFILTER=${2}; shift ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "CLUSTERS=${CLUSTERS}"
echo "CFILTER=${CFILTER}"
echo "DATA=${DATA}"
echo "EXCLFILE=${EXCLFILE}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "NETAPP_ENV=${NETAPP_ENV}"
sleep 1

# Check is DATA-file. If not create
if [ ! -f ${DATA} ]; then
  touch ${DATA}
fi
# Check Exclude-file. If not create
if [ ! -f ${EXCLFILE} ]; then
  touch ${EXCLFILE}
fi

echo "# Cluster; Vserver;Aggregate;Volume;Size;1st seen at;Remove after;" > ${TMP}
for CLUSTER in `cat ${CLUSTERS}|grep -v ^#|grep "${CFILTER}"`
do
  echo "${CLUSTER} ..."
  ${SSH} ${CLUSTER} 'set -showseparator " " ; vol show -state offline -fields vserver,aggregate,volume,size,state'|grep offline|grep -vf ${EXCLFILE}|grep -v ^#|while read VSERVER VOLUME AGGREGATE SIZE STATE REST
  do
#    echo "${VSERVER};${AGGREGATE};${VOLUME};${SIZE};${STATE};${REST}"

# Check if volume is in DATA-file
    ANSW="`grep ${VOLUME} ${DATA}|grep -v ^#|grep ${VSERVER}`"
    if [ "${ANSW}" = "" ]; then
    # This volume is not in DATA-file. So add
      DATE=`date +%Y-%m-%d`
      REMOVE_DATE=`date +%Y-%m-%d  --date="+ ${REM_AFTER}"`
      echo "${CLUSTER};${VSERVER};${AGGREGATE};${VOLUME};${SIZE};${DATE};${REMOVE_DATE};" |tee -a ${DATA}
      echo "${CLUSTER};${VSERVER};${AGGREGATE};${VOLUME};${SIZE};${DATE};${REMOVE_DATE};" >> ${TMP}
    else
      echo "${ANSW};" |tee -a ${TMP}
    fi

  done  # while read
done  # for FILER

if [ ${MAIL} ]; then
  cp ${TMP} ${CSV}
  LINES="`cat ${CSV}|grep -v ^#|wc -l`"
  echo "${LINES} offline volume(s) at ${NETAPP_ENV} found. See attached file."|mailx -a ${CSV} -s ":${HOSTNAME}: ${NETAPP_ENV} offline volumes [${PGM} v${VER}]" ${MAILTO}
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
  rm ${CSV}
fi  # MAIL

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

