diff --git a/tracer/tracer/analysis_runner.py b/tracer/tracer/analysis_runner.py index f2ba8bfb80..2f62fb1aab 100644 --- a/tracer/tracer/analysis_runner.py +++ b/tracer/tracer/analysis_runner.py @@ -1,6 +1,7 @@ -from tracer.parser import Parser -from tracer.structure import Structure - +try: + from tracer.parser import Parser +except: + from parser import Parser class AnalysisRunner(object): """ @@ -36,10 +37,10 @@ class AnalysisRunner(object): try: for event in self.log: # check if it is a tracer.class or tracer event - if self.is_tracer_class(event): - self.handle_tracer_class(event) - elif self.is_tracer_entry(event): + if self.is_tracer_entry(event): self.handle_tracer_entry(event) + elif self.is_tracer_class(event): + self.handle_tracer_class(event) #else: # print("unhandled:", repr(event)) except StopIteration: diff --git a/tracer/tracer/parser.py b/tracer/tracer/parser.py index 7c5c4ebcef..1fb6728803 100644 --- a/tracer/tracer/parser.py +++ b/tracer/tracer/parser.py @@ -8,7 +8,8 @@ def _log_line_regex(): # "0:00:00.777913000 " TIME = r"(\d+:\d\d:\d\d\.\d+)\s+" # "DEBUG " - LEVEL = "([A-Z]+)\s+" + #LEVEL = "([A-Z]+)\s+" + LEVEL = "(TRACE)\s+" # "0x8165430 " THREAD = r"(0x[0-9a-f]+)\s+" # "GST_REFCOUNTING ", "flacdec " @@ -54,14 +55,10 @@ class Parser(object): self.file = None def __enter__(self): - def __is_tracer(line): - return 'TRACE' in line - if self.filename != '-': self.file = open(self.filename, 'rt') else: self.file = sys.stdin - self.data = filter(__is_tracer, self.file) return self def __exit__(self, *args): @@ -74,7 +71,7 @@ class Parser(object): def __next__(self): log_regex = self.log_regex - data = self.data + data = self.file while True: line = next(data) match = log_regex.match(line) diff --git a/tracer/tracer/parser_perf.py b/tracer/tracer/parser_perf.py new file mode 100644 index 0000000000..0c87a17f6a --- /dev/null +++ b/tracer/tracer/parser_perf.py @@ -0,0 +1,13 @@ +from analysis_runner import AnalysisRunner +from parser import Parser + + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('file', nargs='?', default='debug.log') + args = parser.parse_args() + + with Parser(args.file) as log: + runner = AnalysisRunner(log) + runner.run() diff --git a/tracer/tracer/parser_test.py b/tracer/tracer/parser_test.py index 27a41de450..2a576ef8cb 100644 --- a/tracer/tracer/parser_test.py +++ b/tracer/tracer/parser_test.py @@ -26,12 +26,12 @@ class TestParser(unittest.TestCase): self.assertIsNotNone(log.file) def test___enter___with_stdin(self): - sys.stdin = TEXT_DATA + sys.stdin = iter(TEXT_DATA) with Parser('-') as log: self.assertIsNotNone(log.file) def test_random_text_reports_none(self): - sys.stdin = TEXT_DATA + sys.stdin = iter(TEXT_DATA) with Parser('-') as log: with self.assertRaises(StopIteration): next(log) @@ -41,7 +41,7 @@ class TestParser(unittest.TestCase): self.assertIsNotNone(next(log)) def test_trace_log_parsed(self): - sys.stdin = TRACER_LOG_DATA + sys.stdin = iter(TRACER_LOG_DATA) with Parser('-') as log: event = next(log) self.assertEqual(len(event), 10)