2013-10-14 18:07:26 +00:00
|
|
|
[% WRAPPER layout.tt
|
|
|
|
title="Job $project.name:$jobset.name:$job.name"
|
|
|
|
starUri=c.uri_for(c.controller('Job').action_for('star'), c.req.captures)
|
|
|
|
%]
|
2009-04-02 16:15:57 +00:00
|
|
|
[% PROCESS common.tt %]
|
2012-04-02 11:12:39 +00:00
|
|
|
[% hideProjectName=1 hideJobsetName=1 hideJobName=1 %]
|
2009-04-02 16:15:57 +00:00
|
|
|
|
2014-10-07 09:23:15 +00:00
|
|
|
[% INCLUDE includeFlot %]
|
|
|
|
|
2014-04-08 16:49:10 +00:00
|
|
|
[% IF !jobExists(job) %]
|
|
|
|
<div class="alert alert-warning">This job is not a member of the <a
|
|
|
|
href="[%c.uri_for('/jobset' project.name jobset.name
|
|
|
|
'evals')%]">latest evaluation</a> of its jobset. This means it was
|
|
|
|
removed or had an evaluation error.</div>
|
|
|
|
[% END %]
|
|
|
|
|
2013-02-22 10:55:06 +00:00
|
|
|
<ul class="nav nav-tabs">
|
|
|
|
<li class="active"><a href="#tabs-status" data-toggle="tab">Status</a></li>
|
2013-08-26 16:58:04 +00:00
|
|
|
[% IF constituentJobs.size > 0 %]
|
|
|
|
<li><a href="#tabs-constituents" data-toggle="tab">Constituents</a></li>
|
|
|
|
[% END %]
|
2014-10-07 09:23:15 +00:00
|
|
|
<li><a href="#tabs-charts" data-toggle="tab">Charts</a></li>
|
2013-02-22 12:00:40 +00:00
|
|
|
<li><a href="#tabs-links" data-toggle="tab">Links</a></li>
|
2013-02-22 10:55:06 +00:00
|
|
|
</ul>
|
|
|
|
|
2012-04-12 18:12:07 +00:00
|
|
|
<div id="generic-tabs" class="tab-content">
|
2013-01-22 13:41:02 +00:00
|
|
|
|
2013-02-22 10:55:06 +00:00
|
|
|
<div id="tabs-status" class="tab-pane active">
|
2013-02-22 12:00:40 +00:00
|
|
|
[% IF lastBuilds.size != 0 %]
|
2014-01-10 14:20:19 +00:00
|
|
|
<h3>Latest builds</h3>
|
2013-10-03 13:14:55 +00:00
|
|
|
[% INCLUDE renderBuildList builds=lastBuilds
|
2013-02-22 12:00:40 +00:00
|
|
|
linkToAll=c.uri_for('/job' project.name jobset.name job.name 'all') %]
|
|
|
|
[% END %]
|
2013-02-22 11:51:00 +00:00
|
|
|
[% IF queuedBuilds.size != 0 %]
|
|
|
|
<h3>Queued builds</h3>
|
|
|
|
[% INCLUDE renderBuildList builds=queuedBuilds showSchedulingInfo=1 hideResultInfo=1 %]
|
2013-02-22 10:55:06 +00:00
|
|
|
[% END %]
|
|
|
|
</div>
|
|
|
|
|
2013-08-26 16:58:04 +00:00
|
|
|
[% IF constituentJobs.size > 0 %]
|
|
|
|
|
|
|
|
<div id="tabs-constituents" class="tab-pane">
|
|
|
|
|
2013-08-27 13:45:27 +00:00
|
|
|
<div class="well well-small">This is an <em>aggregate job</em>:
|
|
|
|
its success or failure is determined entirely by the result of
|
|
|
|
building its <em>constituent jobs</em>. The table below shows
|
|
|
|
the status of each constituent job for the [%
|
|
|
|
aggregates.keys.size %] most recent builds of the
|
|
|
|
aggregate.</div>
|
2013-10-03 13:14:55 +00:00
|
|
|
|
2013-08-27 13:45:27 +00:00
|
|
|
[% aggs = aggregates.keys.nsort.reverse %]
|
|
|
|
<table class="table table-striped table-condensed table-header-rotated">
|
2013-10-03 13:14:55 +00:00
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th>Job</th>
|
|
|
|
[% FOREACH agg IN aggs %]
|
|
|
|
<th class="rotate-45">
|
|
|
|
[% agg_ = aggregates.$agg %]
|
|
|
|
<div><span class="[% agg_.build.finished == 0 ? "text-info" : (agg_.build.buildstatus == 0 ? "text-success" : "text-warning") %] override-link">
|
|
|
|
<a href="[% c.uri_for('/build' agg) %]">[% agg %]</a>
|
|
|
|
</span></div></th>
|
|
|
|
[% END %]
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
[% FOREACH j IN constituentJobs %]
|
|
|
|
<tr>
|
|
|
|
<th style="width: 1em;">[% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %]</th>
|
|
|
|
[% FOREACH agg IN aggs %]
|
|
|
|
<td>
|
|
|
|
[% r = aggregates.$agg.constituents.$j; IF r.id %]
|
|
|
|
<a href="[% c.uri_for('/build' r.id) %]">
|
|
|
|
[% INCLUDE renderBuildStatusIcon size=16 build=r %]
|
|
|
|
</a>
|
|
|
|
[% END %]
|
|
|
|
</td>
|
|
|
|
[% END %]
|
|
|
|
</tr>
|
|
|
|
[% END %]
|
|
|
|
</tbody>
|
2013-08-26 16:58:04 +00:00
|
|
|
</table>
|
|
|
|
|
|
|
|
</div>
|
2013-10-03 13:14:55 +00:00
|
|
|
|
2013-08-26 16:58:04 +00:00
|
|
|
[% END %]
|
|
|
|
|
2014-10-07 09:23:15 +00:00
|
|
|
<div id="tabs-charts" class="tab-pane">
|
|
|
|
|
|
|
|
<h3>Closure size (in MiB)</h3>
|
|
|
|
|
|
|
|
<div id="placeholder" style="width: 1000px; height: 400px;"></div>
|
|
|
|
<div id="overview" style="margin-top: 20px; margin-left: 50px; margin-right: 50px; width: 900px; height: 100px"></div>
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
$(function() {
|
|
|
|
requestJSON({
|
|
|
|
url: "[%c.uri_for('/job' project.name jobset.name job.name 'closure-sizes')%]",
|
|
|
|
success: function(data) {
|
|
|
|
var ids = [];
|
|
|
|
var d = [];
|
|
|
|
var max = 0;
|
|
|
|
data.forEach(function(x) {
|
|
|
|
var t = x.timestamp * 1000;
|
|
|
|
ids[t] = x.id;
|
|
|
|
d.push([t, x.value / (1024.0 * 1024.0)]);
|
|
|
|
max = Math.max(t, max);
|
|
|
|
});
|
|
|
|
|
|
|
|
var options = {
|
|
|
|
xaxis: { mode: "time" },
|
|
|
|
yaxis: { min: 0 },
|
|
|
|
selection: { mode: "x" },
|
|
|
|
points: { show: true },
|
|
|
|
lines: { show: true },
|
|
|
|
grid: {
|
|
|
|
clickable: true,
|
|
|
|
hoverable: true,
|
|
|
|
hoverFill: '#444',
|
|
|
|
hoverRadius: 4,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
var plot = $.plot($("#placeholder"), [d], options);
|
|
|
|
|
|
|
|
var overview = $.plot($("#overview"), [d], {
|
|
|
|
series: {
|
|
|
|
lines: { show: true, lineWidth: 1 },
|
|
|
|
shadowSize: 0
|
|
|
|
},
|
|
|
|
xaxis: { ticks: [], mode: "time" },
|
|
|
|
yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },
|
|
|
|
selection: { mode: "x" }
|
|
|
|
});
|
|
|
|
|
|
|
|
// now connect the two
|
|
|
|
|
|
|
|
$("#placeholder").bind("plotselected", function (event, ranges) {
|
|
|
|
// do the zooming
|
|
|
|
plot = $.plot($("#placeholder"), [d],
|
|
|
|
$.extend(true, {}, options, {
|
|
|
|
xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }
|
|
|
|
}));
|
|
|
|
|
|
|
|
// don't fire event on the overview to prevent eternal loop
|
|
|
|
overview.setSelection(ranges, true);
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#overview").bind("plotselected", function (event, ranges) {
|
|
|
|
plot.setSelection(ranges);
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#placeholder").bind("plotclick", function (e, pos, item) {
|
|
|
|
if (item) {
|
|
|
|
plot.highlight(item.series, item.datapoint);
|
|
|
|
buildid = data[item.dataIndex].id;
|
|
|
|
window.location = "/build/"+buildid;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Zoom in to the last two months by default.
|
|
|
|
plot.setSelection({ xaxis: { from: max - 60 * 24 * 60 * 60 * 1000, to: max } });
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
2013-02-22 12:00:40 +00:00
|
|
|
<div id="tabs-links" class="tab-pane">
|
2013-02-22 10:55:06 +00:00
|
|
|
<ul>
|
2013-02-22 11:00:32 +00:00
|
|
|
<li><a href="[% c.uri_for('/job' project.name jobset.name job.name 'latest') %]">Latest successful build</a></li>
|
2013-08-12 20:17:04 +00:00
|
|
|
<li><a href="[% c.uri_for('/job' project.name jobset.name job.name 'latest-finished') %]">Latest successful build from a finished evaluation</a></li>
|
2013-02-22 10:55:06 +00:00
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
|
2010-02-05 14:48:22 +00:00
|
|
|
</div>
|
2009-04-02 16:15:57 +00:00
|
|
|
|
|
|
|
[% END %]
|