forked from lix-project/hydra
f1e75c8bff
DBIx likes to eagerly select all columns without a way to really tell it so. Therefore, this splits this one large column in to its own table. I'd also like to make "jobsets" use this table too, but that is on hold to stop the bleeding caused by the extreme amount of traffic this is causing.
184 lines
7.8 KiB
Plaintext
184 lines
7.8 KiB
Plaintext
[% WRAPPER layout.tt title="Evaluation $eval.id of jobset $project.name:$jobset.name " %]
|
|
[% PROCESS common.tt %]
|
|
|
|
<div class="btn-group pull-right">
|
|
<a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><i class="icon-white icon-eye-open"></i> Compare to...</a>
|
|
<ul class="dropdown-menu">
|
|
<li><a href="?">Preceding evaluation in this jobset</a></li>
|
|
<li class="divider"></li>
|
|
<li><a href="?compare=-[% 24 * 60 * 60 %]">This jobset <strong>one day</strong> earlier</a></li>
|
|
<li><a href="?compare=-[% 7 * 24 * 60 * 60 %]">This jobset <strong>one week</strong> earlier</a></li>
|
|
<li><a href="?compare=-[% 31 * 24 * 60 * 60 %]">This jobset <strong>one month</strong> earlier</a></li>
|
|
[% IF project.jobsets_rs.count > 1 %]
|
|
<li class="divider"></li>
|
|
[% FOREACH j IN project.jobsets.sort('name'); IF j.name != jobset.name %]
|
|
<li><a href="?compare=[% j.name %]">Jobset <tt>[% project.name %]:[% j.name %]</tt></a></li>
|
|
[% END; END %]
|
|
[% END %]
|
|
</ul>
|
|
</div>
|
|
|
|
<p>This evaluation was performed [% IF eval.flake %]from the flake
|
|
<tt>[%HTML.escape(eval.flake)%]</tt>[%END%] on [% INCLUDE renderDateTime
|
|
timestamp=eval.timestamp %]. Fetching the dependencies took [%
|
|
eval.checkouttime %]s and evaluation took [% eval.evaltime %]s.</p>
|
|
|
|
[% IF otherEval %]
|
|
<p>Comparisons are relative to [% INCLUDE renderFullJobsetName
|
|
project=otherEval.jobset.project.name jobset=otherEval.jobset.name %] evaluation <a href="[%
|
|
c.uri_for(c.controller('JobsetEval').action_for('view'),
|
|
[otherEval.id]) %]">[% otherEval.id %]</a>.</p>
|
|
[% ELSE %]
|
|
<div class="alert">Couldn't find an evaluation to compare to.</div>
|
|
[% END %]
|
|
|
|
<form class="form-search">
|
|
<input name="filter" type="text" class="input-large search-query" placeholder="Search jobs by name..." [% HTML.attributes(value => filter) %]/>
|
|
<input name="compare" type="hidden" [% HTML.attributes(value => otherEval.id) %]/>
|
|
<input name="full" type="hidden" [% HTML.attributes(value => full) %]/>
|
|
</form>
|
|
|
|
<ul class="nav nav-tabs">
|
|
[% IF c.user_exists %]
|
|
<li class="dropdown">
|
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
|
Actions
|
|
<b class="caret"></b>
|
|
</a>
|
|
<ul class="dropdown-menu">
|
|
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('create_jobset'), [eval.id]) %]">Create a jobset from this evaluation</a></li>
|
|
[% IF unfinished.size > 0 %]
|
|
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('cancel'), [eval.id]) %]">Cancel all scheduled builds</a></li>
|
|
[% END %]
|
|
[% IF aborted.size > 0 || stillFail.size > 0 || nowFail.size > 0 %]
|
|
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_failed'), [eval.id]) %]">Restart all failed builds</a></li>
|
|
[% END %]
|
|
[% IF aborted.size > 0 %]
|
|
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_aborted'), [eval.id]) %]">Restart all aborted builds</a></li>
|
|
[% END %]
|
|
[% IF unfinished.size > 0 %]
|
|
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('bump'), [eval.id]) %]">Bump builds to front of queue</a></li>
|
|
[% END %]
|
|
</ul>
|
|
</li>
|
|
[% END %]
|
|
|
|
[% IF aborted.size > 0 %]
|
|
<li><a href="#tabs-aborted" data-toggle="tab"><span class="text-warning">Aborted jobs ([% aborted.size %])</span></a></li>
|
|
[% END %]
|
|
[% IF nowFail.size > 0 %]
|
|
<li><a href="#tabs-now-fail" data-toggle="tab"><span class="text-warning">Newly failing jobs ([% nowFail.size %])</span></a></li>
|
|
[% END %]
|
|
[% IF nowSucceed.size > 0 %]
|
|
<li><a href="#tabs-now-succeed" data-toggle="tab"><span class="text-success">Newly succeeding jobs ([% nowSucceed.size %])</span></a></li>
|
|
[% END %]
|
|
[% IF new.size > 0 %]
|
|
<li><a href="#tabs-new" data-toggle="tab">New jobs ([% new.size %])</a></li>
|
|
[% END %]
|
|
[% IF removed.size > 0 %]
|
|
<li><a href="#tabs-removed" data-toggle="tab">Removed jobs ([% removed.size %])</a></li>
|
|
[% END %]
|
|
[% IF stillFail.size > 0 %]
|
|
<li><a href="#tabs-still-fail" data-toggle="tab">Still failing jobs ([% stillFail.size %])</a></li>
|
|
[% END %]
|
|
[% IF stillSucceed.size > 0 %]
|
|
<li><a href="#tabs-still-succeed" data-toggle="tab">Still succeeding jobs ([% stillSucceed.size %])</a></li>
|
|
[% END %]
|
|
[% IF unfinished.size > 0 %]
|
|
<li><a href="#tabs-unfinished" data-toggle="tab">Queued jobs ([% unfinished.size %])</a></li>
|
|
[% END %]
|
|
<li><a href="#tabs-inputs" data-toggle="tab">Inputs</a></li>
|
|
|
|
[% IF eval.evaluationerror.errormsg %]
|
|
<li><a href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
|
|
[% END %]
|
|
|
|
</ul>
|
|
|
|
[% BLOCK renderSome %]
|
|
[% INCLUDE renderBuildListHeader unsortable=1 %]
|
|
[% size = builds.size; max = full ? size : 250; %]
|
|
[% INCLUDE renderBuildListBody builds=builds.slice(0, (size > max ? max : size) - 1)
|
|
hideProjectName=1 hideJobsetName=1 busy=0 %]
|
|
[% IF size > max; params = c.req.params; params.full = 1 %]
|
|
<tr><td class="centered" colspan="6"><a href="[% c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id], params) %][% tabname %]"><em>([% size - max %] more builds omitted)</em></a></td></tr>
|
|
[% END %]
|
|
[% INCLUDE renderBuildListFooter %]
|
|
[% END %]
|
|
|
|
<div class="tab-content">
|
|
|
|
[% IF eval.evaluationerror.errormsg %]
|
|
<div id="tabs-errors" class="tab-pane">
|
|
<p>Errors occurred at [% INCLUDE renderDateTime timestamp=(eval.evaluationerror.errortime || eval.timestamp) %].</p>
|
|
<pre class="alert alert-error">[% HTML.escape(eval.evaluationerror.errormsg) %]</pre>
|
|
</div>
|
|
[% END %]
|
|
|
|
<div id="tabs-aborted" class="tab-pane">
|
|
[% INCLUDE renderSome builds=aborted tabname="#tabs-aborted" %]
|
|
</div>
|
|
|
|
<div id="tabs-now-fail" class="tab-pane">
|
|
[% INCLUDE renderSome builds=nowFail tabname="#tabs-now-fail" %]
|
|
</div>
|
|
|
|
<div id="tabs-now-succeed" class="tab-pane">
|
|
[% INCLUDE renderSome builds=nowSucceed tabname="#tabs-now-succeed" %]
|
|
</div>
|
|
|
|
<div id="tabs-new" class="tab-pane">
|
|
[% INCLUDE renderSome builds=new tabname="#tabs-new" %]
|
|
</div>
|
|
|
|
<div id="tabs-removed" class="tab-pane">
|
|
<table class="table table-striped table-condensed clickable-rows">
|
|
<thead>
|
|
<tr><th>Job</th><th>System</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
[% size = removed.size; max = full ? size : 250; %]
|
|
[% FOREACH j IN removed.slice(0,(size > max ? max : size) - 1) %]
|
|
<tr>
|
|
<td>[% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.job %]</td>
|
|
<td><tt>[% j.system %]</tt></td>
|
|
</tr>
|
|
[% END %]
|
|
[% IF size > max; params = c.req.params; params.full = 1 %]
|
|
<tr><td class="centered" colspan="2"><a href="[% c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id], params) %]#tabs-removed"><em>([% size - max %] more jobs omitted)</em></a></td></tr>
|
|
[% END %]
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div id="tabs-still-fail" class="tab-pane">
|
|
[% INCLUDE renderSome builds=stillFail tabname="#tabs-still-fail" %]
|
|
</div>
|
|
|
|
<div id="tabs-still-succeed" class="tab-pane">
|
|
[% INCLUDE renderSome builds=stillSucceed tabname="#tabs-still-succeed" %]
|
|
</div>
|
|
|
|
<div id="tabs-unfinished" class="tab-pane">
|
|
[% INCLUDE renderSome builds=unfinished tabname="#tabs-unfinished" %]
|
|
</div>
|
|
|
|
<div id="tabs-inputs" class="tab-pane">
|
|
[% INCLUDE renderInputs inputs=eval.jobsetevalinputs %]
|
|
|
|
[% IF otherEval %]
|
|
<h3>Changes</h3>
|
|
[% INCLUDE renderInputDiff inputs2=eval.jobsetevalinputs inputs1=otherEval.jobsetevalinputs %]
|
|
[% END %]
|
|
</div>
|
|
|
|
[% IF eval.evaluationerror.errormsg %]
|
|
<div id="tabs-errors" class="tab-pane">
|
|
<p>Errors occurred at [% INCLUDE renderDateTime timestamp=(eval.evaluationerror.errortime || eval.timestamp) %].</p>
|
|
<pre class="alert alert-error">[% HTML.escape(eval.evaluationerror.errormsg) %]</pre>
|
|
</div>
|
|
[% END %]
|
|
</div>
|
|
|
|
[% END %]
|