
#!/bin/ksh
# File	: make_cap_overview.sh
# By	: Maarten.deBoer@Atos.net, 2014-12-17
# Subject: Script to get an overview (filer) of the storage
#(0.2)	: Added CNTSPARES
#	: Also cDOT ready
PGM="`basename $0|cut -d\. -f1`"
VER="0.2"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
FILTER="[?]*"
HOSTNAME="`hostname|cut -d\. -f1`"
SSH="/usr/bin/ssh -n"
MAIL=""
MAILTO="maarten.deboer@atos.net"
DATE="`date +%Y-%m-%d`"
CSV="/tmp/FSOD_cap_overview_${DATE}.csv"
ETC="${HOME}/etc/filers"
DATADIR="${HOME}/data/out"
MODE7=""
CDOT=""
CNTSPARES=""

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options          :"
  echo "    -e             : set Etc/vfiler_default-file (${ETC})"
  echo "    -f <filter>    : filter filername (${FILTER})"
  echo "    -m | --mail    : Mail (${CSV}-file to ${MAILTO})"
  echo "    --mailto       : change MAILTO address & do send mail (${MAILTO})"
  echo "    -h | --help    : this help"
  echo "    --spares       : count SPARE disks"
  echo "    -x             : set -x"
  echo "    -V             : Version"
}
# Check options
while [ ${#} -gt 0 ]
  do
  case ${1} in
    -e) ETC=${2}; shift ;;
    -f) FILTER=$2; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -m | --mail) MAIL=1;;
    --mailto) MAILTO=${2}; MAIL=1; shift ;;
    --spares) CNTSPARES=1 ;;
    -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} @${HOSTNAME} Started with FILTER=${FILTER}"|tee -a ${LOG}

if [ ! -f ${ETC} ]; then
  echo "`date` ${PGM}: No etc-file ${ETC} found. Exiting ..."|tee -a ${LOG}
  exit 4
fi

FILERS=${ETC}
echo "CNTSPARES=${CNTSPARES}"
echo "CSV=${CSV}"
echo "FILERS=${FILERS}"
echo "FILTER=${FILTER}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"

touch ${TMP} ${CSV}
echo "# Filer;Vol Used [GB];Vol Total [GB];Aggr Used [GB]; Aggr Total [GB];Spare disk(s); Remarks;" > ${TMP}

for FILER in `cat ${FILERS}|grep -v \^#|grep ${FILTER}|awk -F\; '{print $1}'|sort`
do
  # Test for cDOT
  MODE7=""
  CDOT=""
  ANSW="`${SSH} ${FILER} version|grep 'Cluster-Mode'`"
  if [ "${ANSW}" = "" ]; then
    MODE7=1
  else
    CDOT=1
  fi  # if [ "${ANSW}" -ne "" ] 
  TOTVOLTOTLGB=0
  TOTVOLUSEDGB=0
  TOTAGGRTOTLGB=0
  TOTAGGRUSEDGB=0
  ${SSH} ${FILER} df -g|egrep -v 'snapshot|Filesystem'|grep GB|awk '{print $2,$3}'|sed 's/GB//g'|while read VOLTOTLGB VOLUSEDGB REST
  do
    let TOTVOLTOTLGB="${TOTVOLTOTLGB} + ${VOLTOTLGB}"
    let TOTVOLUSEDGB="${TOTVOLUSEDGB} + ${VOLUSEDGB}"
  done  # df -g

  ${SSH} ${FILER} df -A -g|egrep -v 'snapshot|Aggregate'|grep GB|awk '{print $2,$3}'|sed 's/GB//g'|while read AGGRTOTLGB AGGRUSEDGB REST
  do
    let TOTAGGRTOTLGB="${TOTAGGRTOTLGB} + ${AGGRTOTLGB}"
    let TOTAGGRUSEDGB="${TOTAGGRUSEDGB} + ${AGGRUSEDGB}"
  done  # df -g
  echo "${FILER};${TOTVOLUSEDGB};${TOTVOLTOTLGB};${TOTAGGRUSEDGB};${TOTAGGRTOTLGB};"|tee -a ${TMP}

  if [ ${CNTSPARES} ] && [ ${MODE7} ]; then
    #------------------------------------------------------------------------#
    # Get all type of spares with count                                      #
    #------------------------------------------------------------------------#
    ${SSH} ${FILER} sysconfig -r | grep spare |  grep -v Pool | awk '{print $1";"$9";"$11}' | sort -u > ${TMP}.spares
    for SPARE in $(cat ${TMP}.spares)
    do
      TYPE=`echo ${SPARE} |awk -F";" '{print $1}'`
      SPEED=`echo ${SPARE} |awk -F";" '{print $2}'`
      SIZE=`echo ${SPARE} |awk -F";" '{print $3}'`
      SPARECNT="`ssh ${FILER} sysconfig -r | grep ${TYPE} | grep ${SPEED} | grep -c ${SIZE}`"
      echo "${FILER};;;;;${SPARECNT} ${TYPE} ${SPEED} ${SIZE};;"|tee -a ${TMP}
    done  # for SPARE
  fi  # 7MODE
  if [ ${CNTSPARES} ] && [ ${CDOT} ]; then
    echo "${FILER};;;;;Not yet implemented;;"|tee -a ${TMP}
  fi  # CDOT


done  # for FILER

if [ ${MAIL} ]; then
  echo "#" >> ${TMP}
  echo "# `date` ${PGM} v${VER} @${HOSTNAME} " >> ${TMP}
  cp ${TMP} ${CSV}
  date|mailx -a ${CSV} -s "@${HOSTNAME}: FSOD capacity overview [${PGM} v${VER}]" ${MAILTO}
  echo "`date` Mailed to ${MAILTO}"| tee -a ${LOG}
fi

rm ${TMP} ${CSV} ${TMP}.spares
echo "`date` ${PGM} Finished "| tee -a ${LOG}
exit 0

