VH5ZABDRP565VZIG55YHNYYPST53NQ2J6YM362NSLXCAHI5WPH4AC JZVRK5QJGPDT7HNQLC2UOJRG6V6QO4NJJ5V5QEMQ6VUTUIQWHG5AC TFK74CQRYCOR2RAUZ6LATA3IJVR7QCWSPCMTXCJPPDPIRS7D5UTQC Q4VDOA762MDHLJKNJMPLHFYRRACCT3DQXF66ZTVMETZCR52B72OQC 3HZY24CX4U2TO74HOY4YX3LBJIYF4DLXHCIY7J2RASAC4COMSMZAC UMFB2767NMAG46NAG3XHMYQMCLF5TMVN46SST4AM2CFUEMNZH3WQC HQGXL4MXGHICQ3IRRQUR6KQHS2RKVOTDKQ5ZETXHQ56DANR2YADQC KG5AMUMGZA53FMA35K3KYOPJTNG3BKWDFWDPVXJ6XGG2GJJRI2LAC RSEGBU6CIEDRNTL7R6Q7RF2IZGCN3HH6VTPGFBKD77LSHEUD6EKAC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC RWFCW6ZNIE24XTEQUK5Y37K42BQER7EDGSSD4GQNFTGO5V4TY72QC KJC7RKIEGIR62HPUILVCORKOFYTIAVNPHU3U2CDS36ZEQA7T7UBAC HFJPPMTU45LWGNLX2V3JXBP2VPK2W6PPONF4TUSQAAH7ARDAD5HAC AZCCANUBA5NBQCU5EHKCNDLEUS5VPXSSVZVUKGKGJLUNYIGSJAYQC 3TL5XENEDRHHYOTZUC5IUCVPCPOQJ56M25WJYBKJ5PX7772BIO3QC AFEKITYDRS6BTHHBUAELN2GSHP4VDZPVH2FVA23NF3IURVDHJY7AC D6ET5EQ6WOFRB3CVN5M3BWB3M3QUHRMGP2DKX4G6XZKUSWOM6N2QC U4TD3AIQXBJFFUORTMIC4IHZTVBORRKL2TZ2FSP4G665ECZOEMNAC HRAFVVOEGQJQS4XQNZSMNYN2SUZGKEGPSJUDZUBMI2IN32WFNQ4QC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLAC 2GK5DOU7ODF4WBSN3QTD3WIO52VTL2LOAXKGCDEMMAQPTEO4A4HAC BDSD2JLV4V4I52SE7MCZLYNDC4XU27ZNH7TYKLT7CA7YR5WRMQBAC 4WZQW2N6NJSIKSK7DCOV2YVEG5C45LLUM2FCCZRLISUXUGMBGF6QC IK53RV4VGOHLCZGQCCIKPB45M3C7M7YMNBOJFBGZJ4LWIZNU4QNQC 2VBQRQ2QUNM3ZC7I7WAXYSUVPP52IY2KLE4CVS3E4MAHL2T42KKQC 2JQ7WEFMU5IPCUKLGRLVVT4MYMKVHJDZVMOOOPL6K5RLEZ532LGQC JARRBLZDQ2JZWY7IUVPTOT7WJMBPMLFLF2MGLVGOYROAAISYGLSAC FPK5LF53CFUEKFYJ3IYXT4UTVC6IITWJOCFATMC4PLHEUP5SIEAAC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC PZL3SZM3U3BYJX2RGYXC6NMBG7WQHFWHSYDYXZ7Q5VZA3EDYVPIQC QL55ECJ6KMMBUOWQ6LKSOVN7L43CH4S6SPE2AQ3VX3KSGC32RP4AC }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];
$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)
}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)
}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];