#!/usr/bin/bash
#< Detailed NetBackup report designed to be scheduled daily via cron

# Configure Paths
NBROOT="/usr/openv/netbackup"
NBBIN="${NBROOT}/bin"
NBADMIN="${NBBIN}/admincmd"
NBGOODIES="${NBBIN}/goodies"

# Executables
BPAVAIL="${NBGOODIES}/available_media"
BPERROR="${NBADMIN}/bperror"
AWK="/usr/local/bin/awk"
DATE="/usr/bin/date"
ECHO="/usr/bin/echo"
GREP="/usr/bin/grep"
PRINTF="/usr/bin/printf"
SED="/usr/bin/sed"

# Other vars
DIVIDER1="================================================================================"
TODAY=$( ${DATE} +"%d/%m/%Y %H:%M" )

function print_header {
   ${ECHO} "${DIVIDER1}"
   printf "Daily backup report for: ${HOSTNAME}\t\tPrepared: ${TODAY}\n"
   ${ECHO} "${DIVIDER1}"
}

function get_backup_report {
   ${ECHO} "\n"
   ${ECHO} "==[ Backup Job Report ]=========================================================\n"
   ${BPERROR} -U -backstat -s info
   ${ECHO} "${DIVIDER1}"
}

function get_backup_detail {
   ${ECHO} "\n"
   ${ECHO} "==[ Backup Job Detail ]=========================================================\n"
   ${PRINTF} "%10s\t%10s\t%20s\t%s\n" "JOBID" "CLIENT" "DATA WRITTEN" "AVE. SPEED"
   ${PRINTF} "%10s\t%10s\t%20s\t%s\n" "-----" "------" "------------" "----------"
   ${BPERROR} -l -backstat | ${AWK} '{print $6, $9}' | while read JOBID CLIENT; do
      DATA=$( ${BPERROR} -hoursago 24 | ${GREP} "${JOBID}.*success.*Kbytes" | ${SED} 's/^.* \([0-9][0-9]* Kbytes\) at \(.*\)$/\1|\2/' )
      KBYTES=${DATA%%|*}
      SPEED=${DATA##*|}
      ${PRINTF} "%10s\t%10s\t%20s\t%s\n" "${JOBID}" "${CLIENT}" "${KBYTES}" "${SPEED}"
   done 
   ${ECHO} "${DIVIDER1}"
}

function get_available_media {
   ${ECHO} "\n"
   ${ECHO} "==[ Media Availability ]========================================================\n"
   ${BPAVAIL} -summary
   ${ECHO} "${DIVIDER1}"
}

function get_errors {
   ${ECHO} "\n"
   ${ECHO} "==[ Error Report ]==============================================================\n"
   ERROUT=$( ${BPERROR} -U -problems -s error 2>&1 )
   if [ "${ERROUT}" = "no entity was found" ]; then
      ${ECHO} "No errors reported"
   else
      ${ECHO} "${ERROUT}"
   fi
   ${ECHO} "${DIVIDER1}"
}

print_header
get_backup_report
get_backup_detail
get_available_media
get_errors

exit 0