Add a page to show the latest evaluations for the entire server
[?]
Feb 21, 2013, 4:27 PM
VH5ZABDRP565VZIG55YHNYYPST53NQ2J6YM362NSLXCAHI5WPH4ACDependencies
- [2]
JZVRK5QJGroup some menu items together under a "Status" menu - [3]
TFK74CQRPut job status on a separate tab - [4]
36M6DGITShow the runtime/build dependencies in the build page - [5]
WRIU3S5E* UI for cloning builds (not functional yet). - [6]
U4TD3AIQAdd support for viewing jobset evaluations - [7]
XDDCO6CH* hydra: add dependency list with links to logfiles - [8]
SMTMFEKEhydra: add missing templates - [9]
RWFCW6ZNIn the jobset evals lists, show what inputs changed between consecutive evals - [10]
D6ET5EQ6Doh - [11]
KJC7RKIESpeed up the jobset eval list a bit - [12]
L7NUCXKSShow new and removed jobs - [13]
3JBUMW3Eforgot to commit a file - [14]
3PNG7NIBRemove trailing whitespace - [15]
2JQ7WEFM - [16]
UMFB2767Hydra/64: Leaving number of builds empty gives DBIx error - [17]
C2DCO6AS - [18]
AZCCANUBMissing part of aaacf9eda36f5cdcc77cec20d6f49fbb6f925105 - [19]
6FRLEP4Pfirst try for timeline of last 24 hours in hydra - [20]
4WZQW2N6Fix indentation and get rid of some unnecessary whitespace in the output - [21]
PMNWRTGJAdd multiple output support - [22]
KG5AMUMGCleanup - [23]
SZYDW2DGhydra: added some user admin - [24]
QL55ECJ6- adapted ui for hydra, more in line with nixos.org website - [25]
5EIPRLDDexport logContents - [26]
RBNQKATL* Adding persistant releases. A release is a named set of builds. - [27]
TNMOG2ZQIndentation - [28]
6QRHXIM3* Speed up the jobset index page. Especially the query to get the - [29]
JY7BXXOPSplit viewing and editing a project - [30]
JARRBLZDBootstrapify the Hydra forms (except the project and jobset edit pages) - [31]
AFEKITYDFix some warnings about undefined values - [32]
KXGOUX7P* Creating releases. - [33]
AS2OXLRM* Editing releases. - [34]
OX6NYJDVSplit viewing and editing a jobset - [35]
EFWN7JBV* Added a status page that shows all the currently executing build steps. - [36]
5DSDXORDhydra: missing plain.tt - [37]
P5X4P6VK* Renaming "release sets" to "views" (not finished yet). Having - [38]
OR5SJ42YShow releases in a tab on the project page - [39]
FV2M6MOThydra: use autoconf/-make - [40]
K22TMPH5Make the info tables less compressed - [41]
3TL5XENEDifferent icons (darker red) for cancelled builds. Fixes #25. - [42]
2BUX775I* More release -> view. - [43]
NEQ4BISOAdd bootstrap.zip - [44]
HQGXL4MXAdd validation for project and jobset names - [45]
75XUS62Y* Added a page to quickly see all failed builds and failed evaluations - [46]
TRDGNILTRemove unused file - [47]
R2PON6R7Allow non-admin users to see the machine status page - [48]
2AUODJBT - [49]
D5QIOJGP* Move everything up one directory. - [50]
J5UVLXOK* Start of a basic Catalyst web interface. - [51]
HFJPPMTUCleanup - [52]
SMM4HQTP* Put actions related to builds under /build (e.g. /log/<buildid> - [53]
FPK5LF53* Put the project-related actions in a separate controller. Put the - [54]
Q4VDOA76Replace last 5 builds on jobset page with last 5 evaluations. Moved hide/unhide and evaluate options to jobset topmenu. - [55]
ZWCTAZGLadded newsitems, added some admin options to clear various caches. - [56]
ODNCGFQ5* Improved the navigation bar: don't include all projects (since that - [57]
RSEGBU6CHydra/20: Jobset clone feature - [58]
2VBQRQ2QFix some XML well-formedness problems - [59]
PZL3SZM3Give every page a consistent title - [60]
BDSD2JLV* Speed up manifest generation. - [*]
3HZY24CX* Make jobsets viewable under - [*]
HRAFVVOEmake logo configurable via HYDRA_LOGO env var - [*]
2GK5DOU7* Downloading closures. - [*]
IK53RV4V
Change contents
- replacement in src/lib/Hydra/Controller/Jobset.pm at line 52
$c->stash->{evals} = getEvals($self, $c, 0, 10);$c->stash->{evals} = getEvals($self, $c, scalar $c->stash->{jobset}->jobsetevals, 0, 10); - edit in src/lib/Hydra/Controller/Jobset.pm at line 303[4.608]→[4.53:113](∅→∅),[4.1555]→[4.53:113](∅→∅),[4.113]→[4.1996:1997](∅→∅),[4.1997]→[4.58:116](∅→∅),[4.58]→[4.58:116](∅→∅),[4.116]→[4.1998:2029](∅→∅),[4.2029]→[4.0:74](∅→∅),[4.200]→[4.0:74](∅→∅),[4.74]→[4.158:177](∅→∅),[4.158]→[4.158:177](∅→∅),[4.177]→[4.0:25](∅→∅),[4.25]→[4.75:89](∅→∅),[4.89]→[4.25:78](∅→∅),[4.25]→[4.25:78](∅→∅),[4.78]→[4.258:288](∅→∅),[4.258]→[4.258:288](∅→∅),[4.288]→[4.90:126](∅→∅),[4.126]→[4.0:439](∅→∅),[4.343]→[4.323:381](∅→∅),[4.439]→[4.323:381](∅→∅),[4.323]→[4.323:381](∅→∅),[4.381]→[4.79:137](∅→∅),[4.137]→[4.0:139](∅→∅),[4.139]→[4.138:177](∅→∅),[4.572]→[4.138:177](∅→∅),[4.177]→[4.948:1201](∅→∅),[4.958]→[4.948:1201](∅→∅),[4.1201]→[4.2030:2186](∅→∅),[4.157]→[4.265:389](∅→∅),[4.2186]→[4.265:389](∅→∅),[4.265]→[4.265:389](∅→∅),[4.122]→[4.1323:1333](∅→∅),[4.389]→[4.1323:1333](∅→∅),[4.1323]→[4.1323:1333](∅→∅),[4.1333]→[4.178:212](∅→∅),[4.212]→[4.344:345](∅→∅),[4.345]→[4.2187:2203](∅→∅),[4.362]→[4.232:259](∅→∅),[4.2203]→[4.232:259](∅→∅),[4.232]→[4.232:259](∅→∅),[4.399]→[4.399:483](∅→∅),[4.483]→[4.440:511](∅→∅),[4.511]→[4.549:627](∅→∅),[4.549]→[4.549:627](∅→∅),[4.627]→[4.368:433](∅→∅),[4.368]→[4.368:433](∅→∅),[4.433]→[4.628:685](∅→∅),[4.433]→[4.1465:1471](∅→∅),[4.685]→[4.1465:1471](∅→∅),[4.1465]→[4.1465:1471](∅→∅),[4.1471]→[4.2204:2205](∅→∅),[4.2205]→[4.686:713](∅→∅),[4.1476]→[4.686:713](∅→∅)
}sub getEvals {my ($self, $c, $offset, $rows) = @_;my @evals = $c->stash->{jobset}->jobsetevals->search({ hasnewbuilds => 1 },{ order_by => "id DESC", rows => $rows + 1, offset => $offset });my @res = ();my $prevInputs = [];my $prev;for (my $n = scalar @evals - 1; $n >= 0; $n--) {my $cur = $evals[$n];# Get stats for this eval.my $nrScheduled;my $nrSucceeded = $cur->nrsucceeded;if (defined $nrSucceeded) {$nrScheduled = 0;} else {$nrScheduled = $cur->builds->search({finished => 0})->count;$nrSucceeded = $cur->builds->search({finished => 1, buildStatus => 0})->count;if ($nrScheduled == 0) {$cur->update({nrsucceeded => $nrSucceeded});}}# Compute what inputs changed between each eval.my $curInputs = [ $cur->jobsetevalinputs->search({ -or => [ -and => [ uri => { '!=' => undef }, revision => { '!=' => undef }], dependency => { '!=' => undef }], altNr => 0 },{ order_by => "name" }) ];my @changedInputs;my %prevInputsHash;$prevInputsHash{$_->name} = $_ foreach @{$prevInputs};foreach my $input (@{$curInputs}) {my $p = $prevInputsHash{$input->name};push @changedInputs, $inputif !defined $p || ($input->revision || "") ne ($p->revision || "") || $input->type ne $p->type || ($input->uri || "") ne ($p->uri || "") ||( defined $input->dependency && defined $p->dependency && $input->dependency->id ne $p->dependency->id);}$prevInputs = $curInputs;my $e ={ eval => $cur, nrScheduled => $nrScheduled, nrSucceeded => $nrSucceeded, nrFailed => $cur->nrbuilds - $nrSucceeded - $nrScheduled, diff => defined $prev ? $nrSucceeded - $prev->{nrSucceeded} : 0, changedInputs => [ @changedInputs ]};push @res, $e if $n < $rows;$prev = $e;}return [reverse @res]; - replacement in src/lib/Hydra/Controller/Jobset.pm at line 309
$c->stash->{template} = 'jobset-evals.tt';$c->stash->{template} = 'evals.tt'; - edit in src/lib/Hydra/Controller/Jobset.pm at line 314
my $evals = $c->stash->{jobset}->jobsetevals; - replacement in src/lib/Hydra/Controller/Jobset.pm at line 319
$c->stash->{total} = $c->stash->{jobset}->jobsetevals->search({hasnewbuilds => 1})->count;$c->stash->{evals} = getEvals($self, $c, ($page - 1) * $resultsPerPage, $resultsPerPage)$c->stash->{total} = $evals->search({hasnewbuilds => 1})->count;$c->stash->{evals} = getEvals($self, $c, $evals, ($page - 1) * $resultsPerPage, $resultsPerPage) - edit in src/lib/Hydra/Controller/Root.pm at line 281
}sub evals :Local Args(0) {my ($self, $c) = @_;$c->stash->{template} = 'evals.tt';my $page = int($c->req->param('page') || "1") || 1;my $resultsPerPage = 20;my $evals = $c->model('DB::JobsetEvals');$c->stash->{page} = $page;$c->stash->{resultsPerPage} = $resultsPerPage;$c->stash->{total} = $evals->search({hasnewbuilds => 1})->count;$c->stash->{evals} = getEvals($self, $c, $evals, ($page - 1) * $resultsPerPage, $resultsPerPage) - replacement in src/lib/Hydra/Helper/Nix.pm at line 18
getMainOutput);getMainOutputgetEvals); - edit in src/lib/Hydra/Helper/Nix.pm at line 288
}sub getEvals {my ($self, $c, $evals, $offset, $rows) = @_;my @evals = $evals->search({ hasnewbuilds => 1 },{ order_by => "id DESC", rows => $rows + 1, offset => $offset });my @res = ();my $prevInputs = [];my $prev;for (my $n = scalar @evals - 1; $n >= 0; $n--) {my $cur = $evals[$n];# Get stats for this eval.my $nrScheduled;my $nrSucceeded = $cur->nrsucceeded;if (defined $nrSucceeded) {$nrScheduled = 0;} else {$nrScheduled = $cur->builds->search({finished => 0})->count;$nrSucceeded = $cur->builds->search({finished => 1, buildStatus => 0})->count;if ($nrScheduled == 0) {$cur->update({nrsucceeded => $nrSucceeded});}}# Compute what inputs changed between each eval.my $curInputs = [ $cur->jobsetevalinputs->search({ -or => [ -and => [ uri => { '!=' => undef }, revision => { '!=' => undef }], dependency => { '!=' => undef }], altNr => 0 },{ order_by => "name" }) ];my @changedInputs;my %prevInputsHash;$prevInputsHash{$_->name} = $_ foreach @{$prevInputs};foreach my $input (@{$curInputs}) {my $p = $prevInputsHash{$input->name};push @changedInputs, $inputif !defined $p || ($input->revision || "") ne ($p->revision || "") || $input->type ne $p->type || ($input->uri || "") ne ($p->uri || "") ||( defined $input->dependency && defined $p->dependency && $input->dependency->id ne $p->dependency->id);}$prevInputs = $curInputs;my $e ={ eval => $cur, nrScheduled => $nrScheduled, nrSucceeded => $nrSucceeded, nrFailed => $cur->nrbuilds - $nrSucceeded - $nrScheduled, diff => defined $prev ? $nrSucceeded - $prev->{nrSucceeded} : 0, changedInputs => [ @changedInputs ]};push @res, $e if $n < $rows;$prev = $e;}return [reverse @res]; - edit in src/root/common.tt at line 387
[% IF !jobset %]<th>Jobset</th>[% END %] - replacement in src/root/common.tt at line 391
<th>Date</th><th style="width: 10em">Date</th> - replacement in src/root/common.tt at line 393
<th colspan='2'>Success</th><th colspan='2' style="width: 25em">Success</th> - edit in src/root/common.tt at line 401
[% IF !jobset %]<td>[% INCLUDE renderFullJobsetName project=eval.get_column('project') jobset=eval.get_column('jobset') %]</td>[% END %] - replacement in src/root/common.tt at line 411
sep=',';sep=', '; - edit in src/root/error.tt at line 3[4.1258]→[4.8554:8555](∅→∅),[4.7190]→[4.8554:8555](∅→∅),[4.8554]→[4.8554:8555](∅→∅),[4.8555]→[4.11465:11525](∅→∅)
<p>I'm very sorry, but the following error(s) occurred:</p> - edit in src/root/error.tt at line 4
<ul> - replacement in src/root/error.tt at line 5
<li><div class="error-msg">[% HTML.escape(error) %]</div></li><div class="alert alert-error">[% HTML.escape(error) %]</div> - edit in src/root/error.tt at line 7
</ul> - file move: jobset-evals.tt → evals.tt
- replacement in src/root/evals.tt at line 1
[% WRAPPER layout.tt title="Evaluations of jobset $project.name:$jobset.name" %][% WRAPPER layout.tt title=(jobset ? "Evaluations of jobset $project.name:$jobset.name" : "Latest evaluations") %] - edit in src/root/topbar.tt at line 40
uri = c.uri_for(c.controller('Root').action_for('evals'))title = "Latest evaluations" %][% INCLUDE makeLink