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

Side by Side Diff: Tools/GardeningServer/scripts/builders.js

Issue 402603007: Get sheriff-o-matic data from auto-sheriff.appspot.com. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: address review comments Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 var builders = builders || {};
27
28 (function() {
29
30 var kWebKitTestsStepNames = ['webkit_tests', 'layout-test'];
31 var kCrashedOrHungOutputMarker = 'crashed or hung';
32
33 function urlForBuildInfo(builderName, buildNumber)
34 {
35 return config.buildConsoleURL + '/json/builders/' + encodeURIComponent(build erName) + '/builds/' + encodeURIComponent(buildNumber);
36 }
37
38 function didFail(step)
39 {
40 if (kWebKitTestsStepNames.indexOf(step.name) != -1) {
41 // run-webkit-tests fails to generate test coverage when it crashes or h angs.
42 // FIXME: Do build.webkit.org bots output this marker when the tests fai l to run?
43 return step.text.indexOf(kCrashedOrHungOutputMarker) != -1;
44 }
45 // The first item in step.results is the success of the step:
46 // 0 == pass, 1 == warning, 2 == fail
47 return step.results[0] == 2;
48 }
49
50 function failingSteps(buildInfo)
51 {
52 return buildInfo.steps.filter(didFail);
53 }
54
55 function mostRecentCompletedBuildNumber(individualBuilderStatus)
56 {
57 if (!individualBuilderStatus)
58 return null;
59
60 for (var i = individualBuilderStatus.cachedBuilds.length - 1; i >= 0; --i) {
61 var buildNumber = individualBuilderStatus.cachedBuilds[i];
62 if (individualBuilderStatus.currentBuilds.indexOf(buildNumber) == -1)
63 return buildNumber;
64 }
65
66 return null;
67 }
68
69 var g_buildInfoCache = new base.AsynchronousCache(function(key) {
70 var explodedKey = key.split('\n');
71 return net.json(urlForBuildInfo(explodedKey[0], explodedKey[1]));
72 });
73
74 builders.clearBuildInfoCache = function()
75 {
76 g_buildInfoCache.clear();
77 };
78
79 function fetchMostRecentBuildInfoByBuilder()
80 {
81 var buildInfoByBuilder = {};
82 var requestPromises = [];
83 return net.json(config.buildConsoleURL + '/json/builders').then(function(bui lderStatus) {
84 var builderNames = Object.keys(builderStatus);
85 builderNames.forEach(function(builderName) {
86 if (!config.builderApplies(builderName))
87 return;
88
89 var buildNumber = mostRecentCompletedBuildNumber(builderStatus[build erName]);
90 if (!buildNumber)
91 return;
92
93 requestPromises.push(g_buildInfoCache.get(builderName + '\n' + build Number)
94 .then(function(buildInfo) {
95 buildInfoByBuilder[builderName] = buildInfo ;
96 }));
97 });
98
99 return Promise.all(requestPromises).then(function() {
100 return buildInfoByBuilder;
101 });
102 });
103 }
104
105 builders.buildersFailingNonLayoutTests = function()
106 {
107 return fetchMostRecentBuildInfoByBuilder().then(function(buildInfoByBuilder) {
108 var failureList = {};
109 Object.keys(buildInfoByBuilder, function(builderName, buildInfo) {
110 if (!buildInfo)
111 return;
112 var failures = failingSteps(buildInfo);
113 if (failures.length)
114 failureList[builderName] = failures.map(function(failure) { retu rn failure.name; });
115 });
116 return failureList;
117 });
118 };
119
120 builders.mostRecentBuildForBuilder = function(builderName) {
121 return net.json(config.buildConsoleURL + '/json/builders/' + builderName).th en(function(builderStatus) {
122 var cachedBuilds = builderStatus.cachedBuilds;
123 var mostRecentBuild = Math.max.apply(Math, cachedBuilds);
124 return mostRecentBuild;
125 });
126 };
127
128 })();
OLDNEW
« no previous file with comments | « Tools/GardeningServer/scripts/base.js ('k') | Tools/GardeningServer/scripts/builders_unittests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698