diff --git a/src/lib/Hydra/Controller/Root.pm b/src/lib/Hydra/Controller/Root.pm index 822b7ad8..f921ff9e 100644 --- a/src/lib/Hydra/Controller/Root.pm +++ b/src/lib/Hydra/Controller/Root.pm @@ -293,6 +293,30 @@ sub evals :Local Args(0) { } +sub steps :Local Args(0) { + my ($self, $c) = @_; + + $c->stash->{template} = 'steps.tt'; + + my $page = int($c->req->param('page') || "1") || 1; + + my $resultsPerPage = 20; + + $c->stash->{page} = $page; + $c->stash->{resultsPerPage} = $resultsPerPage; + $c->stash->{steps} = [ $c->model('DB::BuildSteps')->search( + { starttime => { '!=', undef }, + stoptime => { '!=', undef } + }, + { order_by => [ "stoptime desc" ], + rows => $resultsPerPage, + offset => ($page - 1) * $resultsPerPage + }) ]; + + $c->stash->{total} = approxTableSize($c, "IndexBuildStepsOnStopTime"); +} + + sub search :Local Args(0) { my ($self, $c) = @_; $c->stash->{template} = 'search.tt'; @@ -340,9 +364,9 @@ sub search :Local Args(0) { $c->stash->{buildsdrv} = [ $c->model('DB::Builds')->search( { "drvpath" => trim($query) }, { order_by => ["id desc"] } ) ]; - } + sub log :Local :Args(1) { my ($self, $c, $path) = @_; diff --git a/src/lib/Hydra/Helper/CatalystUtils.pm b/src/lib/Hydra/Helper/CatalystUtils.pm index 35e15927..d31b3f53 100644 --- a/src/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/lib/Hydra/Helper/CatalystUtils.pm @@ -23,6 +23,7 @@ our @EXPORT = qw( showStatus getResponsibleAuthors setCacheHeaders + approxTableSize ); @@ -296,4 +297,11 @@ sub setCacheHeaders { } +sub approxTableSize { + my ($c, $name) = @_; + return $c->model('DB')->schema->storage->dbh->selectrow_hashref( + "select reltuples::int from pg_class where relname = lower(?)", { }, $name)->{"reltuples"}; +} + + 1; diff --git a/src/root/build.tt b/src/root/build.tt index 160fca7e..9ecd5cd6 100644 --- a/src/root/build.tt +++ b/src/root/build.tt @@ -45,7 +45,7 @@ INCLUDE renderDuration duration = curTime - step.starttime; END %] -
Showing steps [% (page - 1) * resultsPerPage + 1 %] - [% (page - 1) +* resultsPerPage + steps.size %] of about [% total %] in +order of descending finish time.
+ ++ | What | +Job | +Build | +Step | +When | +Duration | +Machine | +
---|---|---|---|---|---|---|---|
[% INCLUDE renderBuildStatusIcon buildstatus=step.status size=16 %] | +[% step.drvpath.match('-(.*).drv').0 %] | +[% INCLUDE renderFullJobNameOfBuild build=step.build %] | +[% step.build.id %] | +[% step.stepnr %] | +[% INCLUDE renderRelativeDate timestamp=step.stoptime %] | +[% INCLUDE renderDuration duration = step.stoptime - step.starttime %] | +[% INCLUDE renderMachineName machine=step.machine %] | +