| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2016 The Chromium Authors. All rights reserved. | 2 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import argparse | 6 import argparse |
| 7 import json | 7 import json |
| 8 import os | 8 import os |
| 9 import sys | 9 import sys |
| 10 | 10 |
| 11 sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..')) | 11 sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..')) |
| 12 from tracing.metrics import metric_runner | 12 from tracing.metrics import metric_runner |
| 13 from tracing.metrics import discover | 13 from tracing.metrics import discover |
| 14 | 14 |
| 15 def Main(argv): | 15 def Main(argv): |
| 16 all_metrics = discover.DiscoverMetrics( | 16 all_metrics = discover.DiscoverMetrics( |
| 17 ['/tracing/metrics/all_metrics.html']) | 17 ['/tracing/metrics/all_metrics.html']) |
| 18 parser = argparse.ArgumentParser( | 18 parser = argparse.ArgumentParser( |
| 19 description='Runs metrics on local traces') | 19 description='Runs metrics on local traces') |
| 20 parser.add_argument('metric_name', | |
| 21 help=('The function name of a registered metric, NOT ' | |
| 22 'filename. Available metrics are: %s' % | |
| 23 ', '.join(all_metrics)), | |
| 24 choices=all_metrics, metavar='metricName') | |
| 25 parser.add_argument('trace_file_or_dir', | 20 parser.add_argument('trace_file_or_dir', |
| 26 help='A trace file, or a dir containing trace files') | 21 help='A trace file, or a dir containing trace files') |
| 22 parser.add_argument('metrics', nargs=argparse.REMAINDER, |
| 23 help=('Function names of registered metrics ' |
| 24 '(not filenames.) ' |
| 25 'Available metrics are: %s' % |
| 26 ', '.join(all_metrics)), |
| 27 choices=all_metrics, metavar='metricName') |
| 27 | 28 |
| 28 args = parser.parse_args(argv[1:]) | 29 args = parser.parse_args(argv[1:]) |
| 29 metric = args.metric_name | 30 trace_file_or_dir = os.path.abspath(args.trace_file_or_dir) |
| 30 | 31 |
| 31 if os.path.isdir(args.trace_file_or_dir): | 32 if os.path.isdir(trace_file_or_dir): |
| 32 trace_dir = args.trace_file_or_dir | 33 trace_dir = trace_file_or_dir |
| 33 traces = [os.path.join(trace_dir, trace) for trace in os.listdir(trace_dir)] | 34 traces = [os.path.join(trace_dir, trace) for trace in os.listdir(trace_dir)] |
| 34 else: | 35 else: |
| 35 traces = [args.trace_file_or_dir] | 36 traces = [trace_file_or_dir] |
| 36 | 37 |
| 37 results = {k: v.AsDict() | 38 results = {k: v.AsDict() for k, v in |
| 38 for k, v in metric_runner.RunMetricOnTraces(traces, metric).iteritems()} | 39 metric_runner.RunMetricOnTraces(traces, args.metrics).iteritems()} |
| 39 | 40 |
| 40 failures = [] | 41 failures = [] |
| 41 for trace in traces: | 42 for trace in traces: |
| 42 failures.extend(results[trace].get('failures', [])) | 43 failures.extend(results[trace].get('failures', [])) |
| 43 if failures: | 44 if failures: |
| 44 print 'Running metric failed:' | 45 print 'Running metric failed:' |
| 45 for failure in failures: | 46 for failure in failures: |
| 46 print failure['stack'] | 47 print failure['stack'] |
| 47 else: | 48 else: |
| 48 print json.dumps(results, indent=2, sort_keys=True, separators=(',', ': ')) | 49 print json.dumps(results, indent=2, sort_keys=True, separators=(',', ': ')) |
| 49 | 50 |
| 50 | 51 |
| 51 if __name__ == '__main__': | 52 if __name__ == '__main__': |
| 52 sys.exit(Main(sys.argv)) | 53 sys.exit(Main(sys.argv)) |
| OLD | NEW |