Item fix.py
Jump to navigation
Jump to search
#! /usr/bin/env python # # Purpose: Parse and display an informix log file # # $Id:$ # #--------------------------------------------------------------------- """ Parse Ben's LR log files to show the underlying function invocation sequence in the designated log file. Another option shows timing of start of function. Instructions for use: 1. You should change to the loadgen directory - the one containing the log files generated by Ben's code. 2. Run: $ prune_log.py -t *.log This produces a logs.sorted file contining the merged and sorted rewritten logs. 3. Then run: $ time_line.py This produces 'time_line.txt' which contains the time line and concurrency map. """ #--------------------------------------------------------------------- import re import os import sys import glob import time import getopt import pickle #--------------------------------------------------------------------- __version__ = "1.0.0" debugFlg = 0 stdoutFlg = 0 verboseFlg = 0 directoryFlg = None filename = "x.lst" mode = None data = None #--------------------------------------------------------------------- class Line: Max_0 = 0 Max_1 = 0 def __init__(self, l): self.flag = None self.line = l def __str__(self): if self.flag: s = ' ' * self.leading s += self.split[0] spacer = ' ' * (Line.Max_0 - len(self.split[0]) + 1) s += spacer + self.split[1] spacer = ' ' * (Line.Max_1 - len(self.split[1]) + 1) s += spacer + self.split[2] return s else: return self.line; def leading(self, no): self.leading = no def split(self, p): self.flag = 1 self.split = p #--------------------------------------------------------------------- def startSeconds(s): return time.mktime(time.strptime(s, "%Y-%m-%d %H:%M:%S")) #--------------------------------------------------------------------- def seconds(hms): s = hms.split(':') return ((s[0] * 60) + s[1]) * 60 + s[2] #--------------------------------------------------------------------- def hms(t_secs): hm = t_secs / 60 hours = hm / 60 mins = hm % 60 secs = t_secs % 60 return "%02d:%02d:%02d" % ( hours, mins, secs) #--------------------------------------------------------------------- def parse(filename): global t_start print filename tmatch = re.search(r'(.*?).lst', filename) if tmatch: name = tmatch.group(1) else: name = filename + ".lst" filename += ".lst" outfile = name + ".out" try: ifo = open(filename, 'r') except IOError, msg: sys.stderr.write(filename + ': cannot open: ' + `msg` + '\n') sys.exit(1) try: ofo = open(outfile, 'w') except IOError, msg: sys.stderr.write(outfile + ': cannot open: ' + `msg` + '\n') sys.exit(1) cnt = 0 max_0 = 0 max_1 = 0 lines = [] while 1: line = ifo.readline() if not line: break line = line[:-1] line = line.replace("\r","") l = Line(line) lines.append(l) if re.search("^#", line): continue if re.search("^$", line): continue if re.search("^\r$", line): continue cnt += 1 tmatch = re.search("^ *([^ ]?)", line) if tmatch: ch = tmatch.group(1) no_leading_spaces = line.index(ch) l.leading(no_leading_spaces) line = line[no_leading_spaces:] p = line.split(' ') len_0 = len(p[0]) if len_0 > max_0: max_0 = len_0 len_1 = len(p[1]) if len_1 > max_1: max_1 = len_1 l.split(p) try: print "[%s]" % str(p) print >>ofo, "[%s]" % str(p) except: print "%s" % line sys.exit(0) print ":::::::::::::::::::::::::" Line.Max_0 = max_0 Line.Max_1 = max_1 for i in range(len(lines)): print lines[i] ifo.close() ofo.close() print >>sys.stderr, "Processed %d lines" % cnt #--------------------------------------------------------------------- def main(): global filename global debugFlg global stdoutFlg global verboseFlg try: opts, args = getopt.getopt(sys.argv[1:], "df:vV?") except getopt.error, msg: print __doc__ return 1 for o, a in opts: if o == '-d': debugFlg = 1 elif o == '-f': filename = a elif o == '-v': verboseFlg = 1 elif o == '-V': print "Version: %s" % __version__ return 1 elif o == '-?': print __doc__ return 1 if (debugFlg): print ">> Flg %s" % debugFlg parse(filename) return 1 #--------------------------------------------------------------------- if __name__ == '__main__' or __name__ == sys.argv[0]: sys.exit(main()) #--------------------------------------------------------------------- """ Revision History: Date Who Description -------- --- -------------------------------------------------- 20040812 plh Initial implementation Problems to fix: To Do: Issues: """ """ "Name=org.apache.struts.taglib.html.TOKEN", "Value={AgentisTOKEN}", ENDITEM, "Name=panelControlMap_subFormName", "Value=QueueLinkMap", ENDITEM, "Name=panelControlMap_panelName", "Value=null", ENDITEM, "Name=MetaDataDrivenTagMap_tableName", "Value=0", ENDITEM, "Name=MetaDataDrivenTagMap_columnName", "Value=0", ENDITEM, "Name=MetaDataDrivenTagMap_recordNumber", "Value=0", ENDITEM, "Name=MetaDataDrivenTagMap_agentId", "Value=0", ENDITEM, "Name=", "Value=", ENDITEM, "Name=", "Value=", ENDITEM, "Name=ConfirmationActionForm_role", "Value=*UNKNOWN:role*", ENDITEM, "Name=ConfirmationActionForm_token", "Value=*UNKNOWN:token*", ENDITEM, "Name=ConfirmationActionForm_param1", "Value=*UNKNOWN:param1*", ENDITEM, "Name=ConfirmationActionForm_param2", "Value=*UNKNOWN:param2*", ENDITEM, "Name=QueueLinkMap_taskId", value_task, ENDITEM, "Name=QueueLinkMap_requestId", "Value=", ENDITEM, "Name=QueueLinkMap_awbNumber", "Value=", ENDITEM, "Name=QueueLinkMap_queueLinkId", "Value=", ENDITEM, "Name=QueueLinkMap_orgUnitName", "Value=", ENDITEM, "Name=QueueLinkMap_orgUnitId", "Value=", ENDITEM, "Name=BodyLinkMap_taskId", "Value=", ENDITEM, "Name=BodyLinkMap_awbNumber", "Value=", ENDITEM, "Name=BodyLinkMap_requestId", "Value=", ENDITEM, "Name=BodyLinkMap_queueLinkId", "Value=", ENDITEM, """