<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Wl-domain.py</id>
	<title>Wl-domain.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Wl-domain.py"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Wl-domain.py&amp;action=history"/>
	<updated>2026-05-20T20:48:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Wl-domain.py&amp;diff=3112&amp;oldid=prev</id>
		<title>PeterHarding at 06:15, 19 July 2009</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Wl-domain.py&amp;diff=3112&amp;oldid=prev"/>
		<updated>2009-07-19T06:15:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:15, 19 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l331&quot;&gt;Line 331:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 331:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Python]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Python]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Log Analysis]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Log Analysis]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Examples]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Wl-domain.py&amp;diff=2174&amp;oldid=prev</id>
		<title>PeterHarding: New page: &lt;pre&gt; #! /usr/bin/env python # #  Purpose: Parse and display an informix log file # #  $Id:$ # #---------------------------------------------------------------------  &quot;&quot;&quot; Parse Weblogic wl...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Wl-domain.py&amp;diff=2174&amp;oldid=prev"/>
		<updated>2008-05-24T07:41:40Z</updated>

		<summary type="html">&lt;p&gt;New page: &amp;lt;pre&amp;gt; #! /usr/bin/env python # #  Purpose: Parse and display an informix log file # #  $Id:$ # #---------------------------------------------------------------------  &amp;quot;&amp;quot;&amp;quot; Parse Weblogic wl...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
#  Purpose: Parse and display an informix log file&lt;br /&gt;
#&lt;br /&gt;
#  $Id:$&lt;br /&gt;
#&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Parse Weblogic wl-domain file and produce exception summary report&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import re&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
import getopt&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
__version__  = &amp;quot;1.0.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
debugFlg     = 0&lt;br /&gt;
stdoutFlg    = 0&lt;br /&gt;
verboseFlg   = 0&lt;br /&gt;
wallclockFlg = 0&lt;br /&gt;
rewriteFlg   = 0&lt;br /&gt;
&lt;br /&gt;
filename     = &amp;quot;wl-domain.log&amp;quot;&lt;br /&gt;
mode         = None&lt;br /&gt;
data         = None&lt;br /&gt;
td_start     = None&lt;br /&gt;
&lt;br /&gt;
cnt           = 0&lt;br /&gt;
cntExceptions = 1&lt;br /&gt;
cntLogLines   = 0&lt;br /&gt;
cntAt         = 0&lt;br /&gt;
cntBad        = 0&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
stCount      = {}&lt;br /&gt;
stLevel      = {}&lt;br /&gt;
stTrace      = {}&lt;br /&gt;
stCurrent    = None&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def startSeconds(s):&lt;br /&gt;
   return time.mktime(time.strptime(s, &amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def seconds(hms):&lt;br /&gt;
   s = hms.split(&amp;#039;:&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
   return ((s[0] * 60) + s[1]) * 60 + s[2]&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def hms(t_secs):&lt;br /&gt;
   hm     = t_secs / 60&lt;br /&gt;
   hours  = hm / 60&lt;br /&gt;
   mins   = hm % 60&lt;br /&gt;
   secs   = t_secs % 60&lt;br /&gt;
&lt;br /&gt;
   return &amp;quot;%02d:%02d:%02d&amp;quot; % ( hours, mins, secs)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def newTrace(currentTrace, level, newSignature):&lt;br /&gt;
   if stTrace.has_key(newSignature):&lt;br /&gt;
      copyTrace = stTrace[newSignature]&lt;br /&gt;
      stCount[newSignature] += 1&lt;br /&gt;
      #stCount[oldSignature] -= 1&lt;br /&gt;
   else:&lt;br /&gt;
      copyTrace = []&lt;br /&gt;
&lt;br /&gt;
      for i in range(level):&lt;br /&gt;
         copyTrace.append(currentTrace[i])&lt;br /&gt;
&lt;br /&gt;
      copyTrace.append(newSignature)&lt;br /&gt;
&lt;br /&gt;
      stCount[newSignature] = 1&lt;br /&gt;
      stTrace[newSignature] = copyTrace&lt;br /&gt;
      stLevel[newSignature] = level&lt;br /&gt;
&lt;br /&gt;
   # print str(copyTrace)&lt;br /&gt;
&lt;br /&gt;
   return copyTrace&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def parse(filename):&lt;br /&gt;
   global cnt&lt;br /&gt;
   global cntExceptions&lt;br /&gt;
   global cntLogLines&lt;br /&gt;
   global cntAt&lt;br /&gt;
   global cntBad&lt;br /&gt;
   global stCount&lt;br /&gt;
   global stLevel&lt;br /&gt;
   global stTrace&lt;br /&gt;
   global stCurrent&lt;br /&gt;
&lt;br /&gt;
   tmatch = re.search(r&amp;#039;(.*?).log&amp;#039;, filename)&lt;br /&gt;
   if tmatch:&lt;br /&gt;
      name = tmatch.group(1)&lt;br /&gt;
   else:&lt;br /&gt;
      name = filename + &amp;quot;.log&amp;quot;&lt;br /&gt;
      filename += &amp;quot;.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   outfile = name + &amp;quot;.out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   try:&lt;br /&gt;
      ifo = open(filename, &amp;#039;r&amp;#039;)&lt;br /&gt;
   except IOError, msg:&lt;br /&gt;
      sys.stderr.write(filename + &amp;#039;: cannot open: &amp;#039; + `msg` + &amp;#039;\n&amp;#039;)&lt;br /&gt;
      sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
   if stdoutFlg == 1:&lt;br /&gt;
      ofo = sys.stdout&lt;br /&gt;
   else:&lt;br /&gt;
      try:&lt;br /&gt;
         ofo = open(outfile, &amp;#039;w&amp;#039;)&lt;br /&gt;
      except IOError, msg:&lt;br /&gt;
         sys.stderr.write(outfile + &amp;#039;: cannot open: &amp;#039; + `msg` + &amp;#039;\n&amp;#039;)&lt;br /&gt;
         sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   t_offset      = 0&lt;br /&gt;
   inStackTrace  = 0&lt;br /&gt;
   inException   = 0&lt;br /&gt;
   stackMethod   = None&lt;br /&gt;
&lt;br /&gt;
   while 1:&lt;br /&gt;
      line = ifo.readline()&lt;br /&gt;
&lt;br /&gt;
      if not line: break&lt;br /&gt;
&lt;br /&gt;
      line = line[:-1]&lt;br /&gt;
      line = line.replace(&amp;quot;\r&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
      re.sub(&amp;quot;	at[^#]*#&amp;quot;, &amp;quot;#&amp;quot;, line)&lt;br /&gt;
&lt;br /&gt;
      tmatch = re.search(r&amp;#039;	at .*&amp;gt;&amp;#039;, line)&lt;br /&gt;
      if tmatch:&lt;br /&gt;
         line = re.sub(&amp;quot;	at .*&amp;gt;&amp;quot;, &amp;quot;\tat BAD&amp;quot;, line)&lt;br /&gt;
         cntBad += 1&lt;br /&gt;
&lt;br /&gt;
      if re.search(&amp;quot;^$&amp;quot;, line):&lt;br /&gt;
         continue&lt;br /&gt;
&lt;br /&gt;
      if re.search(&amp;quot;^\r$&amp;quot;, line):&lt;br /&gt;
         continue&lt;br /&gt;
&lt;br /&gt;
      cnt += 1&lt;br /&gt;
&lt;br /&gt;
      # print line&lt;br /&gt;
&lt;br /&gt;
      tmatch = re.search(r&amp;#039;####&amp;lt;&amp;#039;, line)&lt;br /&gt;
      if tmatch:&lt;br /&gt;
         tmatch = re.search(r&amp;#039;&amp;lt;([^&amp;lt;]*?)&amp;gt;.*&amp;lt;([^&amp;lt;]*?)&amp;gt;&amp;#039;, line)&lt;br /&gt;
         dt = tmatch.group(1)&lt;br /&gt;
         xx = tmatch.group(2)&lt;br /&gt;
         # print &amp;quot;dt \&amp;quot;%s\&amp;quot;  xx \&amp;quot;%s\&amp;quot;&amp;quot; % (dt, xx)&lt;br /&gt;
         inTrace      = 1&lt;br /&gt;
         cntLogLines += 1&lt;br /&gt;
         if inStackTrace == 1:&lt;br /&gt;
            inStackTrace   = 0&lt;br /&gt;
            cntExceptions += 1&lt;br /&gt;
            print stackMethod&lt;br /&gt;
      else:&lt;br /&gt;
         inTrace           = 0&lt;br /&gt;
&lt;br /&gt;
      tmatch = re.search(r&amp;#039;\tat ([^ ]*\)?)&amp;#039;, line)&lt;br /&gt;
      if tmatch:&lt;br /&gt;
         stackMethod = tmatch.group(1)&lt;br /&gt;
         # print &amp;quot;at \&amp;quot;%s\&amp;quot;&amp;quot; % method&lt;br /&gt;
         if inStackTrace != 1:&lt;br /&gt;
            print &amp;quot;** Start of \&amp;quot;%s\&amp;quot; [%d]&amp;quot; % (stackMethod, cnt)&lt;br /&gt;
            level                  = 0&lt;br /&gt;
            if stCount.has_key(stackMethod):&lt;br /&gt;
               stCount[stackMethod] += 1&lt;br /&gt;
            else:&lt;br /&gt;
               stLevel[stackMethod] = 0&lt;br /&gt;
               stCount[stackMethod] = 1&lt;br /&gt;
               stTrace[stackMethod] = [stackMethod,]&lt;br /&gt;
            inStackTrace  = 1&lt;br /&gt;
            stCurrent = stTrace[stackMethod]&lt;br /&gt;
         else:&lt;br /&gt;
            level                     += 1&lt;br /&gt;
            if level == len(stCurrent):  # Still assembling first one of this type&lt;br /&gt;
               # print &amp;quot;+%03d+ %s&amp;quot; % (level, stackMethod)&lt;br /&gt;
               stCurrent.append(stackMethod)&lt;br /&gt;
            else:&lt;br /&gt;
               # print &amp;quot;&amp;gt;%03d&amp;gt; %s&amp;quot; % (level, stackMethod)&lt;br /&gt;
               if re.search(r&amp;#039;BAD&amp;#039;, stackMethod):&lt;br /&gt;
                  print &amp;quot;&amp;gt;---&amp;gt; skipping&amp;quot;&lt;br /&gt;
                  continue&lt;br /&gt;
               # print &amp;quot;Level %d  stCurrent \&amp;quot;%s\&amp;quot;&amp;quot; % (level, len(stCurrent))&lt;br /&gt;
               # print stCurrent[level].find(stackMethod)&lt;br /&gt;
               if stCurrent[level].find(stackMethod) != 0:&lt;br /&gt;
                  # print &amp;quot;[%s]  len1 = %d &amp;quot; % (stCurrent[level], len(stCurrent[level]))&lt;br /&gt;
                  # print &amp;quot;[%s]  len2 = %d &amp;quot; % (stackMethod, len(stackMethod))&lt;br /&gt;
                  # print &amp;quot;Bogus method \&amp;quot;%s\&amp;quot; at level %d&amp;quot; % (stackMethod, level)&lt;br /&gt;
                  # print &amp;quot;  of \&amp;quot;%s\&amp;quot;&amp;quot; % stCurrent[0]&lt;br /&gt;
                  stCurrent = newTrace(stCurrent, level, stackMethod)&lt;br /&gt;
                  # sys.exit(0)&lt;br /&gt;
         cntAt        += 1&lt;br /&gt;
      else:&lt;br /&gt;
         inStackTrace  = 0&lt;br /&gt;
&lt;br /&gt;
      # p = line.split(&amp;#039; &amp;#039;)&lt;br /&gt;
      # print p&lt;br /&gt;
      # f_elapsed = float(p[0])&lt;br /&gt;
      # location = p[3]&lt;br /&gt;
      # task     = p[4]&lt;br /&gt;
&lt;br /&gt;
      if None:&lt;br /&gt;
         tmatch = re.search(r&amp;#039;value_request_id \[Value=(.*?)\]&amp;#039;, p[5])&lt;br /&gt;
         if tmatch:&lt;br /&gt;
            request_id = tmatch.group(1)&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
      elif None:&lt;br /&gt;
         tmatch = re.search(r&amp;#039;item \[(.*?)\] rq \[Value=(.*?)\] awb \[Value=(.*?)\]&amp;#039;, p[5])&lt;br /&gt;
         if tmatch:&lt;br /&gt;
            item_no = tmatch.group(1)&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
      if rewriteFlg:&lt;br /&gt;
         if endFlg == 1:&lt;br /&gt;
            endFlg = 0&lt;br /&gt;
            print &amp;gt;&amp;gt;ofo, &amp;quot;%s&amp;quot; % &amp;quot;xx&amp;quot;&lt;br /&gt;
         else:&lt;br /&gt;
            print &amp;gt;&amp;gt;ofo, &amp;quot;%s&amp;quot; % &amp;quot;xx&amp;quot;&lt;br /&gt;
      else:&lt;br /&gt;
         if (None):&lt;br /&gt;
            if None:&lt;br /&gt;
               print &amp;gt;&amp;gt;ofo, &amp;quot;%s&amp;quot; % &amp;quot;xx&amp;quot;&lt;br /&gt;
            else:&lt;br /&gt;
               print &amp;gt;&amp;gt;ofo, &amp;quot;%s&amp;quot; % &amp;quot;xx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   ifo.close()&lt;br /&gt;
&lt;br /&gt;
   summary(sys.stdout)&lt;br /&gt;
   summary(ofo)&lt;br /&gt;
&lt;br /&gt;
   for method in stTrace.keys():&lt;br /&gt;
      printTrace(ofo, stTrace[method], stLevel[method], stCount[method])&lt;br /&gt;
&lt;br /&gt;
   ofo.close()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def printTrace(out, trace, level, no):&lt;br /&gt;
   print &amp;gt;&amp;gt;out&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot; ***** %s *****&amp;quot; % trace[0]&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot; No of calls deep %d  Signature level %d  No of occurences %d &amp;quot; % (len(trace), level,  no)&lt;br /&gt;
   for i in range(len(trace)):&lt;br /&gt;
      print &amp;gt;&amp;gt;out, &amp;quot;  %3d  %s&amp;quot; % (i, trace[i])&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def summary(out):&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Processed %d lines&amp;quot; % cnt&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Processed %d log lines&amp;quot; % cntLogLines&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Processed %d at lines&amp;quot; % cntAt&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Processed %d truncated stack traces&amp;quot; % cntBad&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Processed %d Exceptions&amp;quot; % cntExceptions&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Found %d Distinct Exceptions&amp;quot; % len(stCount.keys())&lt;br /&gt;
   print &amp;gt;&amp;gt;out, &amp;quot;Found %d Distinct Exceptions&amp;quot; % len(stCount.keys())&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
   global debugFlg&lt;br /&gt;
   global verboseFlg&lt;br /&gt;
&lt;br /&gt;
   try:&lt;br /&gt;
      opts, args = getopt.getopt(sys.argv[1:], &amp;quot;dvVw?&amp;quot;)&lt;br /&gt;
   except getopt.error, msg:&lt;br /&gt;
      print __doc__&lt;br /&gt;
      return 1&lt;br /&gt;
&lt;br /&gt;
   for o, a in opts:&lt;br /&gt;
      if o == &amp;#039;-d&amp;#039;:&lt;br /&gt;
         debugFlg = 1&lt;br /&gt;
      elif o == &amp;#039;-v&amp;#039;:&lt;br /&gt;
         verboseFlg = 1&lt;br /&gt;
      elif o == &amp;#039;-V&amp;#039;:&lt;br /&gt;
         print &amp;quot;Version: %s&amp;quot; % __version__&lt;br /&gt;
         return 1&lt;br /&gt;
      elif o == &amp;#039;-?&amp;#039;:&lt;br /&gt;
         print __doc__&lt;br /&gt;
         return 1&lt;br /&gt;
&lt;br /&gt;
   if (debugFlg):&lt;br /&gt;
      print &amp;quot;&amp;gt;&amp;gt; Flg    %s&amp;quot; % debugFlg&lt;br /&gt;
&lt;br /&gt;
   parse(filename)&lt;br /&gt;
&lt;br /&gt;
   return 1&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039; or __name__ == sys.argv[0]:&lt;br /&gt;
   sys.exit(main())&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Revision History:&lt;br /&gt;
&lt;br /&gt;
     Date     Who   Description&lt;br /&gt;
   --------   ---   --------------------------------------------------&lt;br /&gt;
   20040603   plh   Initial implementation&lt;br /&gt;
&lt;br /&gt;
Problems to fix:&lt;br /&gt;
&lt;br /&gt;
To Do:&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;br /&gt;
[[Category:Log Analysis]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>