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

Side by Side Diff: scripts/slave/results_dashboard.py

Issue 12317053: Sends test results to new perf dashboard (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: First pass at implementing a cache file (still need a real location for the file) Created 7 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | scripts/slave/runtest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Functions for adding results to perf dashboard."""
7
8 import httplib
9 import json
10 import urllib
11 import urllib2
12
13 SEND_RESULTS_PATH = "/add_point"
14 RESULTS_LINK_PATH = "/report?masters=%s&bots=%s&tests=%s&rev=%s"
15 CACHE_FILE = "/tmp/my_log_file"
Mike Stip (use stip instead) 2013/02/27 09:53:35 in a later version this will be build_dir/results_
16
17
18 def SendResults(logname, lines, master, system, test, url, stdio_url):
19 if not logname.endswith("-summary.dat"):
20 return
21
22 new_results_line = _GetResultsJson(
23 logname, lines, master, system, test, url, stdio_url)
24 # Write the new request line to the cache, in case of errors.
25 cache = open(CACHE_FILE, "a+b")
26 cache.write("\n" + new_results_line)
27 cache.close()
28
29 # Send all the results from this run and the previous cache to the dashboard.
30 cache = open(CACHE_FILE, "r")
31 cache_lines = cache.readlines()
32 cache.close()
33 errors = []
34 lines_to_retry = []
35 fatal_error = False
36 for index, line in enumerate(cache_lines):
37 line = line.strip()
38 if not line:
39 continue
40 error = _SendResultsJson(url, line)
41 if error:
42 if index != len(cache_lines) -1:
43 # This request has already been tried before, now it's fatal.
44 fatal_error = True
45 lines_to_retry.append(line)
46 errors.append(error)
47
48 # Write any failing requests to the cache.
49 cache = open(CACHE_FILE, "w+b")
50 cache.write("\n".join(set(lines_to_retry)))
51 cache.close()
52
53 # Print any errors, and if there was a fatal error, it should be an exception.
54 for error in errors:
55 print error
56 if fatal_error:
57 print "Multiple failures uploading to dashboard."
58 print "@@@STEP_EXCEPTION@@@"
59
60 def _GetResultsJson(logname, lines, master, system, test, url, stdio_url):
61 results_to_add = []
62 bot = system
63 graph = logname.replace("-summary.dat", "")
64 for line in lines:
65 data = json.loads(line)
66 revision = data["rev"]
67 for (trace, values) in data["traces"].iteritems():
68 # TODO(sullivan): Handle special trace names:
69 # Reference builds
70 # by_url builds
71 test_path = "%s/%s/%s" % (test, graph, trace)
72 if graph == trace:
73 test_path = "%s/%s" % (test, graph)
74 result = {
75 "master": master,
76 "bot": system,
77 "test": test_path,
78 "revision": revision,
79 "value": values[0],
80 "error": values[1],
81 }
82 if "webkit_rev" in data and data["webkit_rev"] != "undefined":
83 result["supplemental_columns"] = {"r_webkit_rev": data["webkit_rev"]}
84 if stdio_url:
85 result["supplemental_columns"] = {"s_stdio_url": stdio_url}
86 results_to_add.append(result)
87 _PrintLinkStep(url, master, bot, test_path, revision)
88 return json.dumps(results_to_add)
89
90 def _SendResultsJson(url, results_json):
91 data = urllib.urlencode({"data": results_json})
92 req = urllib2.Request(url + SEND_RESULTS_PATH, data)
93 try:
94 urllib2.urlopen(req)
95 except urllib2.HTTPError, e:
96 return "HTTPError: %d for JSON %s\n" % (e.code, results_json)
97 except urllib2.URLError, e:
98 return "URLError: %s for JSON %s\n" % (str(e.reason), results_json)
99 except httplib.HTTPException, e:
100 return "HTTPException for JSON %s\n" % results_json
101 return None
102
103 def _PrintLinkStep(url, master, bot, test_path, revision):
104 results_link = url + RESULTS_LINK_PATH % (
105 urllib.quote(master),
106 urllib.quote(bot),
107 urllib.quote(test_path),
108 revision)
109 print "@@@STEP_LINK@%s@%s@@@" % ("Results Dashboard", results_link)
OLDNEW
« no previous file with comments | « no previous file | scripts/slave/runtest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698