[Erp5-report] r25733 - /erp5/trunk/utils/merge_zlogs

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Feb 26 19:26:33 CET 2009


Author: jm
Date: Thu Feb 26 19:26:30 2009
New Revision: 25733

URL: http://svn.erp5.org?rev=25733&view=rev
Log:
Add script to merge Zope logs (event.log, CMFActivity.log...) from several ZEO clients.
Output is sorted chronologically and each line is prefixed by a 2-digit index indicating the log where it comes from.

Added:
    erp5/trunk/utils/merge_zlogs   (with props)

Added: erp5/trunk/utils/merge_zlogs
URL: http://svn.erp5.org/erp5/trunk/utils/merge_zlogs?rev=25733&view=auto
==============================================================================
--- erp5/trunk/utils/merge_zlogs (added)
+++ erp5/trunk/utils/merge_zlogs [utf8] Thu Feb 26 19:26:30 2009
@@ -1,0 +1,67 @@
+#!/usr/bin/python
+import os.path, sys
+
+separator = '------'
+
+class Log(object):
+  def __init__(self, path, prefix):
+    if path == '-':
+      self.file = sys.stdin
+    else:
+      self.file = file(path)
+    self.prefix = prefix
+  def read(self):
+    self.msg = []
+    for line in self.file:
+      while line and line[-1] in '\r\n':
+        line = line[:-1]
+      if line != separator:
+        self.msg.append(line)
+      elif self.msg:
+        break
+    if self.msg:
+      for date in self.msg[0].split():
+        if len(date) == 19:
+          self.date = date
+          return True
+  def write(self):
+    print '%s %s\n%s' % (self.prefix, '\n'.join(self.msg), separator)
+  def __cmp__(self, other):
+    return cmp(self.date, other.date)
+
+def main():
+  if len(sys.argv) > 2:
+    log_set = set()
+    index = 0
+    for log in sys.argv[1:]:
+      if log in ('-h', '--help'):
+        break
+      index += 1
+      log = Log(log, '%02i' % index)
+      if log.read():
+        log_set.add(log)
+    else:
+      while log_set:
+        log = min(log_set)
+        log.write()
+        if not log.read():
+          log_set.remove(log)
+      return 0
+  cmd = sys.argv and os.path.basename(sys.argv[0]) or 'merge_zlogs'
+  print """merge_zlogs -- Merge Zope logs sorting lines by time.
+
+Usage: %(cmd)s [log]...
+
+hyphen-minus (-) is a shortcut for /dev/stdin
+Each output line is prefixed by a 2-digit index of the log where it comes from, starting from 1.
+
+Example to gather logs from several hosts:
+  %(cmd)s <(ssh host1 '%(cmd)s %(event_logs)s') \\
+  %(_)s <(ssh host2 '%(cmd)s %(event_logs)s')""" % {
+'cmd': cmd,
+'_': ' ' * len(cmd),
+'event_logs': '/var/lib/zope/zeo_client?/log/event.log',
+}
+
+if __name__ == '__main__':
+  sys.exit(main())

Propchange: erp5/trunk/utils/merge_zlogs
------------------------------------------------------------------------------
    svn:executable = *




More information about the Erp5-report mailing list