Last active
January 18, 2017 21:13
-
-
Save RedBeard0531/cdcdce1689643ba1fa2fe4786cd28263 to your computer and use it in GitHub Desktop.
Crappy js to paste into console
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Compact Waterfall Summary | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1 | |
// @description Make it Smaller | |
// @author Mathias Stearn | |
// @match https://evergreen.mongodb.com/waterfall/* | |
// @grant none | |
// ==/UserScript== | |
// vim: sts=2 sw=2: | |
(function() { | |
'use strict'; | |
var taskStatuses = {}; | |
function makeRow(versions, row, rowIx) { | |
var out = | |
`<tr><td><a href='/build_variant/${project}/${row.build_variant.id}'>${row.build_variant.display_name}</a>`; | |
for (var version of versions) { | |
out += `<td> `; | |
var build = row.builds[version.ids[0]]; | |
if (build === undefined) | |
continue; | |
// out += `<!-- ${JSON.stringify(build)} -->`; | |
out += '<div class="collapsed-build">'; | |
for (var status in build.taskStatusCount) { | |
var count = build.taskStatusCount[status]; | |
if (count === 0) | |
continue; | |
const statusMap = { | |
succeeded : 'success', | |
timed_out : 'system-failed', | |
started : 'dispatched', | |
}; | |
status = status in statusMap ? statusMap[status] : status; | |
out += | |
`<a href='/build/${build.id}' status='${status}' class='task-summary ${status}'>${count}</a>`; | |
} | |
out += | |
`</div><div row=${rowIx} buildid='${version.ids[0]}' class="active-build needs-fill" style="display: none">`; | |
if (1) { | |
// out += JSON.stringify({tasks : build.tasks}) | |
} else { | |
for (var task of build.tasks) { | |
out += | |
`<a href='/task/${task.id}' class='waterfall-box ${build.id} ${taskStatusClass(task)}' title='${task.display_name}'></a>`; | |
// out += `<!-- ${JSON.stringify(task)} -->`; | |
} | |
} | |
out += '</div>'; | |
} | |
return out; | |
} | |
function makeHeader(versions) { | |
var out = '<tr><th> '; | |
for (var version of versions) { | |
out += '<th>'; | |
for (var i = 0; i < version.messages.length; i++) { | |
var message = version.messages[i]; | |
if (message.length > 120) { | |
message = message.substr(0, 120) + '...'; | |
} | |
message = message.replace(/SERVER-\d+/, '<a href=https://jira.mongodb.org/browse/$&>$&</a>'); | |
out += ` | |
<div>${new Date(version.create_times[i]).toLocaleString()}</div> | |
<div> | |
<a href='/version/${version.ids[i]}'>${version.revisions[i].substr(0,6)}</a> | |
<a href='https://github.com/mongodb/mongo/commit/${version.revisions[i]}'>(github)</a> | |
${version.authors[i]} | |
</div> | |
<div>${message}</div>`; | |
if (i != version.messages.length-1) out += '<hr>'; | |
} | |
} | |
return out; | |
} | |
function makeTable(versions, rows) { | |
var out = | |
`<p class="garbage"><b>Click the blank spots on a row to toggle more details</b> | |
<button class="garbage">Toggle inactives</button> | |
<table class="garbage" border="solid" style="width: 100%; table-layout: fixed">` + | |
makeHeader(versions); | |
var ix = 0; | |
for (var row of rows) { | |
out += makeRow(versions, row, ix++); | |
} | |
out += '</table>'; | |
return out; | |
} | |
$('.garbage').remove(); | |
$('#root') | |
.prepend(makeTable(window.serverData.versions, window.serverData.rows)); | |
$('table.garbage').find('.inactive').hide(); | |
window.HIDE_INACTIVES = true; | |
$('button.garbage') | |
.click(function() { | |
$('table.garbage').find('.inactive').toggle(); | |
window.HIDE_INACTIVES = !window.HIDE_INACTIVES; | |
}); | |
$($('.btn-group')[0].cloneNode(true)).insertAfter($('button.garbage')); | |
$('table.garbage tr') | |
.click(function() { | |
$(this) | |
.find('.active-build') | |
.each(function() { | |
var elem = $(this); | |
if (elem.hasClass('needs-fill')) { | |
var buildid = this.attributes.buildid.value; | |
var row = this.attributes.row.value; | |
var tasks = window.serverData.rows[row].builds[buildid].tasks; | |
tasks = tasks.map(task => React.createElement(Task, { | |
task : task, | |
currentTime : window.serverData.current_time, | |
})); | |
ReactDOM.render(React.createElement('div', {}, tasks), this); | |
if (window.HIDE_INACTIVES) { | |
elem.find('.inactive').hide(); | |
} | |
} | |
elem.toggle(); | |
}); | |
}); | |
return 'success'; | |
// Your code here... | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment