#!/bin/bash
# ==============================================================================
#
# check status of last performed backup
#
# This script checks the last logfile and scans for errors
# An error is a returncode <> 0 or a too old logfile
#
# ------------------------------------------------------------------------------
#
# ah - Axel Hahn <axel.hahn@iml.unibe.ch>
# ds - Daniel Schueler <daniel.schueler@iml.unibe.ch>
#
# 2016-12-09  ah,ds  v1.0
# ==============================================================================

. `dirname $0`/jobhelper.sh

# ------------------------------------------------------------------------------
# CONFIG
# ------------------------------------------------------------------------------

typeset -i iOK=0
typeset -i iErr=0
typeset -i rc=0

typeset -i iAge
typeset -i iAge2
typeset -i iError

logdir=`dirname $0`/logs


# ------------------------------------------------------------------------------
# MAIN
# ------------------------------------------------------------------------------

sShort="Client Backup -"

ls $logdir/*.log >/dev/null
if [ $? -ne 0 ]; then
  sShort="$sShort logs were not found. Backup was never executed"
  iError=1
else

  iMaxAgeInHours=`j_getLastBackupAge`
  echo verify last backup: $iMaxAgeInHours h ago

  for logfile in `ls -1t $logdir/inc*.log $logdir/full*.log $logdir/auto*.log 2>/dev/null | head -1`
  do
    echo LAST BACKUP: $logfile
    grep "final.*rc=" $logfile
    echo

    # --- SENSU Statusline
    if [ -f `dirname $0`/transfer.sh ]; then
      sShort="$sShort WITH"
    else
      sShort="$sShort NO"
    fi
    sShort="$sShort transfer -"

    # --- count returncodes
    iOK=`grep "final.*rc=0$" $logfile | wc -l`
    iError=`grep "final.*rc=" $logfile | grep -v "rc=0$" | wc -l`
    echo "OK: $iOK ... Errors: $iError"

    # --- rc=0 must be here
    if [ $iOK -eq 0 ]; then
      echo "ERROR: no OK message was found. Something is messed up :-/"
      iError=$iError+1
    fi

    # --- check age
    iAge=`date +%s`-`stat -c %Y $logfile`
    iAge2=$iAge/60/60
    echo age: $iAge sec ... $iAge2 h
    sShort="$sShort last backup log: `basename $logfile` ($iAge2 h ago) "
    if [ $iAge2 -gt $iMaxAgeInHours ]; then
      echo "Error: the last backup is older than $iMaxAgeInHours hours"
      sShort="$sShort ERROR: backup is older than $iMaxAgeInHours hours "
      iError=$iError+1
    else
      echo "OK: last backup is younger $iMaxAgeInHours hours"
      sShort="$sShort OK: backup is younger than $iMaxAgeInHours hours "
    fi

    # --- changes (incremental backups only) and backup status infos
    echo
    sSearch="Args:|ElapsedTime|SourceFiles|SourceFileSize|RawDeltaSize"
    echo $logfile | fgrep "inc" >/dev/null
    if [ $? -eq 0 ]; then
      sSearch="[ADM]\ |${sSearch}"
    fi
    echo --- changes:
    egrep "^(${sSearch})" $logfile

    echo
    echo --- summary of backed up directories:
    grep "DIR\ " $logfile
  
    sShort="$sShort - OK: $iOK ... Errors: $iError"

  done


fi


echo
echo MONITORINFO: $sShort
echo STATUS $0 - final returncode rc=$iError
exit $iError

# ------------------------------------------------------------------------------
