Index: /WAeUP_SysConf/logging/trunk/etc/default/updatelogdb
===================================================================
--- /WAeUP_SysConf/logging/trunk/etc/default/updatelogdb	(revision 2837)
+++ /WAeUP_SysConf/logging/trunk/etc/default/updatelogdb	(revision 2838)
@@ -17,4 +17,4 @@
 
 EVENT_LOG="/zope/instances/srp-log/event.log /zope/instances/srp-log/event-staff.log"
-AWKZEVENT=/usr/local/lib/zevents.awk
+PYZEVENT=/usr/local/lib/zevents.py
 
Index: /WAeUP_SysConf/logging/trunk/usr/local/lib/zevents.py
===================================================================
--- /WAeUP_SysConf/logging/trunk/usr/local/lib/zevents.py	(revision 2838)
+++ /WAeUP_SysConf/logging/trunk/usr/local/lib/zevents.py	(revision 2838)
@@ -0,0 +1,124 @@
+##
+## zevents.py
+## Read Zope event log from stdin and output SQL data.
+##
+## Login : <uli@pu.smp.net>
+## Started on  Wed Feb  7 03:02:47 2007 Uli Fouquet
+## $Id$
+## 
+## Copyright (C) 2007 Uli Fouquet
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+## 
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+## 
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+
+import sys
+import re
+
+##
+## Set mode to...
+##   "COPY":  give PostGres-compatible COPY-syntax output.
+##   other : give usual (slow) SQL-output
+##
+mode = "COPY"
+
+faillog = "/var/log/updatedblog/zevents-failed.log"
+
+##
+## The format of a zope event.log line is like this...
+## The expression looks for the following fields:
+##
+## Fieldcontent        | Fieldnum
+## --------------------+---------
+## DATE (dd-mm-yyyy)   | 0
+## TIME                | 1
+## LOGLEVEL            | 2
+## MSG_SRC             | 3
+## MSG_TEXT            | 4
+## ERR_TYPE            | --
+## ERR_MSG             | --
+## TRACEBACK           | 5
+##
+## It was hard work. Please do not touch!
+##
+expr = re.compile("^([0-9]+\-[0-9]+\-[0-9]+)T([0-9]+\:[0-9]+\:[0-9]+) ([^ ]+) ([^ ]+) ?(.*) ?(Traceback \(innermost last\)\: .*)?")
+
+
+## Number of line
+lnum = 1
+
+if mode == "COPY":
+    print 'COPY "ZEVENTS" FROM stdin;'
+
+def process_dataset(data):
+    data = data.strip()
+    data = data.replace("\n", " ")
+    data = data.replace("\t", "    ")
+    return data
+
+def print_dataset(data, lnum, mode):
+    m = expr.match(data)
+    if not m:
+        # Line did not match...
+        #print data
+        fd = open( faillog, "a")
+        fd.write( str( data ) + '\n' )
+        fd.close()
+        return
+
+    res = m.groups()
+    val = {
+        'id' : lnum,
+        'date' : res[0],
+        'time' : res[1],
+        'loglevel' : res[2],
+        'msg_src' : res[3] or '',
+        'msg_text' : res[4] or '',
+        'err_type' : '',
+        'err_msg' : '',
+        'traceback' : res[5] or '',
+        }
+
+    if mode == "COPY":
+        print "%07d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (
+            val['id'], val['date'], val['time'], val['loglevel'],
+            val['msg_src'], val['msg_text'], val['err_type'], val['err_msg'],
+            val['traceback']
+        )
+    else:
+        print "INSERT INTO \"ZEVENTS\" (\"ID\",\"DATE\",\"TIME\",\"LOGLEVEL\",\"MSG_SRC\",\"MSG_TEXT\",\"ERR_TYPE\",\"ERR_MSG\",\"TRACEBACK\") VALUES ('%07d','%s','%s','%s','%s','%s','%s','%s','%s');" % (
+            val['id'], val['date'], val['time'], val['loglevel'],
+            val['msg_src'], val['msg_text'], val['err_type'], val['err_msg'],
+            val['traceback']
+        )
+    return
+
+## Read line for line...
+data=sys.stdin.readline().strip()
+dataset = ''
+while data:
+
+    if data.strip() == '------':
+        lnum += 1
+        dataset = process_dataset(dataset)
+        print_dataset(dataset, lnum, mode)
+        dataset = ""
+    else:
+        dataset += data
+
+    data=sys.stdin.readline()
+    continue
+
+dataset = process_dataset(dataset)
+print_dataset(dataset, lnum, mode)
+
Index: /WAeUP_SysConf/logging/trunk/usr/local/sbin/updatedb_zevents.sh
===================================================================
--- /WAeUP_SysConf/logging/trunk/usr/local/sbin/updatedb_zevents.sh	(revision 2837)
+++ /WAeUP_SysConf/logging/trunk/usr/local/sbin/updatedb_zevents.sh	(revision 2838)
@@ -23,5 +23,5 @@
 
 EVENT_LOG=event.test.log
-AWKZEVENT=zevents.awk
+PYZEVENT=zevents.py
 
 ## Read true values...
@@ -36,8 +36,8 @@
 #fi
 
-if [ ! -r $AWKZEVENT ]; then
-    echo "File not readable: $AWKZEVENT";
+if [ ! -r $PYZEVENT ]; then
+    echo "File not readable: $PYZEVENT";
     exit -1;
 fi
-cat $EVENT_LOG | gawk -v SQL=1 -f $AWKZEVENT | psql -h $HOST -d zevents -U $USER > /dev/null 2>&1
+cat $EVENT_LOG | python $PYZEVENT | psql -h $HOST -d zevents -U $USER > /dev/null 2>&1
 
