forked from lix-project/hydra
* Unify rendering of finished and scheduled builds.
This commit is contained in:
parent
b7e03351cb
commit
fa042e04ae
|
@ -18,7 +18,7 @@ my $relPathRE = "(?:$pathCompRE(?:\/$pathCompRE)*)";
|
||||||
|
|
||||||
|
|
||||||
sub begin :Private {
|
sub begin :Private {
|
||||||
my ( $self, $c ) = @_;
|
my ($self, $c) = @_;
|
||||||
$c->stash->{projects} = [$c->model('DB::Projects')->search({}, {order_by => 'displayname'})];
|
$c->stash->{projects} = [$c->model('DB::Projects')->search({}, {order_by => 'displayname'})];
|
||||||
$c->stash->{curUri} = $c->request->uri;
|
$c->stash->{curUri} = $c->request->uri;
|
||||||
}
|
}
|
||||||
|
@ -47,10 +47,8 @@ sub getBuild {
|
||||||
|
|
||||||
|
|
||||||
sub index :Path :Args(0) {
|
sub index :Path :Args(0) {
|
||||||
my ( $self, $c ) = @_;
|
my ($self, $c) = @_;
|
||||||
$c->stash->{template} = 'index.tt';
|
$c->stash->{template} = 'index.tt';
|
||||||
$c->stash->{scheduled} = [$c->model('DB::Builds')->search(
|
|
||||||
{finished => 0}, {join => 'schedulingInfo'})]; # !!!
|
|
||||||
$c->stash->{allBuilds} = [$c->model('DB::Builds')->search(
|
$c->stash->{allBuilds} = [$c->model('DB::Builds')->search(
|
||||||
{finished => 1}, {order_by => "timestamp DESC"})];
|
{finished => 1}, {order_by => "timestamp DESC"})];
|
||||||
# Get the latest finished build for each unique job.
|
# Get the latest finished build for each unique job.
|
||||||
|
@ -63,6 +61,14 @@ sub index :Path :Args(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub queue :Local {
|
||||||
|
my ($self, $c) = @_;
|
||||||
|
$c->stash->{template} = 'queue.tt';
|
||||||
|
$c->stash->{queue} = [$c->model('DB::Builds')->search(
|
||||||
|
{finished => 0}, {join => 'schedulingInfo', order_by => ["priority DESC", "timestamp"]})];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub updateProject {
|
sub updateProject {
|
||||||
my ($c, $project) = @_;
|
my ($c, $project) = @_;
|
||||||
|
|
||||||
|
@ -184,7 +190,7 @@ sub updateProject {
|
||||||
|
|
||||||
|
|
||||||
sub project :Local {
|
sub project :Local {
|
||||||
my ( $self, $c, $projectName, $subcommand ) = @_;
|
my ($self, $c, $projectName, $subcommand) = @_;
|
||||||
$c->stash->{template} = 'project.tt';
|
$c->stash->{template} = 'project.tt';
|
||||||
|
|
||||||
(my $project) = $c->model('DB::Projects')->search({ name => $projectName });
|
(my $project) = $c->model('DB::Projects')->search({ name => $projectName });
|
||||||
|
@ -239,7 +245,7 @@ sub project :Local {
|
||||||
|
|
||||||
|
|
||||||
sub createproject :Local {
|
sub createproject :Local {
|
||||||
my ( $self, $c, $subcommand ) = @_;
|
my ($self, $c, $subcommand) = @_;
|
||||||
|
|
||||||
if (defined $subcommand && $subcommand eq "submit") {
|
if (defined $subcommand && $subcommand eq "submit") {
|
||||||
eval {
|
eval {
|
||||||
|
@ -265,7 +271,7 @@ sub createproject :Local {
|
||||||
|
|
||||||
|
|
||||||
sub job :Local {
|
sub job :Local {
|
||||||
my ( $self, $c, $projectName, $jobName ) = @_;
|
my ($self, $c, $projectName, $jobName) = @_;
|
||||||
$c->stash->{template} = 'job.tt';
|
$c->stash->{template} = 'job.tt';
|
||||||
|
|
||||||
(my $project) = $c->model('DB::Projects')->search({ name => $projectName });
|
(my $project) = $c->model('DB::Projects')->search({ name => $projectName });
|
||||||
|
@ -280,13 +286,13 @@ sub job :Local {
|
||||||
|
|
||||||
|
|
||||||
sub default :Path {
|
sub default :Path {
|
||||||
my ( $self, $c ) = @_;
|
my ($self, $c) = @_;
|
||||||
error($c, "Page not found.");
|
error($c, "Page not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub build :Local {
|
sub build :Local {
|
||||||
my ( $self, $c, $id ) = @_;
|
my ($self, $c, $id) = @_;
|
||||||
|
|
||||||
my $build = getBuild($c, $id);
|
my $build = getBuild($c, $id);
|
||||||
return error($c, "Build with ID $id doesn't exist.") if !defined $build;
|
return error($c, "Build with ID $id doesn't exist.") if !defined $build;
|
||||||
|
@ -307,7 +313,7 @@ sub build :Local {
|
||||||
|
|
||||||
|
|
||||||
sub log :Local {
|
sub log :Local {
|
||||||
my ( $self, $c, $id ) = @_;
|
my ($self, $c, $id) = @_;
|
||||||
|
|
||||||
my $build = getBuild($c, $id);
|
my $build = getBuild($c, $id);
|
||||||
return error($c, "Build $id doesn't exist.") if !defined $build;
|
return error($c, "Build $id doesn't exist.") if !defined $build;
|
||||||
|
@ -323,7 +329,7 @@ sub log :Local {
|
||||||
|
|
||||||
|
|
||||||
sub nixlog :Local {
|
sub nixlog :Local {
|
||||||
my ( $self, $c, $id, $stepnr ) = @_;
|
my ($self, $c, $id, $stepnr) = @_;
|
||||||
|
|
||||||
my $build = getBuild($c, $id);
|
my $build = getBuild($c, $id);
|
||||||
return error($c, "Build with ID $id doesn't exist.") if !defined $build;
|
return error($c, "Build with ID $id doesn't exist.") if !defined $build;
|
||||||
|
@ -356,7 +362,7 @@ sub loadLog {
|
||||||
|
|
||||||
|
|
||||||
sub download :Local {
|
sub download :Local {
|
||||||
my ( $self, $c, $id, $productnr, $filename, @path ) = @_;
|
my ($self, $c, $id, $productnr, $filename, @path) = @_;
|
||||||
|
|
||||||
my $build = getBuild($c, $id);
|
my $build = getBuild($c, $id);
|
||||||
return error($c, "Build with ID $id doesn't exist.") if !defined $build;
|
return error($c, "Build with ID $id doesn't exist.") if !defined $build;
|
||||||
|
@ -390,7 +396,7 @@ sub download :Local {
|
||||||
|
|
||||||
|
|
||||||
sub closure :Local {
|
sub closure :Local {
|
||||||
my ( $self, $c, $buildId, $productnr ) = @_;
|
my ($self, $c, $buildId, $productnr) = @_;
|
||||||
|
|
||||||
my $build = getBuild($c, $buildId);
|
my $build = getBuild($c, $buildId);
|
||||||
return error($c, "Build with ID $buildId doesn't exist.") if !defined $build;
|
return error($c, "Build with ID $buildId doesn't exist.") if !defined $build;
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
[% USE date %]
|
||||||
|
|
||||||
|
|
||||||
[% inputTypes =
|
[% inputTypes =
|
||||||
{ "svn" = "Subversion checkout"
|
{ "svn" = "Subversion checkout"
|
||||||
, "cvs" = "CVS checkout"
|
, "cvs" = "CVS checkout"
|
||||||
|
@ -9,8 +12,53 @@
|
||||||
}
|
}
|
||||||
%]
|
%]
|
||||||
|
|
||||||
[% USE date %]
|
|
||||||
|
|
||||||
[% BLOCK renderDateTime %]
|
[% BLOCK renderDateTime %]
|
||||||
[% date.format(timestamp, '%Y-%m-%d %H:%M:%S') -%]
|
[% date.format(timestamp, '%Y-%m-%d %H:%M:%S') -%]
|
||||||
|
[% END %]
|
||||||
|
|
||||||
|
|
||||||
|
[% BLOCK renderBuildList %]
|
||||||
|
<table class="tablesorter">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
[% IF !hideResultInfo %]
|
||||||
|
<th></th>
|
||||||
|
[% END %]
|
||||||
|
<th>#</th>
|
||||||
|
[% IF showSchedulingInfo %]
|
||||||
|
<th>Priority</th>
|
||||||
|
[% END %]
|
||||||
|
<th>Project</th>
|
||||||
|
<th>Job</th>
|
||||||
|
<th>System</th>
|
||||||
|
<th>Timestamp</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
[% FOREACH build IN builds -%]
|
||||||
|
<tr [% IF build.schedulingInfo.busy %]class="runningJob"[% END %] >
|
||||||
|
[% IF !hideResultInfo %]
|
||||||
|
<td>
|
||||||
|
[% IF build.resultInfo.buildstatus == 0 %]
|
||||||
|
<img src="/static/images/success.gif" />
|
||||||
|
[% ELSE %]
|
||||||
|
<img src="/static/images/failure.gif" />
|
||||||
|
[% END %]
|
||||||
|
</td>
|
||||||
|
[% END %]
|
||||||
|
<td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td>
|
||||||
|
[% IF showSchedulingInfo %]
|
||||||
|
<td>[% build.schedulingInfo.priority %]</td>
|
||||||
|
[% END %]
|
||||||
|
<td><a href="[% c.uri_for('/project' build.project.name) %]"><tt>[% build.project.name %]</tt></a></td>
|
||||||
|
<td><a href="[% c.uri_for('/job' build.project.name build.attrname) %]"><tt>[% build.attrname %]</tt></a></td>
|
||||||
|
<td><tt>[% build.system %]</tt></td>
|
||||||
|
<td>[% date.format(build.timestamp, '%Y-%m-%d %H:%M:%S') %]</td>
|
||||||
|
<td>[% build.description %]</td>
|
||||||
|
</tr>
|
||||||
|
[% END -%]
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
[% END %]
|
[% END %]
|
|
@ -1,70 +1,22 @@
|
||||||
[% WRAPPER layout.tt title="Hydra Overview" %]
|
[% WRAPPER layout.tt title="Hydra Overview" %]
|
||||||
[% USE date %]
|
[% PROCESS common.tt %]
|
||||||
|
|
||||||
|
|
||||||
<h1>Hydra Overview</h1>
|
<h1>Hydra Overview</h1>
|
||||||
|
|
||||||
|
|
||||||
<h2>Queue</h2>
|
|
||||||
|
|
||||||
[% IF scheduled.size == 0 %]
|
|
||||||
|
|
||||||
<p>The queue is empty.</p>
|
|
||||||
|
|
||||||
[% ELSE %]
|
|
||||||
|
|
||||||
<table class="tablesorter">
|
|
||||||
<thead>
|
|
||||||
<tr><th>#</th><th>Priority</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
[% FOREACH build IN scheduled -%]
|
|
||||||
<tr [% IF build.schedulingInfo.busy %]class="runningJob"[% END %] >
|
|
||||||
<td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td>
|
|
||||||
<td>[% build.schedulingInfo.priority %]</td>
|
|
||||||
<td><tt>[% build.project.name %]</tt></td>
|
|
||||||
<td><tt>[% build.attrname %]</tt></td>
|
|
||||||
<td><tt>[% build.system %]</tt></td>
|
|
||||||
<td>[% date.format(build.timestamp, '%Y-%m-%d %H:%M:%S') %]</td>
|
|
||||||
<td>[% build.description %]</td>
|
|
||||||
</tr>
|
|
||||||
[% END -%]
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
[% END %]
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Job status</h2>
|
<h2>Job status</h2>
|
||||||
|
|
||||||
<p>Below are the latest builds for each job.</p>
|
<p>Below are the latest builds for each job.</p>
|
||||||
|
|
||||||
<table class="tablesorter">
|
[% PROCESS renderBuildList builds=latestBuilds %]
|
||||||
<thead>
|
|
||||||
<tr><th></th><th>#</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
[% FOREACH build IN latestBuilds -%]
|
|
||||||
[% INCLUDE "short-build-info.tt" %]
|
|
||||||
[% END -%]
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
<h2>All builds</h2>
|
<h2>All builds</h2>
|
||||||
|
|
||||||
<p>Number of builds: [% allBuilds.size %]</p>
|
<p>Number of builds: [% allBuilds.size %]</p>
|
||||||
|
|
||||||
<table class="tablesorter">
|
[% PROCESS renderBuildList builds=allBuilds %]
|
||||||
<thead>
|
|
||||||
<tr><th></th><th>#</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
[% FOREACH build IN allBuilds -%]
|
|
||||||
[% INCLUDE "short-build-info.tt" %]
|
|
||||||
[% END -%]
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
|
@ -1,16 +1,8 @@
|
||||||
[% WRAPPER layout.tt title="Hydra Overview" %]
|
[% WRAPPER layout.tt title="Hydra Overview" %]
|
||||||
|
[% PROCESS common.tt %]
|
||||||
|
|
||||||
<h1>All builds for job <tt>[% curProject.name %]:[% jobName %]</tt></h1>
|
<h1>All builds for job <tt>[% curProject.name %]:[% jobName %]</tt></h1>
|
||||||
|
|
||||||
<table class="tablesorter">
|
[% PROCESS renderBuildList builds=builds %]
|
||||||
<thead>
|
|
||||||
<tr><th></th><th>Id</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
[% FOREACH build IN builds -%]
|
|
||||||
[% INCLUDE "short-build-info.tt" %]
|
|
||||||
[% END -%]
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
[% USE date %]
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
[% IF build.resultInfo.buildstatus == 0 %]
|
|
||||||
<img src="/static/images/success.gif" />
|
|
||||||
[% ELSE %]
|
|
||||||
<img src="/static/images/failure.gif" />
|
|
||||||
[% END %]
|
|
||||||
</td>
|
|
||||||
<td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td>
|
|
||||||
<td><a href="[% c.uri_for('/project' build.project.name) %]"><tt>[% build.project.name %]</tt></a></td>
|
|
||||||
<td><a href="[% c.uri_for('/job' build.project.name build.attrname) %]"><tt>[% build.attrname %]</tt></a></td>
|
|
||||||
<td><tt>[% build.system %]</tt></td>
|
|
||||||
<td>[% date.format(build.timestamp, '%Y-%m-%d %H:%M:%S') %]</td>
|
|
||||||
<td>[% build.description %]</td>
|
|
||||||
</tr>
|
|
|
@ -185,7 +185,7 @@ ul.productList li {
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.runningJob {
|
.runningJob {
|
||||||
background-color: #ff3030;
|
background-color: #ff3030;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue