[GOM] Warn when the roll is running behind

This change introduces a UI that appears when the last roll
is getting old. The UI is not shown by default to avoid
visual clutter and its visual attribute matches the urgency
(currently 2 levels: warning / urgent).

Review URL: https://codereview.chromium.org/316033002

git-svn-id: svn://svn.chromium.org/blink/trunk@175634 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 82996c16
......@@ -351,10 +351,26 @@ ui.StatusArea = base.extends('div', {
});
ui.revisionDetails = base.extends('span', {
updateUI: function() {
// We only support 2 levels of visual escalation levels: warning and critical.
warnRollRevisionSpanThreshold: 45,
criticalRollRevisionSpanThreshold: 80,
classNameForUrgencyLevel: function(rollRevisionSpan) {
if (rollRevisionSpan < this.criticalRollRevisionSpanThreshold)
return "warning";
return "critical";
},
updateUI: function(totRevision) {
this.appendChild(document.createElement("br"));
this.appendChild(document.createTextNode('Last roll is to '));
this.appendChild(ui.createLinkNode(trac.changesetURL(this.lastRolledRevision), this.lastRolledRevision));
var rollRevisionSpan = totRevision - this.lastRolledRevision;
// Don't clutter the UI if we haven't run behind.
if (rollRevisionSpan > this.warnRollRevisionSpanThreshold) {
var wrapper = document.createElement("span");
wrapper.className = this.classNameForUrgencyLevel(rollRevisionSpan);
wrapper.appendChild(document.createTextNode("(" + rollRevisionSpan + " revisions behind)"));
this.appendChild(wrapper);
}
this.appendChild(document.createTextNode(', current autoroll '));
if (this.roll) {
var linkText = "" + this.roll.fromRevision + ":" + this.roll.toRevision;
......@@ -424,7 +440,7 @@ ui.revisionDetails = base.extends('span', {
Promise.all([checkout.lastBlinkRollRevision(), rollbot.fetchCurrentRoll()]).then(function(results) {
theSpan.lastRolledRevision = results[0];
theSpan.roll = results[1];
theSpan.updateUI();
theSpan.updateUI(totRevision);
});
}
});
......
......@@ -223,21 +223,27 @@ asyncTest("TreeStatus", 2, function() {
});
});
var currentRoll = {
"results": [
{"messages":[], "base_url":"svn://svn.chromium.org/chrome/trunk/src", "subject":"Blink roll 540:550", "closed":false, "issue":1000}
]
};
function generateRoll(fromRevision, toRevision)
{
return {
"results": [
{"messages":[], "base_url":"svn://svn.chromium.org/chrome/trunk/src", "subject":"Blink roll " + fromRevision + ":" + toRevision, "closed":false, "issue":1000}
]
};
}
asyncTest("RevisionDetails", 2, function() {
asyncTest("RevisionDetailsSmallRoll", 2, function() {
var rollFromRevision = 540;
var rollToRevision = 550;
var simulator = new NetworkSimulator();
simulator.json = function(url)
{
return Promise.resolve(currentRoll);
return Promise.resolve(generateRoll(rollFromRevision, rollToRevision));
}
simulator.get = function (url)
{
return Promise.resolve("540");
return Promise.resolve(rollFromRevision);
}
model.state.resultsByBuilder = {
......@@ -283,4 +289,118 @@ asyncTest("RevisionDetails", 2, function() {
});
});
asyncTest("RevisionDetailsMediumRoll", 2, function() {
var rollFromRevision = 500;
var rollToRevision = 550;
var simulator = new NetworkSimulator();
simulator.json = function(url)
{
return Promise.resolve(generateRoll(rollFromRevision, rollToRevision));
}
simulator.get = function (url)
{
return Promise.resolve(rollFromRevision);
}
model.state.resultsByBuilder = {
"Linux": {
"blink_revision": "554",
}
};
model.state.recentCommits = [
{
"revision": "555",
}];
var revisionDetails;
simulator.runTest(function() {
revisionDetails = ui.revisionDetails();
}).then(function() {
equal(revisionDetails.innerHTML,
'Latest revision processed by every bot: ' +
'<details>' +
'<summary>' +
'<a href="http://src.chromium.org/viewvc/blink?view=rev&amp;revision=554">554' +
'<span id="revisionPopUp">' +
'<table>' +
'<tr>' +
'<td><a href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Linux">Linux</a></td>' +
'<td>554</td>' +
'</tr>' +
'</table>' +
'</span>' +
'</a>' +
'</summary>' +
'<table>' +
'<tr>' +
'<td><a href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Linux">Linux</a></td>' +
'<td>554</td>' +
'</tr>' +
'</table>' +
'</details>' +
', trunk is at <a href="http://src.chromium.org/viewvc/blink?view=rev&amp;revision=555">555</a>' +
'<br>' +
'Last roll is to <a href="http://src.chromium.org/viewvc/blink?view=rev&amp;revision=500">500</a><span class="warning">(55 revisions behind)</span>, current autoroll <a href="https://codereview.chromium.org/1000">500:550</a>');
start();
});
});
asyncTest("RevisionDetailsBigRoll", 2, function() {
var rollFromRevision = 440;
var rollToRevision = 550;
var simulator = new NetworkSimulator();
simulator.json = function(url)
{
return Promise.resolve(generateRoll(rollFromRevision, rollToRevision));
}
simulator.get = function (url)
{
return Promise.resolve(rollFromRevision);
}
model.state.resultsByBuilder = {
"Linux": {
"blink_revision": "554",
}
};
model.state.recentCommits = [
{
"revision": "555",
}];
var revisionDetails;
simulator.runTest(function() {
revisionDetails = ui.revisionDetails();
}).then(function() {
equal(revisionDetails.innerHTML,
'Latest revision processed by every bot: ' +
'<details>' +
'<summary>' +
'<a href="http://src.chromium.org/viewvc/blink?view=rev&amp;revision=554">554' +
'<span id="revisionPopUp">' +
'<table>' +
'<tr>' +
'<td><a href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Linux">Linux</a></td>' +
'<td>554</td>' +
'</tr>' +
'</table>' +
'</span>' +
'</a>' +
'</summary>' +
'<table>' +
'<tr>' +
'<td><a href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Linux">Linux</a></td>' +
'<td>554</td>' +
'</tr>' +
'</table>' +
'</details>' +
', trunk is at <a href="http://src.chromium.org/viewvc/blink?view=rev&amp;revision=555">555</a>' +
'<br>' +
'Last roll is to <a href="http://src.chromium.org/viewvc/blink?view=rev&amp;revision=440">440</a><span class="critical">(115 revisions behind)</span>, current autoroll <a href="https://codereview.chromium.org/1000">440:550</a>');
start();
});
});
})();
......@@ -103,3 +103,19 @@ button.default:hover {
.clear {
clear: both;
}
/*** Visual escalation ***/
.warning {
color: white;
background-color: #ffc343;
font-weight: bold;
font-size: 2em;
}
.critical {
color: white;
background-color: #e98080;
font-weight: bold;
font-size: 3em;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment