Add a page to show the latest evaluations for the entire server
This commit is contained in:
@ -15,7 +15,8 @@ our @EXPORT = qw(
|
||||
getPrimaryBuildTotal
|
||||
getViewResult getLatestSuccessfulViewResult
|
||||
jobsetOverview removeAsciiEscapes getDrvLogPath logContents
|
||||
getMainOutput);
|
||||
getMainOutput
|
||||
getEvals);
|
||||
|
||||
|
||||
sub getHydraHome {
|
||||
@ -287,4 +288,61 @@ sub getMainOutput {
|
||||
}
|
||||
|
||||
|
||||
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, $input
|
||||
if !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];
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
Reference in New Issue
Block a user