#!/bin/bash
#
# do_ulsmeld
#
# Erfuellte Limits in der ULS-Datenbank suchen und Meldung generieren
#
###############################################################################
#
export LANG=de_DE.UTF-8
MYSQLCHARSET="utf8"
#
# Erst mal testen, ob Programm schon laeuft
cd `dirname $0`
#
PATH=../wwwbin:/usr/local/bin:$PATH
export PATH
#
SYSVARNAME=lastulsmeld
#
unset FORCEFLAG THREADS
#
while getopts ft:? op
 do
  case "$op" in
    f) FORCEFLAG=1;;
    t) THREADS="$OPTARG";;
    *) echo "usage `basename $0`: [-f] [-t <threads>] <testname> [...]";;
  esac
done
shift $(( $OPTIND - 1))
#
PIDDAT=/tmp/uls_test_$1.pid
if [[ -f $PIDDAT ]]
 then
  PID=$(<$PIDDAT)
  C=$(ps -efa | awk '$2 == "'$PID'" {print 1}')
  if [[ "$C" = "1" ]]
   then
    exit
  fi
fi
echo $$ >$PIDDAT
#
if [[ -f /etc/ulsserver.conf ]]
 then
  . /etc/ulsserver.conf
fi
if [[ -z "$ULSURL" ]]
 then
  ULSURL="${ULSHTTPMODE:-http}://${ULSHTTPNAME:-uls}:${ULSPORT:-11975}/"
fi
#
if [[ -z "$ULSNAME" ]]
 then
  ULSNAME=`hostname`
fi
#
if [[ -f ../database.conf ]]
 then
  . ../database.conf
fi
MYSQL="mysql_sql -s ${LOGGINGADMINHOST:-localhost} -u loggingadmin -p $LOGGINGADMINPWD"
#
#
# LANG=C nach /etc/ulsserver.conf!
# LANG=C, weil MySQL immer '.' als Dezimaltrenner hat und u2w LANG auswertet
#
export LANG=C
#
if [[ -z "$FORCEFLAG" ]]
 then
  if [[ `$MYSQL "select wert + interval 1 hour < now() and now() < wert + interval 3 hour from systemvars where name='$SYSVARNAME'"` = 1 ]]
   then
    echo "Seit mehr als einer Stunde kein Job gelaufen, offensichtlich Winter->Sommerzeitumstellung!"
    rm -f $PIDDAT
    exit 1
  fi
  #
  if [[ `$MYSQL "select now() < wert from systemvars where name='$SYSVARNAME'"` = 1 ]]
   then
    echo "Job schon gelaufen, offensichtlich Sommer->Winterzeitumstellung!"
    $MYSQL "update systemvars set wert=wert - interval 2 hour where name='$SYSVARNAME'"
    rm -f $PIDDAT
    exit 1
  fi
fi
$MYSQL "update systemvars set wert=now() where name='$SYSVARNAME'"
#
DATE=`date '+%F'`
TIME=`date '+%H:%M:00'`
#
TEMPDIR=${LIMITTESTTEMPDIR:-/dev/shm}/ulsmeld.$$.tmp
if mkdir -p $TEMPDIR
 then
  for t in $*
   do
    START=`date '+%Y-%m-%d %H:%M:%S'`
    SSEC=`date '+%s'`
    #
    send_test_value -h "$ULSNAME" ULS Tests $t $DATE $TIME "Start $START" '{T}' &
    #
    if [[ -n "$THREADS" && "${t%.s2w}" != "test_klimits" ]]
     then
      rm -f /tmp/uls_${t%.s2w}_t.*.* 2>/dev/null
      for (( i = 0; $i < $THREADS; i = $i + 1 ))
       do
        if mkdir $TEMPDIR/$i
         then
          u2w_interpreter -Xi ../u2w.conf -me ${t%.s2w}.s2w "charset=$MYSQLCHARSET" "tempdir=$TEMPDIR/$i" "ulsurl=$ULSURL" "ulsstatuspage=${ULSSTATUSPAGE:-grouped_status.u2w}" "threads=$THREADS" "thread=$i" >/tmp/uls_${t%.s2w}_t.$i.log 2>/tmp/uls_${t%.s2w}_t.$i.err &
        else
          u2w_interpreter -Xi ../u2w.conf -me ${t%.s2w}.s2w "charset=$MYSQLCHARSET" "tempdir=$TEMPDIR" "ulsurl=$ULSURL" "ulsstatuspage=${ULSSTATUSPAGE:-grouped_status.u2w}" "threads=$THREADS" "thread=$i" >/tmp/uls_${t%.s2w}_t.$i.log 2>/tmp/uls_${t%.s2w}_t.$i.err &
        fi
      done
      wait
      cat /tmp/uls_${t%.s2w}_t.*.log
      cat /tmp/uls_${t%.s2w}_t.*.err >&2
    else
      u2w_interpreter -Xi ../u2w.conf -me ${t%.s2w}.s2w "charset=$MYSQLCHARSET" "tempdir=$TEMPDIR" "ulsurl=$ULSURL" "ulsstatuspage=${ULSSTATUSPAGE:-grouped_status.u2w}"
    fi
    #
    END=`date '+%Y-%m-%d %H:%M:%S'`
    SPEND=$(( `date '+%s'` - $SSEC ))
    #
    send_test_value -h "$ULSNAME" ULS Tests $t $DATE $TIME "Stop $END" '{T}' &
    send_test_value -h "$ULSNAME" ULS Tests $t $DATE $TIME "$SPEND" 's' &
  done
fi
rm -rf $TEMPDIR
rm -f $PIDDAT
