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

Side by Side Diff: configs/chromium/master/public_html/reliability.js

Issue 648353002: Remove Skia's forked buildbot code (Closed) Base URL: https://skia.googlesource.com/buildbot.git@master
Patch Set: Fix launch_slaves, remove more stuff Created 6 years, 2 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
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Use the JSON functionality to parse a json string, and fallback to
6 // the eval method is JSON is not supported by the browser.
7 function parseJSON(data) {
8 if (typeof (JSON) !== 'undefined' &&
9 typeof (JSON.parse) === 'function') {
10 return JSON.parse(data);
11 } else {
12 return eval('(' + data + ')');
13 }
14 }
15
16 // Return the name associated with a buildbot result code.
17 function getResultName(result) {
18 if (result == 0) {
19 return 'success';
20 } else if (result == 2) {
21 return 'failure';
22 } else {
23 return 'exception';
24 }
25 }
26
27 // Parse the JSON of the reliability builder page and return the list of recent
28 // builds, newest first.
29 function parseReliability(xmlHttp) {
30 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
31 var reliabilityData = parseJSON(xmlHttp.responseText);
32 cachedBuilds = reliabilityData['cachedBuilds'];
33 cachedBuilds.sort();
34 cachedBuilds.reverse();
35 return cachedBuilds;
36 }
37
38 return null;
39 }
40
41 // Parse the JSON of a reliability build and return it.
42 function parseBuild(xmlHttp) {
43 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
44 return parseJSON(xmlHttp.responseText);
45 }
46 return null;
47 }
48
49 // Parse the stdio from a reliability build and return the crash results.
50 // NOTE: This function is highly dependent on the format of the text generated
51 // by the reliability script. It will break if the format changes.
52 function parseStdio(xmlHttp) {
53 var buildResults = {};
54 buildResults.webCrash = null;
55 buildResults.webCount = null;
56 buildResults.uiCrash = null;
57 buildResults.uiCount = null;
58
59 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
60 lines = xmlHttp.responseText.split('\n');
61 for (var i = 0; i < lines.length; i++) {
62 var re = new RegExp('\\bsuccess: (\\d+); crashes: (\\d+); ' +
63 'crash dumps: (\\d+); timeout: (\\d+)\\b');
64 var match = re.exec(lines[i]);
65 if (match != null) {
66 if (buildResults.webCrash == null) {
67 buildResults.webCrash = match[2];
68 buildResults.webCount = match[1];
69 } else {
70 buildResults.uiCrash = match[2];
71 buildResults.uiCount = match[1];
72 }
73 }
74 }
75 }
76 return buildResults;
77 }
78
79 function displayReliability() {
80 var xmlHttp = new XMLHttpRequest();
81 var jsonPath = '../chromium/json/builders/Win%20Reliability';
82 var buildPath = '../chromium/builders/Win%20Reliability/builds/';
83 // NOTE: This will break if the name of the step changes.
84 var stepLog = '/steps/reliability%3A%20partial%20result%20of%20current%20' +
85 'build/logs/stdio';
86
87 // Get the main reliability page.
88 xmlHttp.open('GET', jsonPath, false);
89 xmlHttp.send(null);
90 var cachedBuilds = parseReliability(xmlHttp);
91
92 // Information we need to get from the builds.
93 var lastBuild = null;
94 var lastSuccess = null;
95 var lastResult = null;
96
97 // Iterate through all the builds to find the last one that is finished and
98 // the last green build.
99 if (cachedBuilds != null) {
100 for (var i = 0; i < cachedBuilds.length; i++) {
101 xmlHttp.open('GET', jsonPath + '/builds/' + cachedBuilds[i], false);
102 xmlHttp.send(null);
103 var currentBuild = parseBuild(xmlHttp);
104
105 if (currentBuild != null) {
106 if (lastBuild == null && currentBuild['results'] != null) {
107 lastBuild = currentBuild;
108 lastResult = getResultName(currentBuild['results']);
109 }
110
111 if (currentBuild['results'] == 0) {
112 lastSuccess = currentBuild;
113 }
114 }
115
116 if (lastBuild != null && lastSuccess != null) {
117 break;
118 }
119 }
120 }
121
122 // Information we need to get from the last finished build.
123 var buildResults = null;
124 var lastLog = null;
125
126 // Fetch the crash count.
127 if (lastBuild != null) {
128 lastLog = buildPath + lastBuild['number'] + stepLog;
129 xmlHttp.open('GET', lastLog, false);
130 xmlHttp.send(null);
131 buildResults = parseStdio(xmlHttp);
132 }
133
134 var topBox = document.getElementById('ReliabilityTop');
135 var bottomBox = document.getElementById('ReliabilityBottom');
136
137 // Update the top box.
138 if (lastBuild == null || buildResults.webCrash == null ||
139 buildResults.uiCrash == null) {
140 // No information about the current build.
141 topBox.className = 'exception';
142 topBox.innerHTML = '<p style="margin-bottom: 25px; margin-top: 20px">' +
143 'stats<br>not available</p>';
144 } else {
145 // TODO(nsylvain): Get full range.
146 var rev = lastBuild['sourceStamp']['revision'];
147 var revisionRange = rev + ' : ' + rev;
148 var webUrl = 'http://chromebot/buildsummary?id=buildbot_' + rev + '_ext';
149 var webCrashStr = buildResults.webCrash + ' / ' +
150 buildResults.webCount + ' URLs';
151 var uiUrl = 'http://chromebot/buildsummary?id=ui_buildbot_' + rev;
152 var uiCrashStr = buildResults.uiCrash + ' / ' +
153 buildResults.uiCount + ' UI Ops';
154
155 var text = '<p style="margin-bottom: 7px; margin-top: 2px;">' +
156 '<a href="' + lastLog + '">' + revisionRange + '</a>' +
157 '<br><br>Crashes:<br>' +
158 '<a href="' + webUrl + '">' + webCrashStr + '</a><br>' +
159 '<a href="' + uiUrl + '">' + uiCrashStr + '</a></p>';
160
161 topBox.className = lastResult;
162 topBox.innerHTML = text;
163 }
164
165 // Update the bottom box.
166 if (lastResult == 'success') {
167 var d = new Date();
168 var diff_ms = d.getTime() - (lastBuild['times'][1] * 1000);
169 var diff_minute = parseInt(diff_ms / 1000 / 60);
170
171 bottomBox.className = 'success';
172 bottomBox.innerHTML = diff_minute + ' minutes ago';
173 } else if (lastSuccess != null) {
174 var rev = lastSuccess['sourceStamp']['revision'];
175 var lastGreenLog = buildPath + lastSuccess['number'] + stepLog;
176 var text = 'Last green: <a href="' + lastGreenLog + '">' + rev + '</a>';
177
178 bottomBox.className = 'success'
179 bottomBox.innerHTML = text;
180 } else {
181 bottomBox.className = topBox.className;
182 bottomBox.innerHTML = '&nbsp;';
183 }
184 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698