#!/bin/bash
#
# send_file2uls
#
# Speichert logginginformationen in der Loggingdatenbank ueber einen httpget-Aufruf
#
# Aufruf:
#
# send_file2uls [-c charset] [-d storepath] [-S] [-h host] [-n|-N HH:MM|-u] [-s acc]
#               sect teststp det date time einh [<path>]
#
###################################################################################
#
if [[ -f /etc/uls/uls.conf ]]
 then
  . /etc/uls/uls.conf
fi
#
if [[ -z "$ULSSERVER" ]]
 then
  ULSSERVER="STORE"
fi
#
ULSSEND="STORE"
NODUP=""
ELAP=""
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="$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: $0 [-c charset] [-d storepath] [-S] [-h hostname] [-n|-N HH:MM|-u] [-s access] section teststep details date time einheit [path]"
       exit 1;;
  esac
done
shift $(( $OPTIND - 1))
#
#
if [[ $# -ne 6 && ( $# -ne 7 || ! -f "$7" ) ]]
 then
  echo "usage: $0 [-c charset] [-d storepath] [-S] [-h hostname] [-n|-N HH:MM|-u] [-s access] section teststep details date time einheit [path]"
  exit 1
fi
#
if [[ -z "$ULSHOSTNAME" ]]
 then
  ULSHOSTNAME=`hostname`
fi
#
if [[ "$ULSSEND" != "STORE" ]]
 then
  if STATUS=`httpget $SFLAGS -u logging -p lgput -s $ULSSERVER get_status.s2w?hostname=$ULSHOSTNAME`
   then
    if [[ "$STATUS" != "OK" ]]
     then
      ULSSEND="STORE"
    fi
  else
    ULSSEND="STORE"
  fi
fi
#
if [[ "$ULSSEND" != "STORE" ]]
 then
  S=`code_http "$1"`
  T=`code_http "$2"`
  D=`code_http "$3"`
  DA=$4
  TI=$5
  if [[ -z "$7" ]]
   then
    W=`code_http`
  else
    W=`code_http <"$7"`
  fi
  E=`code_http "$6"`
  #
  RET=`httpget $SFLAGS -c -u logging -p lgput -s $ULSSERVER "put_test_value$NODUP.s2w?hostname=$ULSHOSTNAME&section=$S&teststep=$T&details=$D&access=$ACC&date=$DA&time=$TI$ELAP&wert=$W&einheit=$E&charset=$CHARSET"`
  if [[ "$RET" = "OK" ]]
   then
    exit 0
  fi
fi
#
if [[ -z "$7" ]]
 then
  INFILE=""
else
  if echo "$7" | grep -q '^/'
   then
    INFILE="$7"
  else
    INFILE="`pwd`/$7"
  fi
fi
#
if [[ -z "$ULS_TMP_PATH" ]]
 then
  ULS_TMP_PATH=/var/tmp/uls
fi
ULSDAT=dat-`id -u`-`date '+%H%M%S'`$$.uls
if cd `dirname $ULS_TMP_PATH`
 then
  S="`echo \"$1\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
  T="`echo \"$2\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
  D="`echo \"$3\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
  E="`echo \"$6\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
  echo -n "L;;;;;;$CHARSET
$MODE;$4 $5;$ULSHOSTNAME;$S;$T;$D;\"" >$ULSDAT
  if [[ -z "$INFILE" ]]
   then
    sed 's/\(["\\]\)/\\\1/g' >>$ULSDAT
  else
    sed 's/\(["\\]\)/\\\1/g' "$INFILE" >>$ULSDAT
  fi
  echo "\";$E;$ACC" >>$ULSDAT
  if cd "$ULS_TMP_PATH" 2>/dev/null
   then
    mv ../$ULSDAT .
  else
    mkdir -m 1777 -p "$ULS_TMP_PATH"
    if cd "$ULS_TMP_PATH" 2>/dev/null
     then
      mv ../$ULSDAT .
    else
      echo "Kann Lokales ULS-Verzeichnis '$ULS_TMP_PATH' nicht anlegen!"
      exit 1
    fi
  fi
else
  echo "Kann nicht ins Verzeichnis '`dirname $ULS_TMP_PATH`' wechseln!"
fi
#
exit 0
