
#!/bin/ksh
set +x
#--------------------------------------------------------------------------#
#                                                                          #
# Name: make_cap_report.sh                                                 #
#                                                                          #
# Description: Script collects data about aggregate size and volume size   #
#              of all FC FSOD filers and sends information by mail.        #
#                                                                          #
# Version: 1.6                                                             #
#                                                                          #
# References:                                                              #
#                                                                          #
# Documentation:                                                           #
#                                                                          #
# Parameters: [<email address>]                                            #
#                                                                          #
# Usage: make_cap_report.sh                                                #
#                                                                          #
# Global Description:                                                      #
#                                                                          #
# Author(s): Atos                                                          #
#                                                                          #
# Change log:                                                              #
# aut   date            vers    comments                                   #
# RL    18-06-2008      1.0     Initial version Richard Loos               #
# RL    06-11-2008      1.1     Update                                     # 
# RL    12-04-2010      1.2     Update Richard Loos                        #
# RL    22-04-2010      1.3     Add 'snap_reserve'                         #
# RL    19-03-2012      1.4     Add dedup ratio                            #
# RL    25-06-2012      1.5     Update dedup ratio                         #
# MdB	06-06-2014	1.6	REady for RHEL6 (mailx -a )
#                                                                          #
#--------------------------------------------------------------------------#
#--------------------------------------------------------------------------#
# Initialize variabels                                                     #
#--------------------------------------------------------------------------#
VER="1.6"
DATUM=`date '+%m-%d-%Y'`
DATADIR=${HOME}/data/out
FILE=${DATADIR}/${DATUM}-FSOD-Capacity-Reporting.csv
OFILE=${DATUM}-FSOD-Capacity-Reporting.csv
>${DATADIR}/make_cap_report_new.log

#--------------------------------------------------------------------------#
# Collect data of filers, aggregates, volumes and snapshots                #
#--------------------------------------------------------------------------#
echo "Filer;Aggregate;Volume;Size Aggregate (GB);Size Volume (GB);Used Aggregate (GB);Used Volume (GB);Quota Limit (GB);Proposed Size Volume (GB);Used*100%;Dedup Ratio;Amount spare disks;" > ${FILE}

for FILER in $(cat ${HOME}/etc/filers) 
do
  #------------------------------------------------------------------------#
  # Get all type of spares with count                                      #
  #------------------------------------------------------------------------#
  ssh ${FILER} sysconfig -r | grep spare |  grep -v Pool | awk '{print $1";"$9";"$11}' | sort -u > ${DATADIR}/spare${FILER}
  for SPARE in $(cat ${DATADIR}/spare${FILER})
  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} disk(s)"
  done

  ssh ${FILER} aggr status | grep online | awk '{ print $1 }'| tr -d ' '| sort > ${DATADIR}/aggr${FILER}
  ssh ${FILER} vol status > ${DATADIR}/vol${FILER}

  for AGGR in $(cat ${DATADIR}/aggr${FILER})
  do
    ssh ${FILER} df -A | grep ${AGGR} | head -1 | grep -v snap | read AGGR2 AGGRSIZE AGGRUSED AGGRFREE AGGRPERC
    echo ";${AGGR2};;=SUM(${AGGRSIZE})/1048576;;=SUM(${AGGRUSED})/1048576;;;;${AGGRPERC}"

    for VOLUME in $(cat ${DATADIR}/vol${FILER} | grep online | awk '{ print $1 }' | grep -v ^vol0 | sort )
    do
      AGGR2=`ssh ${FILER} vol status ${VOLUME} | awk -F"'" '{print $2}'|tail -n1`
      if [ ${AGGR} == ${AGGR2} ]
      then
        ssh ${FILER} df /vol/${VOLUME} | grep -v snap | tail -n+2 | read VOL2 VOLSIZE VOLUSED VOLFREE VOLPERC VOL3
        ssh ${FILER} df /vol/${VOLUME} | grep snap | sed 's/snap reserve/snap_reserve/g' | read SNAPVOL2 SNAPVOLSIZE SNAPVOLUSED SNAPVOLFREE SNAPVOLPERC SNAPVOL3
        
        PRC_SAVED=`ssh ${FILER} df -s|grep ${VOLUME} | awk '{print $4}' | awk  -F"%" '{print $1}'`
        echo ";;${VOL2};;=SUM(${VOLSIZE})/1048576;;=SUM(${VOLUSED})/1048576;${VOLUME}_#####;${VOLPERC};${PRC_SAVED}%;"
        echo ";;${SNAPVOL2};;=SUM(${SNAPVOLSIZE})/1048576;;=SUM(${SNAPVOLUSED})/1048576;;;${SNAPVOLPERC};;"
      fi
    done
  done

  rm ${DATADIR}/spare${FILER}
  rm ${DATADIR}/aggr${FILER}
  rm ${DATADIR}/vol${FILER}

done >> ${FILE}

#--------------------------------------------------------------------------#
# Get list of volumes per vfiler                                           #
#--------------------------------------------------------------------------#
>${DATADIR}/make_cap_report.tmp

for FILER in $(cat ${HOME}/etc/filers) 
do
  for VFILER in `ssh ${FILER} vfiler status | grep -v vfiler0 | awk '{print $1}'`
  do
    for VOLUME in $(ssh ${FILER} vfiler run ${VFILER} vol status | grep online | awk '{ print $1 }' | grep -v ^vol0 | sort )
    do
      #--------------------------------------------------------------------#
      # Get quota limit values of all volume variables                     #
      #--------------------------------------------------------------------#
      VOLTOTAL=`ssh ${FILER} df /vol/${VOLUME} | tail -n+2 |grep -v snap | awk '{ print $2 }'`
      VOLUSED=`ssh ${FILER} df /vol/${VOLUME} | tail -n+2 |grep -v snap | awk '{ print $3 }'`
      QUOTAUSED=0
      QUOTALIMIT=0
      for QUOTADEF in $(ssh ${FILER} vfiler run ${VFILER} quota report | grep tree | grep " ${VOLUME}" | grep -v "* ${VOLUME} " |  awk '{print $5";"$6}' )
      do
        QUOTAUSED0=`echo ${QUOTADEF} |awk -F";" '{print $1}'`
        QUOTALIMIT0=`echo ${QUOTADEF} |awk -F";" '{print $2}'`

        if [ "${QUOTALIMIT0}" = "-" ]
        then
          QUOTAUSED=${VOLUSED}
          QUOTALIMIT=${VOLTOTAL}
        else
          let QUOTAUSED=${QUOTAUSED}+${QUOTAUSED0}
          let QUOTALIMIT=${QUOTALIMIT}+${QUOTALIMIT0}
        fi
      done
      PRC_SAVED=`ssh ${FILER} df -s|grep ${VOLUME} | awk '{print $4}' | awk  -F"%" '{print $1}'`
      if [ ${PRC_SAVED} == "0" ]
      then
        VOL_NEW_SIZE=${QUOTALIMIT}
      else
        let "QUOTAFREE= ${QUOTALIMIT} - ${QUOTAUSED}"
        let "VOL_NEW_SIZE= ${VOLUSED} + ${QUOTAFREE}"
      fi
    #  done
      let "VOL_CHK_SIZE= ${VOLUSED} * 111 / 100"
      if [ "${VOL_CHK_SIZE}" -ge "${VOL_NEW_SIZE}" ]
      then
        let "VOL_NEW_SIZE= ${VOLUSED} * 118 / 100"
      fi
      let "VOL_NEW_SIZE= ${VOL_NEW_SIZE} / 1048576"
      let "QUOTALIMIT= ${QUOTALIMIT} / 1048576"
      echo "${VOLUME} ${QUOTALIMIT};${VOL_NEW_SIZE}">>${DATADIR}/make_cap_report.tmp
    done
  done
done

#--------------------------------------------------------------------------#
# Replace parameter into quota value.                                      #
#--------------------------------------------------------------------------#
cat ${DATADIR}/make_cap_report.tmp | while read INPUT1 INPUT2 
do
  cat ${FILE} | sed "s/${INPUT1}_#####/${INPUT2}/g">${DATADIR}/${DATUM}-FSOD-Capacity-Reporting.tmp
  cp ${DATADIR}/${DATUM}-FSOD-Capacity-Reporting.tmp ${FILE} 
done

cat ${FILE} | sed "s/[a-z][a-z]_[a-z][a-z][a-z][0-9][0-9]_vol[0-9][0-9][0-9]_#####//g">${DATADIR}/${DATUM}-FSOD-Capacity-Reporting.tmp
cat ${DATADIR}/${DATUM}-FSOD-Capacity-Reporting.tmp | sed "s/[a-z][a-z]_[a-z][a-z][0-9]_vol[0-9][0-9][0-9]_#####//g">${FILE}

#--------------------------------------------------------------------------#
# Summarize all numbers. Output will be visible in excel document.         #
#--------------------------------------------------------------------------#
LASTLINE=`cat ${FILE}| wc -l | tr -d ' '` 
echo ";">> ${FILE} 
echo "Usage;Aggregate Total / Used (GB);;=SUM(D2:D${LASTLINE});;=SUM(F2:F${LASTLINE});">> ${FILE} 
let LASTLINE=${LASTLINE}+2
echo ";Aggregate Free (GB);;=SUM(D${LASTLINE}-F${LASTLINE});">> ${FILE} 
let LASTLINE=${LASTLINE}-2 
echo ";Volume Total / Used (GB);;;=SUM(E2:E${LASTLINE});;=SUM(G2:G${LASTLINE});">> ${FILE} 
let LASTLINE=${LASTLINE}+4
echo ";Volume Free (GB);;;=SUM(E${LASTLINE}-G${LASTLINE});">> ${FILE}

#--------------------------------------------------------------------------#
# Send output as attachment in email and remove files.                     #
# If script doesn't start on console, send mail to parameter $1            #
#--------------------------------------------------------------------------#
cp ${FILE} /tmp/${OFILE}
if `tty -s`
then
  date|mailx -a /tmp/${OFILE} -s "$DATUM-FSOD-Capacity-Reporting" fsod@atos.net
else
  if [ -n "${1}" ]
  then
    date|mailx -a /tmp/${OFILE} -s "$DATUM-FSOD-Capacity-Reporting" ${1}
  fi
fi

rm ${DATADIR}/make_cap_report.tmp
rm ${DATADIR}/$DATUM-FSOD-Capacity-Reporting.tmp
rm ${FILE}
rm /tmp/${OFILE}

exit 0

