def select_keys(self, keys): """Return copy of benchmarks that only contain `keys` Args: keys (list): List of benchmark keys to keep Returns: BenchData: Copy of current benchmarks with parameters defined in `keys`. """ if keys is None: return self.copy() selected = [copy.deepcopy(DictUtils.subdict(bench, keys)) for bench in self.__benchmarks] return BenchData(selected, create_copy=False)
def parse_log_files(filenames, opts=None): """ Parses files and returns their parameters. :param list filenames: List of file names to parse. :param dict opts: Dictionary of options. :rtype: tuple<list, list> :return: A tuple of two lists - succeeded and failed benchmarks """ opts = {} if opts is None else opts for key in ('filter_params', 'filter_query', 'output_params'): DictUtils.ensure_exists(opts, key) DictUtils.ensure_exists(opts, 'failed_benchmarks', 'discard') DictUtils.ensure_exists(opts, '_extended_params', {}) DictUtils.ensure_exists(opts, 'ignore_errors', False) succeeded_benchmarks = [] failed_benchmarks = [] for filename in filenames: # Parse log file params = LogParser.parse_log_file( filename, ignore_errors=opts['ignore_errors']) # Check if this benchmark does not match filter if len(params) == 0 or \ not DictUtils.contains(params, opts['filter_params']) or \ not DictUtils.match(params, opts['filter_query']): continue # Add extended parameters and compute them if len(opts['_extended_params']) > 0: params.update(opts['_extended_params']) Processor().compute_variables([params]) # params = params[0] # Identify is this benchmark succeeded of failed. succeeded = 'results.throughput' in params and \ isinstance(params['results.throughput'], (int, long, float)) and \ params['results.throughput'] > 0 # Get only those key/values that need to be serialized params = DictUtils.subdict(params, opts['output_params']) # Append benchmark either to succeeded or failed list if succeeded: succeeded_benchmarks.append(params) else: if opts['failed_benchmarks'] == 'keep': succeeded_benchmarks.append(params) elif opts['failed_benchmarks'] == 'keep_separately': failed_benchmarks.append(params) # return succeeded_benchmarks, failed_benchmarks