diff options
author | mike-holmes <mike.holmes@linaro.org> | 2014-01-08 19:11:11 -0500 |
---|---|---|
committer | mike-holmes <mike.holmes@linaro.org> | 2014-01-11 08:38:53 -0500 |
commit | 914cbf9b444a623b75f1d02b641f8cdeaa2989f5 (patch) | |
tree | 751c1794d0a06e8e3a51b7d2ce3591d9b0ce5b05 /common | |
parent | 1249e65db4c8dd11d336da2b0b277e6cf685be2a (diff) |
ltp-realtime: Parse ltp-realtime results for LAVA measurements
Change-Id: I9f9a626ee08045250976ef0e1425d02df4f82328
Diffstat (limited to 'common')
-rwxr-xr-x | common/scripts/ltp-realtime2LAVA.py | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/common/scripts/ltp-realtime2LAVA.py b/common/scripts/ltp-realtime2LAVA.py new file mode 100755 index 0000000..f5f41fa --- /dev/null +++ b/common/scripts/ltp-realtime2LAVA.py @@ -0,0 +1,197 @@ +#!/usr/bin/python +import re +import sys +import fileinput + +#extract a standard results block from the stream +def standard_results (): + minimum = re.compile("^Min:\s+(?P<min>[\d\.]+)\s+(?P<units>\w+)") + maximum = re.compile("^Max:\s+(?P<max>[\d\.]+)\s+(?P<units>\w+)") + average = re.compile("^Avg:\s+(?P<average>[\d\.]+)\s+(?P<units>\w+)") + standarddev = re.compile("^StdDev:\s+(?P<stddev>[\d\.]+)\s+(?P<units>\w+)") + finished=0 + for line in sys.stdin: + for parser in [maximum,minimum,average,standarddev]: + result = parser.search(line) + if result is not None: + if parser is minimum: + test_min = result.group('min') + units = result.group('units') + print "test_case_id:%s%s min measurement:%s units:%s result:skip" % (test_name, test_args, test_min, units) + finished += 1 + break + if parser is maximum: + test_max = result.group('max') + units = result.group('units') + finished += 1 + print "test_case_id:%s%s max measurement:%s units:%s result:skip" % (test_name, test_args, test_max, units) + break + if parser is average: + test_avg = result.group('average') + units = result.group('units') + print "test_case_id:%s%s avg measurement:%s units:%s result:skip" % (test_name, test_args, test_avg, units) + finished += 1 + break + if parser is standarddev: + test_stddev = result.group('stddev') + units = result.group('units') + print "test_case_id:%s%s stddev measurement:%s units:%s result:skip" % (test_name, test_args, test_stddev, units) + finished += 1 + break + else: + continue + if finished ==4: + return + + print "ERROR: Parser failed and ran to EOF" + sys.exit(-1) + +def result_results (): + results = re.compile("Result:\s+(?P<result>\w+)") + finished=0 + for line in sys.stdin: + for parser in [results]: + result = parser.search(line) + if result is not None: + if parser is results: + test_result = result.group('result') + print "test_case_id:%s%s_test measurement:0 units:none result:%s" % (test_name, test_args, test_result) + finished += 1 + break + else: + continue + if finished ==1: + return + + print "ERROR: Parser failed and ran to EOF" + sys.exit(-1) + + +def sched_jitter_results (): + maximum = re.compile("^max jitter:\s+(?P<max>[\d\.]+)\s+(?P<units>\w+)") + finished=0 + for line in sys.stdin: + for parser in [maximum]: + result = parser.search(line) + if result is not None: + if parser is maximum: + test_max = result.group('max') + units = result.group('units') + print "test_case_id:%s%s max jitter measurement:%s units:%s result:skip" % (test_name, test_args, test_max, units) + finished += 1 + break + else: + continue + if finished ==1: + #print "min:%s max:%s avg:%s stddev:%s" % (test_min, test_max, test_avg, test_stddev) + return + + print "ERROR: Parser failed and ran to EOF" + sys.exit(-1) + +def pi_perf_results (): + minimum = re.compile("^Min delay =\s+(?P<min>[\d\.]+)\s+(?P<units>\w+)") + maximum = re.compile("^Max delay =\s+(?P<max>[\d\.]+)\s+(?P<units>\w+)") + average = re.compile("^Average delay =\s+(?P<average>[\d\.]+)\s+(?P<units>\w+)") + standarddev = re.compile("^Standard Deviation =\s+(?P<stddev>[\d\.]+)\s+(?P<units>\w+)") + finished=0 + for line in sys.stdin: + for parser in [maximum,minimum,average,standarddev]: + result = parser.search(line) + if result is not None: + if parser is minimum: + test_min = result.group('min') + units = result.group('units') + print "test_case_id:%s%s min measurement:%s units:%s result:skip" % (test_name, test_args, test_min, units) + finished += 1 + break + if parser is maximum: + test_max = result.group('max') + units = result.group('units') + print "test_case_id:%s%s max measurement:%s units:%s result:skip" % (test_name, test_args, test_max, units) + finished += 1 + break + if parser is average: + test_avg = result.group('average') + units = result.group('units') + print "test_case_id:%s%s avg measurement:%s units:%s result:skip" % (test_name, test_args, test_avg, units) + finished += 1 + break + if parser is standarddev: + test_stddev = result.group('stddev') + units = result.group('units') + print "test_case_id:%s%s stddev measurement:%s units:%s result:skip" % (test_name, test_args, test_stddev, units) + finished += 1 + break + else: + continue + if finished ==4: + return + + print "ERROR: Parser failed and ran to EOF" + sys.exit(-1) + +def do_nothing (): + return + +#names of the test parsed out fo the input stream, converted to functioncalls +def async_handler(): + standard_results() + result_results() +def tc_2(): + result_results() +def gtod_latency(): + standard_results() +def periodic_cpu_load_single(): + standard_results() +def sched_latency(): + standard_results() +def sched_jitter(): + sched_jitter_results() +def sched_football(): + result_results() +def rt_migrate(): + result_results() +def pthread_kill_latency(): + standard_results() + result_results() +def prio_wake(): + result_results() +def pi_perf(): + pi_perf_results() +def prio_preempt(): + result_results() +def matrix_mult(): + result_results() +def periodic_cpu_load(): + result_results() +def async_handler_jk(): + result_results() + +#Parse the input stream and tuen test names into function calls to parse their +#details + +test_start = re.compile("--- Running testcase (?P<name>[a-zA-Z0-9_-]+)\s+(?P<args>[a-zA-Z0-9_.\- ]*?)\s*---") +test_finish = re.compile("The .* test appears to have completed.") + +for line in sys.stdin: + for parser in [test_start,test_finish]: + result = parser.search(line) + if result is not None: + if parser is test_start: + test_name = result.group('name') + func_name = result.group('name') + func_name = func_name.replace("-","_") + test_args = result.group('args') + test_args = test_args.replace(" ","-") + print + print " test_start= " + test_name + test_args + globals()[func_name]() + break + + if parser is test_finish: + print " test_finished= " + test_name + test_args + break + else: + continue + |