Index: mojo/tools/mopy/perf_data_uploader.py |
diff --git a/mojo/tools/mopy/perf_data_uploader.py b/mojo/tools/mopy/perf_data_uploader.py |
deleted file mode 100755 |
index 3f00defd731743fc0a00d67e0587b2f854263a93..0000000000000000000000000000000000000000 |
--- a/mojo/tools/mopy/perf_data_uploader.py |
+++ /dev/null |
@@ -1,191 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""A tool that uploads data to the performance dashboard.""" |
- |
-import argparse |
-import httplib |
-import json |
-import pprint |
-import re |
-import sys |
-import urllib |
-import urllib2 |
- |
-# TODO(yzshen): The following are missing currently: |
-# (1) CL range on the dashboard; |
-# (2) improvement direction on the dashboard; |
-# (3) a link from the build step pointing to the dashboard page. |
- |
- |
-_PERF_LINE_FORMAT = r"""^\s*([^\s/]+) # chart name |
- (/([^\s/]+))? # trace name (optional, separated with |
- # the chart name by a '/') |
- \s+(\S+) # value |
- \s+(\S+) # units |
- \s*$""" |
- |
-_PRODUCTION_SERVER = "https://chromeperf.appspot.com" |
-_TESTING_SERVER = "https://chrome-perf.googleplex.com" |
- |
- |
-def UploadPerfData(master_name, perf_id, test_name, builder_name, build_number, |
- revision, perf_data, point_id, dry_run=False, |
- testing_dashboard=True): |
- """Uploads perf data. |
- |
- Args: |
- Please see the help for command-line args. |
- |
- Returns: |
- A boolean value indicating whether the operation succeeded or not. |
- """ |
- |
- def _ConvertToUploadFormat(): |
- """Converts perf data to the format that the server understands. |
- |
- Returns: |
- A dictionary that (after being converted to JSON) conforms to the server |
- format. |
- """ |
- charts = {} |
- line_format = re.compile(_PERF_LINE_FORMAT, re.VERBOSE) |
- for line in perf_data: |
- match = re.match(line_format, line) |
- assert match, "Unable to parse the following input: %s" % line |
- |
- chart_name = match.group(1) |
- trace_name = match.group(3) if match.group(3) else "summary" |
- |
- if chart_name not in charts: |
- charts[chart_name] = {} |
- charts[chart_name][trace_name] = { |
- "type": "scalar", |
- "value": float(match.group(4)), |
- "units": match.group(5) |
- } |
- |
- return { |
- "master": master_name, |
- "bot": perf_id, |
- "masterid": master_name, |
- "buildername": builder_name, |
- "buildnumber": build_number, |
- "versions": { |
- "mojo": revision |
- }, |
- "point_id": point_id, |
- "supplemental": {}, |
- "chart_data": { |
- "format_version": "1.0", |
- "benchmark_name": test_name, |
- "charts": charts |
- } |
- } |
- |
- class _UploadException(Exception): |
- pass |
- |
- def _Upload(server_url, json_data): |
- """Make an HTTP POST with the given data to the performance dashboard. |
- |
- Args: |
- server_url: URL of the performance dashboard instance. |
- json_data: JSON string that contains the data to be sent. |
- |
- Raises: |
- _UploadException: An error occurred during uploading. |
- """ |
- # When data is provided to urllib2.Request, a POST is sent instead of GET. |
- # The data must be in the application/x-www-form-urlencoded format. |
- data = urllib.urlencode({"data": json_data}) |
- req = urllib2.Request("%s/add_point" % server_url, data) |
- try: |
- urllib2.urlopen(req) |
- except urllib2.HTTPError as e: |
- raise _UploadException("HTTPError: %d. Response: %s\n" |
- "JSON: %s\n" % (e.code, e.read(), json_data)) |
- except urllib2.URLError as e: |
- raise _UploadException("URLError: %s for JSON %s\n" % |
- (str(e.reason), json_data)) |
- except httplib.HTTPException as e: |
- raise _UploadException("HTTPException for JSON %s\n" % json_data) |
- |
- formatted_data = _ConvertToUploadFormat() |
- |
- server_url = _TESTING_SERVER if testing_dashboard else _PRODUCTION_SERVER |
- |
- if dry_run: |
- print "Won't upload because --dry-run is specified." |
- print "Server: %s" % server_url |
- print "Data:" |
- pprint.pprint(formatted_data) |
- else: |
- print "Uploading data to %s ..." % server_url |
- try: |
- _Upload(server_url, json.dumps(formatted_data)) |
- except _UploadException as e: |
- print e |
- return False |
- print "Done successfully." |
- |
- return True |
- |
- |
-def main(): |
- parser = argparse.ArgumentParser( |
- description="A tool that uploads data to the performance dashboard.") |
- |
- parser.add_argument( |
- "--master-name", required=True, |
- help="Buildbot master name, used to construct link to buildbot log by " |
- "the dashboard, and also as the top-level category for the data.") |
- parser.add_argument( |
- "--perf-id", required=True, |
- help="Used as the second-level category for the data, usually the " |
- "platform type.") |
- parser.add_argument( |
- "--test-name", required=True, |
- help="Name of the test that the perf data was generated from.") |
- parser.add_argument( |
- "--builder-name", required=True, |
- help="Buildbot builder name, used to construct link to buildbot log by " |
- "the dashboard.") |
- parser.add_argument( |
- "--build-number", required=True, type=int, |
- help="Build number, used to construct link to buildbot log by the " |
- "dashboard.") |
- parser.add_argument( |
- "--revision", required=True, help="The mojo git commit hash.") |
- parser.add_argument( |
- "--perf-data", required=True, metavar="foo_perf.log", |
- type=argparse.FileType("r"), |
- help="A text file containing the perf data. Each line is a data point in " |
- "the following format: chart_name[/trace_name] value units") |
- parser.add_argument( |
- "--point-id", required=True, type=int, |
- help="The x coordinate for the data points.") |
- parser.add_argument( |
- "--dry-run", action="store_true", |
- help="Display the server URL and the data to upload, but not actually " |
- "upload the data.") |
- server_group = parser.add_mutually_exclusive_group() |
- server_group.add_argument( |
- "--testing-dashboard", action="store_true", default=True, |
- help="Upload the data to the testing dashboard (default).") |
- server_group.add_argument( |
- "--production-dashboard", dest="testing_dashboard", action="store_false", |
- default=False, help="Upload the data to the production dashboard.") |
- args = parser.parse_args() |
- |
- result = UploadPerfData(args.master_name, args.perf_id, args.test_name, |
- args.builder_name, args.build_number, args.revision, |
- args.perf_data, args.point_id, args.dry_run, |
- args.testing_dashboard) |
- return 0 if result else 1 |
- |
- |
-if __name__ == '__main__': |
- sys.exit(main()) |