#!/bin/bash
#
# jobmonitor2uls
#
# Job starten und Ergebnisse, Laufzeit und Start-Stopp-Zeit ans ULS schicken
#
# Aufruf:
# jobmonitor2uls [-d <storepath>] [-S] [-u <timeunit>] [-h <hostname>] [-s <Section>]
#                [-t <Teststep>] [-f|-z|-j|-J] <job.sh> [Parameter...]
# Defaults:       -u s -h `hostname` -s Jobs -t `basename <job.sh>` job.sh [Parameter...]
###############################################################################
#
if [[ ${PATH#*/usr/local/bin} = $PATH ]]
 then
  export PATH=$PATH:/usr/local/bin
fi
#
if [[ $# -lt 1 ]]
 then
  echo "usage: `basename $0` [-d <storepath>] [-S] [-u <timeunit>] [-h <hostname>] [-s <Section>] [-t <Teststep>] [-f|-z|-j|-J] <job.sh> [Parameter...]"
  exit 1
fi
#
DT=`date '+%Y-%m-%d %H:%M:00%:z'`
START=`date '+%Y-%m-%d %H:%M:%S%:z'`
SSEC=$SECONDS
#
SECTION=Jobs
#
STDOUT=/tmp/STDOUT$$.lst
EOUT=/tmp/EOUT$$.lst
TUNIT=s
TEST_PFAD=""
STOREFLAG=""
FILEFLAG=""
#
while getopts d:Su:h:s:t:fzj? op
 do
  case "$op" in
    d) TEST_PFAD="-d $OPTARG";;
    S) STOREFLAG=-S;;
    u) TUNIT=$OPTARG;;
    h) SERVER="-h $OPTARG";;
    s) SECTION=$OPTARG;;
    t) TESTSTEP=$OPTARG;;
    f) FILEFLAG=f;;
    z) FILEFLAG=z;;
    j) FILEFLAG=j;;
    J) FILEFLAG=J;;
    *) echo "usage: `basename $0` [-d <storepath>] [-S] [-u <timeunit>] [-h <hostname>] [-s <Section>] [-t <Teststep>] [-f|-z|-j|-J] <job.sh> [Parameter...]"
       exit 0
       ;;
  esac
done
shift $(( $OPTIND - 1))
#
if [[ $# -lt 1 ]]
 then
  echo "usage: `basename $0` [-u <timeunit>] [-h <hostname>] [-s <Section>] [-t <Teststep>] [-f|-z|-j|-J] <job.sh> [Parameter...]"
  exit 1
fi
#
if [[ -z "$TESTSTEP" ]]
 then
  TESTSTEP=`basename $1`
fi
#
send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Start-Stop $DT "Start $START" '{T}'
#
PRG=$1
shift
"$PRG" "$@" >$STDOUT 2>$EOUT
RET=$?
#
END=`date '+%Y-%m-%d %H:%M:%S%:z'`
DAUER=$(( $SECONDS - $SSEC ))
#
LC_ALL=C
export LC_ALL
umask 077
#
send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Start-Stop $DT "Stop $END" '{T}'
case $TUNIT in
  m*) DAUER=`awk 'BEGIN{printf("%.2f", '$DAUER' / 60)}'`
      send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Laufzeit $DT "$DAUER" 'min';;
  h*) DAUER=`awk 'BEGIN{printf("%.2f", '$DAUER' / 3600)}'`
      send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Laufzeit $DT "$DAUER" 'h';;
  *)  send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Laufzeit $DT "$DAUER" 's';;
esac
send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Exitwert $DT "$RET" '#'
if [[ -s $STDOUT ]]
 then
  case $FILEFLAG in
    f) send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Stdout $DT stdout.log <$STDOUT;;
    z) gzip -c $STDOUT | send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Stdout $DT stdout.log.gz;;
    j) bzip2 -c $STDOUT | send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Stdout $DT stdout.log.bz2;;
    J) xz -c $STDOUT | send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Stdout $DT stdout.log.xz;;
    *) send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Stdout $DT "`cat $STDOUT`" '_';;
  esac
fi
if [[ -s $EOUT ]]
 then
  case $FILEFLAG in
    f) send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Errorout $DT errout.log <$EOUT;;
    z) gzip -c $EOUT | send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Errorout $DT errout.log.gz;;
    j) bzip2 -c $EOUT | send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Errorout $DT errout.log.bz2;;
    J) xz -c $EOUT | send_stdin_file $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Errorout $DT errout.log.xz;;
    *) send_test_value $TEST_PFAD $STOREFLAG $SERVER "$SECTION" "$TESTSTEP" Errorout $DT "`cat $EOUT`" '_';;
  esac
fi
#
rm -f $EOUT $STDOUT
#
exit $RET
