* Unify rendering of finished and scheduled builds.

This commit is contained in:
Eelco Dolstra 2008-11-26 17:43:45 +00:00
parent b7e03351cb
commit fa042e04ae
6 changed files with 74 additions and 93 deletions

View file

@ -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;

View file

@ -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 %]

View file

@ -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 %]

View file

@ -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 %]

View file

@ -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>

View file

@ -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;
} }