Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Unified Diff: mojo/tools/mopy/perf_data_uploader.py

Issue 878933003: Move the apptest runner and parts of mopy to the public SDK. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/tools/mopy/paths.py ('k') | mojo/tools/mopy/print_process_error.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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())
« no previous file with comments | « mojo/tools/mopy/paths.py ('k') | mojo/tools/mopy/print_process_error.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698