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

Side by Side Diff: Tools/GardeningServer/model/ct-failures.html

Issue 555263004: Add hung bots to sheriff-o-matic view (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add a basic test Created 6 years, 3 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
1 <!-- 1 <!--
2 Copyright 2014 The Chromium Authors. All rights reserved. 2 Copyright 2014 The Chromium Authors. All rights reserved.
3 Use of this source code is governed by a BSD-style license that can be 3 Use of this source code is governed by a BSD-style license that can be
4 found in the LICENSE file. 4 found in the LICENSE file.
5 --> 5 -->
6 6
7 <link rel="import" href="../lib/net.html"> 7 <link rel="import" href="../lib/net.html">
8 <link rel="import" href="../lib/update-util.html"> 8 <link rel="import" href="../lib/update-util.html">
9 <link rel="import" href="ct-builder-revisions.html"> 9 <link rel="import" href="ct-builder-revisions.html">
10 <link rel="import" href="ct-failure.html"> 10 <link rel="import" href="ct-failure.html">
11 <link rel="import" href="ct-failure-group.html"> 11 <link rel="import" href="ct-failure-group.html">
12 <link rel="import" href="ct-builder-failure-group-data.html">
12 <link rel="import" href="ct-sheriff-failure-group-data.html"> 13 <link rel="import" href="ct-sheriff-failure-group-data.html">
13 <link rel="import" href="ct-trooper-failure-group-data.html"> 14 <link rel="import" href="ct-trooper-failure-group-data.html">
14 <link rel="import" href="ct-commit-list.html"> 15 <link rel="import" href="ct-commit-list.html">
15 16
16 <script> 17 <script>
17 function CTFailures(commitLog) { 18 function CTFailures(commitLog) {
18 this.commitLog = commitLog; 19 this.commitLog = commitLog;
19 this.builderLatestRevisions = null; 20 this.builderLatestInfo = null;
20 // Maps a tree id to an array of CTFailureGroups within that tree. 21 // Maps a tree id to an array of CTFailureGroups within that tree.
21 this.failures = null; 22 this.failures = null;
22 this.lastUpdateDate = null; 23 this.lastUpdateDate = null;
23 } 24 }
24 25
25 (function() { 26 (function() {
26 'use strict'; 27 'use strict';
27 28
28 // FIXME: This could potentially move onto CTSheriffFailureGroupData as it isn't relevant to 29 // FIXME: This could potentially move onto CTSheriffFailureGroupData as it isn't relevant to
29 // trooper failures. 30 // trooper failures.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 }; 87 };
87 88
88 CTFailures.prototype.update = function() { 89 CTFailures.prototype.update = function() {
89 var annotationPromise = CTFailureGroup.fetchAnnotations(); 90 var annotationPromise = CTFailureGroup.fetchAnnotations();
90 return Promise.all([annotationPromise, net.json('http://sheriff-o-matic.appspo t.com/alerts'), 91 return Promise.all([annotationPromise, net.json('http://sheriff-o-matic.appspo t.com/alerts'),
91 net.json('http://trooper-o-matic.appspot.com/alerts')]).then(function(data _array) { 92 net.json('http://trooper-o-matic.appspot.com/alerts')]).then(function(data _array) {
92 var annotations = data_array[0]; 93 var annotations = data_array[0];
93 var sheriff_data = data_array[1]; 94 var sheriff_data = data_array[1];
94 var trooper_data = data_array[2]; 95 var trooper_data = data_array[2];
95 96
96 // FIXME: Don't special-case the blink master. 97 this.builderLatestInfo = {};
97 this.builderLatestRevisions = new CTBuilderRevisions(sheriff_data.latest_bui lder_info['chromium.webkit']); 98
99 Object.keys(sheriff_data.latest_builder_info, function (master, data) {
100 this.builderLatestInfo[master] = new CTBuilderRevisions(data);
ojan 2014/09/10 00:40:03 Do we need CTBuilderRevisions at all anymore? Can
101 }.bind(this));
98 var newFailures = {}; 102 var newFailures = {};
99 this.lastUpdateDate = new Date(sheriff_data.date * 1000); 103 this.lastUpdateDate = new Date(sheriff_data.date * 1000);
100 this._mungeAlerts(sheriff_data.alerts); 104 this._mungeAlerts(sheriff_data.alerts);
101 // FIXME: Change builder_alerts to expose the alerts as a map instead of an array. 105 // FIXME: Change builder_alerts to expose the alerts as a map instead of an array.
102 var alertsByKey = {} 106 var alertsByKey = {}
103 sheriff_data.alerts.forEach(function(alert) { 107 sheriff_data.alerts.forEach(function(alert) {
104 alertsByKey[alert.key] = alert; 108 alertsByKey[alert.key] = alert;
105 }); 109 });
106 // Update |failures| with the appropriate CTFailureGroup's for each 110 // Update |failures| with the appropriate CTFailureGroup's for each
107 // tree. 111 // tree.
108 sheriff_data.range_groups.forEach(function(rangeGroup) { 112 sheriff_data.range_groups.forEach(function(rangeGroup) {
109 this._processFailuresForRangeGroup(newFailures, rangeGroup, alertsByKey, a nnotations); 113 this._processFailuresForRangeGroup(newFailures, rangeGroup, alertsByKey, a nnotations);
110 }.bind(this)); 114 }.bind(this));
111 // Sort failure groups so that newer failures are shown at the top 115 // Sort failure groups so that newer failures are shown at the top
112 // of the UI. 116 // of the UI.
117
113 Object.keys(newFailures, function (tree, failuresByTree) { 118 Object.keys(newFailures, function (tree, failuresByTree) {
114 failuresByTree.sort(this._failureByTreeListComparator.bind(this, tree)); 119 failuresByTree.sort(this._failureByTreeListComparator.bind(this, tree));
115 }.bind(this)); 120 }.bind(this));
121
122 this._checkBuildersForFailures(newFailures);
116 this.failures = updateUtil.updateLeft(this.failures, newFailures); 123 this.failures = updateUtil.updateLeft(this.failures, newFailures);
117 this._processTrooperFailures(trooper_data); 124 this._processTrooperFailures(trooper_data);
118 }.bind(this)); 125 }.bind(this));
119 }; 126 };
120 127
121 CTFailures.prototype._failureComparator = function(a, b) { 128 CTFailures.prototype._failureComparator = function(a, b) {
122 if (a.step > b.step) 129 if (a.step > b.step)
123 return 1; 130 return 1;
124 if (a.step < b.step) 131 if (a.step < b.step)
125 return -1 132 return -1
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 }) 201 })
195 treeFailures.sort(this._failureComparator); 202 treeFailures.sort(this._failureComparator);
196 203
197 if (!newFailures[tree]) 204 if (!newFailures[tree])
198 newFailures[tree] = []; 205 newFailures[tree] = [];
199 var commitList = new CTCommitList(this.commitLog, rangeGroup.likely_revision s); 206 var commitList = new CTCommitList(this.commitLog, rangeGroup.likely_revision s);
200 newFailures[tree].push(new CTFailureGroup(rangeGroup.sort_key, new CTSheriff FailureGroupData(treeFailures, commitList))); 207 newFailures[tree].push(new CTFailureGroup(rangeGroup.sort_key, new CTSheriff FailureGroupData(treeFailures, commitList)));
201 }.bind(this)); 208 }.bind(this));
202 }; 209 };
203 210
211 CTFailures.prototype._checkBuildersForFailures = function(newFailures) {
212 var timeThreshold = {
213 "idle": null, // FIXME: We should alert if a bot is idle with jobs queued
214 "building": 3 * 60 * 60,
215 "offline": 0.5 * 60 * 60
216 };
217 Object.keys(this.builderLatestInfo, function(master, builders) {
ojan 2014/09/10 00:40:03 In retrospect, we should move all this logic to bu
218 // FIXME: Don't special case blink and chromium.webkit
219 if (master == "chromium.webkit") {
220 var tree = "blink";
221 Object.keys(builders, function(builder, builderInfo) {
222 var timeSinceLastUpdate = (this.lastUpdateDate.valueOf() / 1000) - buil derInfo.lastUpdateTime;
223 var alert;
224 // If we add more failing criteria, this should be made into a loop over functions that handle the different errors.
225 if (timeSinceLastUpdate > timeThreshold[builderInfo.state] && builderInf o.state != "idle")
226 alert = (timeSinceLastUpdate / (60 * 60)).toFixed(2) + " hours ";
227
228 var resultsByBuilder = { };
229 resultsByBuilder[builder] = {
230 "actual": "UNKNOWN",
231 "masterUrl": "http://build.chromium.org/p/" + master
232 }
233 if (alert) {
234 if (!newFailures[tree])
235 newFailures[tree] = [];
236 var key = master + "::" + builder + "::" + builderInfo.state;
237 var failure = new CTFailure(builderInfo.state, alert, resultsByBuilder );
238 var data = new CTBuilderFailureGroupData(failure, builder, "http://bui ld.chromium.org/p/" + master + "/builders/" + builder);
239 newFailures[tree].push(new CTFailureGroup(key, data, 'builders'));
240 }
241 }.bind(this));
242 }
243 }.bind(this));
244 };
245
204 })(); 246 })();
247
205 </script> 248 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698