def PiReportToHTML(ofile, corpus_driver, pi_report_file, query, json_output=False, stop_on_error=False, jobs=1, quiet=False): project = perf_insights_project.PerfInsightsProject() with open(pi_report_file, 'r') as f: pi_report_file_contents = f.read() map_function_href, pi_report_element_name = _GetMapFunctionHrefFromPiReport( pi_report_file_contents) map_file = project.GetAbsPathFromHRef(map_function_href) map_function_handle = map_function_handle_module.MapFunctionHandle( filename=map_file) if map_file == None: raise Exception('Could not find %s' % map_function_href) results = _MapTraces(corpus_driver, map_function_handle, query, stop_on_error, jobs, quiet) if stop_on_error and results.had_failures: sys.stderr.write('There were mapping errors. Aborting.') return 255 if json_output: json.dump(results.AsDict(), ofile, indent=2) else: WriteResultsToFile(ofile, project, pi_report_file, pi_report_element_name, results) return 0
def get(self, *args, **kwargs): # pylint: disable=unused-argument map_function = kwargs.pop('map_function') map_function_handle = map_function_handle_module.MapFunctionHandle( map_function_name=map_function) pi_data_dir = kwargs.pop('_pi_data_dir') corpus_driver = local_directory_corpus_driver.LocalDirectoryCorpusDriver( pi_data_dir) # TODO(nduca): pass self.request.params to the map function [maybe]. query_string = self.request.params.get('corpus_query', 'True') query = corpus_query.CorpusQuery.FromString(query_string) trace_handles = corpus_driver.GetTraceHandlesMatchingQuery(query) self._RunMapper(trace_handles, map_function_handle)
def Main(argv): parser = argparse.ArgumentParser(description='Local bulk trace processing') parser.add_argument('trace_directory') parser.add_argument('--query') parser.add_argument('map_file') parser.add_argument('-j', '--jobs', type=int, default=1) parser.add_argument('-o', '--output-file') parser.add_argument('-s', '--stop-on-error', action='store_true') args = parser.parse_args(argv[1:]) if not os.path.exists(args.trace_directory): parser.error('trace_directory does not exist') if not os.path.exists(args.map_file): parser.error('map does not exist') corpus_driver = local_directory_corpus_driver.LocalDirectoryCorpusDriver( os.path.abspath(os.path.expanduser(args.trace_directory))) if args.query is None: query = corpus_query.CorpusQuery.FromString('True') else: query = corpus_query.CorpusQuery.FromString(args.query) if args.output_file: ofile = open(args.output_file, 'w') else: ofile = sys.stdout output_formatter = json_output_formatter.JSONOutputFormatter(ofile) map_function_handle = map_function_handle_module.MapFunctionHandle( filename=os.path.abspath(args.map_file)) try: trace_handles = corpus_driver.GetTraceHandlesMatchingQuery(query) runner = map_runner.MapRunner(trace_handles, map_function_handle, stop_on_error=args.stop_on_error) results = runner.Run(jobs=args.jobs, output_formatters=[output_formatter]) if not results.had_failures: return 0 else: return 255 finally: if ofile != sys.stdout: ofile.close()
def _Handle(filename): return map_function_handle_module.MapFunctionHandle(filename=filename)