#!/bin/sh

##### Report StoreBackup Status
#####
##### Gets the status of the last backup run for a given
##### log file and reports result
#####
##### 2006 enbiz gmbh, Gerd Stammwitz

# Commands used in this script

PATH=""

# TAC="/usr/bin/tail -r"  # Sun Solaris
TAC="/usr/bin/tac"	# Gnu

AWK="/usr/bin/gawk"

CUT="/usr/bin/cut"

# Setup

PROGNAME=`/usr/bin/basename $0`
REVISION="1.0"
AUTHOR="(c) 2006 Gerd Stammwitz (http://www.enbiz.de/)"

# Exit codes

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

print_usage() {
  echo $PROGNAME $REVISION
  echo $AUTHOR
  echo
  echo "Report status of last storeBackup run for Nagios."
  echo
  echo "Usage: $PROGNAME <logfile>"
  echo
}

# Check parameter count and flags

if [ $# -ne 1 ]; then
  print_usage
  exit $STATE_UNKNOWN
fi

# Get logfile name and check for existence

LOGFILE=$1
if [ ! -f $1 ]; then
  echo "Couldn't open logfile $1"
  exit $STATE_UNKNOWN
fi


# Parse log file

RESULT=`$TAC $1 | $AWK '
BEGIN {
  lcnt=0;
  lend=0; lbegin=0;
  lwarn=0; lerr=0;
  tsbegin="<unknown>";
  tsend="";
}
{
  lcnt++;
  if ($1=="END") { 
    lend++;
    tsend=$2 " "$3;
    what="";
    for (i=5; i<=NF; i++) what=what " " $i;
  }
  if ($1=="BEGIN") { lbegin++; tsbegin=$2 " " $3; exit; }
  if ($1=="ERROR") { 
    lerr++; 
    if ($5=="exiting") {
      lend=1; tsend=$2 " "$3;
    } 
   }
  if ($1=="WARNING") { lwarn++ }
}
END {
  state="OK";
  if (lwarn>0) {state="WARNING";}
  if (lerr>0) {state="ERROR";}
  if (lbegin=0) {state="WRAPPED";}
  if (lend==0) {state="RUNNING";}
  printf "%s - errors=%d warnings=%d",state,lerr,lwarn;
  if (tsend!="") print " - finished " tsend; else print ""
}'`

STATE=$STATE_UNKNOWN
case "`echo $RESULT| $CUT -f1 -d\" \"`" in
  OK)
    STATE=$STATE_OK
    ;;
  WARNING)
    STATE=$STATE_WARNING
    ;;
  ERROR)
    STATE=$STATE_CRITICAL
    ;;
esac


echo $RESULT
exit $STATE
