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

Unified Diff: Tools/GardeningServer/model/ct-failures.html

Issue 538293002: Refactor CTFailures._processFailuresForRangeGroup. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Tools/GardeningServer/model/ct-failures.html
diff --git a/Tools/GardeningServer/model/ct-failures.html b/Tools/GardeningServer/model/ct-failures.html
index 962708cedf34f7a966caf0e41373fcf07b92c841..c1c063f4f94338d2dc417f2346206b59757249b2 100644
--- a/Tools/GardeningServer/model/ct-failures.html
+++ b/Tools/GardeningServer/model/ct-failures.html
@@ -38,6 +38,9 @@ function CTFailures(commitLog) {
};
}
+(function() {
+'use strict';
+
// Reverse sorting order, if a > b, return a negative number.
CTFailures.prototype._failureByTreeListComparator = function(tree, a, b) {
if (tree === undefined)
@@ -77,6 +80,36 @@ CTFailures.prototype._failureByTreeListComparator = function(tree, a, b) {
return 0;
};
+// Updates the format of the alerts array to be easier to parse.
+CTFailures.prototype._mungeAlerts = function(alerts) {
ojan 2014/09/05 00:56:42 Mind writing basic unit tests for this function? I
Jeffrey Yasskin 2014/09/09 01:00:32 Done.
+ var masterToTree = {};
+ Object.keys(this._trees, function(tree, masters) {
+ masters.forEach(function(master) {
+ masterToTree[master] = tree;
+ });
+ });
+
+ alerts.forEach(function(failure) {
+ // FIXME: Have the server store the actual failure type in a different
+ // field instead of smashing it into the reason.
+ if (failure.failureType) {
+ // The server has been fixed.
ojan 2014/09/05 00:56:42 <3
+ } else {
+ if (failure.reason) {
+ var parts = failure.reason.split(':');
+ failure.reason = parts[0];
+ failure.failureType = parts[1] || 'FAIL';
+ } else {
+ failure.failureType = 'UNKNOWN';
+ }
+ }
+
+ // FIXME: Figure out what tree masters that aren't in masterToTree
+ // we should have.
+ failure.tree = masterToTree[failure.master_url];
+ });
+};
+
CTFailures.prototype.update = function() {
var annotationPromise = CTFailureGroup.fetchAnnotations();
@@ -86,10 +119,15 @@ CTFailures.prototype.update = function() {
this.builderLatestRevisions = new CTBuilderRevisions(data.latest_builder_info['chromium.webkit']);
var newFailures = {};
this.lastUpdateDate = new Date(data.date * 1000);
+ this._mungeAlerts(data.alerts);
+ var alertsByKey = {}
ojan 2014/09/05 00:56:42 Add a FIXME to change builder_alerts to just have
Jeffrey Yasskin 2014/09/09 01:00:33 Done.
+ data.alerts.forEach(function(alert) {
+ alertsByKey[alert.key] = alert;
+ });
// Update |failures| with the appropriate CTFailureGroup's for each
// tree.
data.range_groups.forEach(function(rangeGroup) {
- this._processFailuresForRangeGroup(newFailures, rangeGroup, data.alerts, annotations);
+ this._processFailuresForRangeGroup(newFailures, rangeGroup, alertsByKey, annotations);
}.bind(this));
// Sort failure groups so that newer failures are shown at the top
// of the UI.
@@ -113,83 +151,63 @@ CTFailures.prototype._failureComparator = function(a, b) {
return 0;
};
-CTFailures.prototype._processFailuresForRangeGroup = function(newFailures, rangeGroup, alerts, annotations) {
- var masterToTree = {};
- Object.keys(this._trees, function(tree, masters) {
- masters.forEach(function(master) {
- masterToTree[master] = tree;
- });
- });
-
- // A rangeGroup may be related to multiple alerts (via |failure_keys|). Categorize
- // these failures by reason (cause of failure), so that they can be grouped in the UI
- // (via a CTFailureGroup). Failures will be grouped in |failuresByReason|.
- var failuresByReason = {};
- rangeGroup.failure_keys.forEach(function(failure_key) {
- var failure = alerts.find(function(item) { return item.key == failure_key; });
+function groupFailuresByTreeAndReason(failures, annotations) {
ojan 2014/09/05 00:56:42 Ditto. You'll need to make this a function on CTFa
Jeffrey Yasskin 2014/09/09 01:00:32 To do the refactoring that Elliott asked for in ht
Jeffrey Yasskin 2014/09/09 01:00:33 Tested.
+ var failuresByTree = {};
+ failures.forEach(function(failure) {
// Establish the key to uniquely identify a failure by reason.
- var reason, failureType;
- if (failure.reason) {
- // FIXME: Store the actual failure type in a different field instead of smashing it into the reason.
- var parts = failure.reason.split(':');
- reason = parts[0];
- failureType = parts[1] || 'FAIL';
- } else {
- reason = null;
- failureType = 'UNKNOWN';
- }
-
var failureKey = CTFailure.createKey(failure);
var reasonKey = JSON.stringify({
step: failure.step_name,
- reason: reason,
+ reason: failure.reason,
});
- // FIXME: Figure out what tree masters that aren't in masterToTree
- // we should have.
- var tree = masterToTree[failure.master_url];
-
// FIXME: Use a model class instead of a dumb object.
- if (!failuresByReason[reasonKey])
- failuresByReason[reasonKey] = {};
- if (!failuresByReason[reasonKey][tree])
- failuresByReason[reasonKey][tree] = {};
- failuresByReason[reasonKey][tree][failure.builder_name] = {
+ if (!failuresByTree[failure.tree])
+ failuresByTree[failure.tree] = {};
+ if (!failuresByTree[failure.tree][reasonKey])
+ failuresByTree[failure.tree][reasonKey] = {};
+ failuresByTree[failure.tree][reasonKey][failure.builder_name] = {
key: failureKey,
// FIXME: Rename to failureType.
- actual: failureType,
+ actual: failure.failureType,
lastFailingBuild: failure.last_failing_build,
earliestFailingBuild: failure.failing_build,
masterUrl: failure.master_url,
failingBuildCount: failure.failing_build_count,
annotation: annotations[failureKey],
};
- }.bind(this));
+ });
+ return failuresByTree
+};
+
+CTFailures.prototype._processFailuresForRangeGroup = function(newFailures, rangeGroup, alerts, annotations) {
+ // A rangeGroup may be related to multiple alerts (via |failure_keys|). Categorize
+ // these failures by reason (cause of failure), so that they can be grouped in the UI
+ // (via a CTFailureGroup).
+ var failures = rangeGroup.failure_keys.map(function(failure_key) {
+ return alerts[failure_key];
+ });
+ var failuresByTree = groupFailuresByTreeAndReason(failures, annotations);
- if (!Object.keys(failuresByReason).length)
+ if (Object.isEmpty(failuresByTree))
return;
- // Maps a tree id to a list of CTFailures in that tree.
- var groupedFailures = {};
- Object.keys(failuresByReason, function(reasonKey, resultsByTree) {
- var failure = JSON.parse(reasonKey);
- Object.keys(resultsByTree, function(tree, resultsByBuilder) {
- if (!groupedFailures[tree])
- groupedFailures[tree] = [];
- groupedFailures[tree].push(
+ Object.keys(failuresByTree, function(tree, resultsByReason) {
+ var treeFailures = [];
+ Object.keys(resultsByReason, function(reasonKey, resultsByBuilder) {
+ var failure = JSON.parse(reasonKey);
+ treeFailures.push(
new CTFailure(failure.step, failure.reason, resultsByBuilder));
})
- });
-
- Object.keys(groupedFailures, function(tree, failures) {
- failures.sort(this._failureComparator);
+ treeFailures.sort(this._failureComparator);
if (!newFailures[tree])
newFailures[tree] = [];
var commitList = new CTCommitList(this.commitLog, rangeGroup.likely_revisions);
- newFailures[tree].push(new CTFailureGroup(rangeGroup.sort_key, failures, commitList));
+ newFailures[tree].push(new CTFailureGroup(rangeGroup.sort_key, treeFailures, commitList));
}.bind(this));
};
+})();
</script>
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698