
#!/bin/sh
# File	: make_lun_report.sh
# By	: Maarten.deBoer@Atos.net, 170503, 170511
# Subject	: Script to report LUNs (from NetApp-filers)
#(0.2),170503	: Added lun show -v
#(0.3),170511	: Renamed from rpt_luns.sh, Because I like to be similar to make_qtree_report. Added AGGR & VOLs to it
#(0.4),170918	: Added some LOG comments
#(0.5),200127	: Added RCFILE to it
#(0.6),200212	: Added SNAP_SCHED (backup) to it. Mod. CSV-name
PGM="`basename $0|cut -d\. -f1`"
VER="0.6"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
FILERS="${HOME}/etc/filers"
FILTER="[?]*"
HOSTNAME="`hostname|cut -d\. -f1`"
MAIL=""
MAILTO="maarten.deboer@atos.net"
SSH="/usr/bin/ssh -n -c 3des-cbc"
DATI="`date +%Y-%m-%d_%H-%M-%S`"
CSV="Atos-TechLab_LUN-report_${HOSTNAME}_${DATI}.csv"
RCFILE="${HOME}/etc/${PGM}.rc"

USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VER}"
  echo "  options        :"
  echo "    -e|--etc     : Etc/filers-file (${FILERS})"
  echo "    -f           : Filter filername (${FILTER})"
  echo "    -h|--help    : this Help"
  echo "    -m|--mail    : do send Mail"
  echo "    -V           : show Version"
  echo "    -x           : set -x"
  echo "    --mailto     : change MAILTO address & do send mail (${MAILTO})"
}
## 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 [ $# -gt 0 ]
  do
  case $1 in
    -f) FILTER=$2; shift ;;
    -m | --mail) MAIL=1 ;;
    -e | --etc) FILERS=$2; shift ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known. Exiting..."; echo; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started"|tee -a ${LOG}
if [ -f ${RCFILE} ]; then
  echo "  RCfile (${RCFILE}) found. Reading it ..."|tee -a ${LOG}
  . ${RCFILE}
fi
echo "CSV=${CSV}"
echo "DATI=${DATI}"
echo "FILERS=${FILERS}"
echo "FILTER=${FILTER}"
echo "MAILTO=${MAILTO}"

sleep 1

touch ${TMP}

echo "# FILER;AGGR;ATOTAL;AUSED;APERC;VOLUME(S);VTOTAL(S);VUSED(S);VPERC(S);SNAP_SCHED;LUN;SIZE;OCCUPIEDSIZE;R/W;ONLINE;MAPPED;SPACERESERV;TYPE;MAPS;CREATIME;" > ${TMP}

for FILER in `cat ${FILERS}|grep -v \^#|awk -F\; '{print $1}'|sort|grep "${FILTER}"`
do
  ping -c 1 ${FILER}
  EC=${?}
  if [ ${EC} -eq 0 ]; then
# Per filer
    ${SSH} ${FILER} 'aggr status'|grep online|sort|awk '{print $1}'|while read AGGR REST
    do
      echo "`date` ${PGM}: ${FILER}/${AGGR} ..."|tee  -a ${LOG}
# Aggr info
      AGGRTOTAL="`${SSH} ${FILER} "df -gA ${AGGR}"|grep ${AGGR}|grep -v snapshot|awk '{print $2}'|head -1`"
      AGGRUSED="`${SSH} ${FILER} "df -gA ${AGGR}"|grep ${AGGR}|grep -v snapshot|awk '{print $3}'|head -1`"
      AGGRPERC="`${SSH} ${FILER} "df -gA ${AGGR}"|grep ${AGGR}|grep -v snapshot|awk '{print $5}'|head -1`"
      echo "${FILER};${AGGR};${AGGRTOTAL};${AGGRUSED};${AGGRPERC};" >> ${TMP}

# Volume info
      ${SSH} ${FILER} "aggr show_space ${AGGR}"|grep vol|grep -v aggregate|sort|awk '{print $1}'|while read VOL REST
      do
        echo "  ${FILER}/${AGGR}/${VOL} ..."
        VOLTOTAL="`${SSH} ${FILER} "df -g ${VOL}"|grep ${VOL}|grep -v snapshot|awk '{print $2}'|head -1`"
        VOLUSED="`${SSH} ${FILER} "df -g ${VOL}"|grep ${VOL}|grep -v snapshot|awk '{print $3}'|head -1`"
        VOLPERC="`${SSH} ${FILER} "df -g ${VOL}"|grep ${VOL}|grep -v snapshot|awk '{print $5}'|head -1`"
        echo "${FILER};${AGGR};;;;${VOL};${VOLTOTAL};${VOLUSED};${VOLPERC};" >> ${TMP}

# Snap +Sched info
        VOLTOTAL_S="`${SSH} ${FILER} "df -g ${VOL}"|grep ${VOL}|grep snapshot|awk '{print $2}'|head -1`"
        VOLUSED_S="`${SSH} ${FILER} "df -g ${VOL}"|grep ${VOL}|grep snapshot|awk '{print $3}'|head -1`"
        VOLPERC_S="`${SSH} ${FILER} "df -g ${VOL}"|grep ${VOL}|grep snapshot|awk '{print $5}'|head -1`"
        SNAP_SCHED="`${SSH} ${FILER} "snap sched ${VOL}"|cut -d\: -f2|head -1`"
        echo "${FILER};${AGGR};;;;${VOL}.snapshot;${VOLTOTAL_S};${VOLUSED_S};${VOLPERC_S};${SNAP_SCHED};" >> ${TMP}


# LUN info
        ${SSH} ${FILER} lun show|grep "/vol/${VOL}/"|awk '{print $1}'| while read LUN REST
        do
          echo "  ${FILER}/${AGGR}/${LUN} ..."
          SIZE="`${SSH} ${FILER} lun show -v ${LUN}|grep '/vol/'|awk '{print $2}' `"
          RW="`${SSH} ${FILER} lun show -v ${LUN}|grep '/vol/'|awk '{print $4}' `"
          ONLINE="`${SSH} ${FILER} lun show -v ${LUN}|grep '/vol/'|awk '{print $5}' `"
          MAPPED="`${SSH} ${FILER} lun show -v ${LUN}|grep '/vol/'|awk '{print $6}' `"
          SPACERESERV="`${SSH} ${FILER} lun show -v ${LUN}|grep 'Space Reservation:'|cut -d\: -f2 `"
          TYPE="`${SSH} ${FILER} lun show -v ${LUN}|grep 'Multiprotocol Type:'|cut -d\: -f2 `"
          MAPS="`${SSH} ${FILER} lun show -v ${LUN}|grep 'Maps:'|cut -d\: -f2 `"
          OCCUPIEDSIZE="`${SSH} ${FILER} lun show -v ${LUN}|grep 'Occupied Size:'|cut -d\: -f2|awk '{print $1}' `"
          CREATIME="`${SSH} ${FILER} lun show -v ${LUN}|grep 'Creation Time:'|cut -d\: -f2 `"

          echo "${FILER};${AGGR};;;;${VOL};;;;;${LUN};${SIZE};${OCCUPIEDSIZE};${RW};${ONLINE};${MAPPED};${SPACERESERV};${TYPE};${MAPS};${CREATIME};" >> ${TMP}

        done  # LUN show
      done  # aggr show_space
    done # aggr status
  else  # EC, ping
    echo "${FILER}; No connectivity;" >> ${TMP}
  fi  # EC, ping
done  # FILER

if [ ${MAIL} ]; then
  cp ${TMP} /tmp/${CSV}
  date | mailx -a /tmp/${CSV} -s ":${HOSTNAME}: LUN report [${PGM} v${VER}]" ${MAILTO}
  echo "`date` ${PGM}:  Mailed ${CSV} to ${MAILTO}"|tee -a ${LOG}
  rm /tmp/${CSV}
fi  # MAIL


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

