#!/bin/bash
#
# send_test_line
#
# Speichert logginginformationen in der Loggingdatenbank ueber einen
# httpget-Aufruf
#
# Aufruf:
#
# send_test_line [-c charset] [-d storepath] [-S] [-h hostname] [-n|-N HH:MM|-u]
#                 [-s access] section teststep date time
#                 details:wert:einheit [details:wert:einheit ...]
#
###############################################################################
#
if [[ -f /etc/uls/uls.conf ]]; then
  . /etc/uls/uls.conf
fi
#
if [[ -z "$ULSSERVER" ]]; then
  ULSSERVER="STORE"
fi
#
ULSSEND="STORE"
NODUP=""
ELAP=""
ELAPSED=""
ACC="all"
MODE="V"
if [[ ${LC_CTYPE:-$LANG} == *8 ]]; then
  CHARSET="utf8"
else
  CHARSET="latin1"
fi
#
while getopts c:d:Sh:nN:us:? op; do
  case "$op" in
    c) CHARSET="$OPTARG";;
    d) ULS_TMP_PATH=$(readlink -f "$OPTARG");;
    S) ULSSEND="$ULSSERVER";;
    h) ULSHOSTNAME=$OPTARG;;
    N) ELAP="&elapsed=$OPTARG"
       NODUP="_nodup"
       MODE="E$OPTARG";;
    n) NODUP="_nodup"
       MODE="N";;
    u) NODUP="_unique"
       MODE="U";;
    s) ACC=$OPTARG;;
    *) echo "usage: `basename $0` [-c charset] [-d storepath] [-S] [-h hostname] [-n|-N HH:MM|-u] [-s access] section teststep date time details:wert:einheit ..."
       exit 1;;
  esac
done
shift $(( $OPTIND - 1))
#
if [[ $# -lt 5 ]]; then
  echo "usage: `basename $0` [-c charset] [-d storepath] [-S] [-h hostname] [-n|-N HH:MM|-u] [-s access] section teststep date time details:wert:einheit ..."
  exit 1
fi
#
if [[ -z "$ULSHOSTNAME" ]]; then
  ULSHOSTNAME=`hostname`
fi
#
sendtestline()
{ S=$(sed 's/?/%3f/g;s/#/%23/g;s/!/%21/g;s/\$/%24/g;s/&/%26/g;s/'"'"'/%27/g;s/(/%28/g;s/)/%29/g;s/\*/%2a/g;s/+/%2b/g;s/,/%2c/g;s/=/%3d/g;s/ /%20/g' <<<"$1")
  T=$(sed 's/?/%3f/g;s/#/%23/g;s/!/%21/g;s/\$/%24/g;s/&/%26/g;s/'"'"'/%27/g;s/(/%28/g;s/)/%29/g;s/\*/%2a/g;s/+/%2b/g;s/,/%2c/g;s/=/%3d/g;s/ /%20/g' <<<"$2")
  DA=$3
  TI=$4
  W="w="$(sed 's/?/%3f/g;s/#/%23/g;s/!/%21/g;s/\$/%24/g;s/&/%26/g;s/'"'"'/%27/g;s/(/%28/g;s/)/%29/g;s/\*/%2a/g;s/+/%2b/g;s/,/%2c/g;s/=/%3d/g;s/ /%20/g' <<<"$5")
  shift 5
  while [[ $# -gt 0 ]]; do
    W="$W&w="$(sed 's/?/%3f/g;s/#/%23/g;s/!/%21/g;s/\$/%24/g;s/&/%26/g;s/'"'"'/%27/g;s/(/%28/g;s/)/%29/g;s/\*/%2a/g;s/+/%2b/g;s/,/%2c/g;s/=/%3d/g;s/ /%20/g' <<<"$1")
    shift
  done
  RET=`httpget $SFLAGS -c -u logging -p lgput -s $ULSSERVER "put_test_zeile$NODUP.s2w?hostname=$ULSHOSTNAME&access=$ACC&section=$S&teststep=$T&date=$DA&time=$TI$ELAP&charset=$CHARSET&$W"`
  if [[ "$RET" = "OK" ]]; then
    exit 0
  fi
}
#
if [[ "$ULSSEND" != "STORE" ]]; then
  sendtestline "$@"
fi
#
ULSDAT=dat-`id -u`-$$.uls
if [[ -z "$ULS_TMP_PATH" ]]; then
  ULS_TMP_PATH=/var/tmp/uls
fi
if cd "$ULS_TMP_PATH" 2>/dev/null; then
  test -f $ULSDAT || touch $ULSDAT && chmod 600 $ULSDAT
else
  mkdir -m 1777 -p "$ULS_TMP_PATH"
  if cd "$ULS_TMP_PATH" 2>/dev/null; then
    touch $ULSDAT && chmod 600 $ULSDAT
  else
    echo "Kann Lokales ULS-Verzeichnis: $ULS_TMP_PATH nicht anlegen!"
    exit 1
  fi
fi
#
S="`echo \"$1\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
T="`echo \"$2\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
DT="$3 $4"
echo "L;;;;;;$CHARSET" >>$ULSDAT
echo "D;$DT;$ULSHOSTNAME;$S;$T;;" >>$ULSDAT
shift 4
while [[ $# -gt 0 ]]; do
  echo "$MODE;;;;;`echo $1 | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g;s/:/;/g'`;$ACC" >>$ULSDAT
  shift
done
exit 0
