diff options
author | wu.zhihui <wu.zhihui1@zte.com.cn> | 2017-03-11 00:29:41 +0800 |
---|---|---|
committer | Yujun Zhang <zhang.yujunz@zte.com.cn> | 2017-03-14 14:36:48 +0000 |
commit | aea95cb8b1eef994fb714bb4f00c214347e53452 (patch) | |
tree | d4ff8c6256728238da30876f7340f9ab5b58b2de /qtip/collector/parser/grep.py | |
parent | 89743ab8134e54fe606310e3bf5c65ebab93c62a (diff) |
parse benchmark result from logfile
- Put all the regex rules in regex.yaml.
- According to benchmark name, we can find related regexes.
Change-Id: Ic15bd1c77b525be3751011fa94d582da077b0345
Signed-off-by: wu.zhihui <wu.zhihui1@zte.com.cn>
(cherry picked from commit dc92e5ae19dd026bf6a14c1e0d2b9c50497845d5)
Diffstat (limited to 'qtip/collector/parser/grep.py')
-rw-r--r-- | qtip/collector/parser/grep.py | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/qtip/collector/parser/grep.py b/qtip/collector/parser/grep.py index f74ce403..44edb5a1 100644 --- a/qtip/collector/parser/grep.py +++ b/qtip/collector/parser/grep.py @@ -7,12 +7,20 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## - +from collections import defaultdict +from os import path import re +import yaml -from qtip.base.constant import BaseProp from qtip.base import BaseActor +from qtip.base.constant import BaseProp +from qtip.collector import calculator +from qtip.util.logger import QtipLogger + +logger = QtipLogger('grep').get + +REGEX_FILE = path.join(path.dirname(__file__), 'regex.yaml') class GrepProp(BaseProp): @@ -32,3 +40,65 @@ def grep_in_file(filename, regex): with open(filename, 'r') as f: return filter(lambda x: x is not None, re.finditer(regex, f.read(), re.MULTILINE)) + + +def _parse_logfile(config, paths): + captured = {} + for regex_rules_by_file in config: + filename = \ + '{0}/{1}'.format(paths, regex_rules_by_file[GrepProp.FILENAME]) + for regex in regex_rules_by_file['grep']: + matches = grep_in_file(filename, regex) + for item in matches: + print item.groupdict() + if len(matches) > 1: + temp_dict = defaultdict(list) + for item in [match.groupdict() for match in matches]: + for key in item: + temp_dict[key].append(item[key]) + captured.update(temp_dict) + elif len(matches) == 1: + captured.update(matches[0].groupdict()) + else: + logger.error("Nothing is matched from {0}".format(filename)) + return captured + + +# TODO: Hardcord in Danube, it will be removed in the future. +def parse_sysinfo(config, result_dir): + sysinfo = _parse_logfile(config, result_dir) + if "cpu_idle" in sysinfo: + sysinfo['cpu_usage'] = \ + calculator.calculate_cpu_usage(sysinfo['cpu_idle']) + sysinfo.pop('cpu_idle') + return sysinfo + + +# TODO: Hardcord in Danube, it will be removed in the future. +def parse_test_result(benchmark, config, result_dir): + test_result = _parse_logfile(config, result_dir) + if benchmark == 'dpi': + return calculator.dpi_calculator(test_result) + if benchmark == 'dhrystone' or benchmark == 'whetstone': + return {'total_cpus': test_result['total_cpus'], + 'single_cpu': {'num': test_result['single_cpu'], + 'score': test_result['score'][0]}, + 'multi_cpus': {'num': test_result['multi_cpus'], + 'score': test_result['score'][1]}} + return test_result + + +# TODO: Hardcord in Danube, it will be removed in the future. +def parse_benchmark_result(result_dir): + regex_config = yaml.safe_load(file(REGEX_FILE)) + benchmark = result_dir.split('/')[-1] + result = {'name': benchmark} + + test_result = \ + parse_test_result(benchmark, regex_config[benchmark], result_dir) + result['results'] = test_result.copy() + + sysinfo = parse_sysinfo(regex_config['sysinfo'], result_dir) + result['sysinfo'] = sysinfo.copy() + + return result |