The same info is readily available under the most recent jobset eval page.
G2WXEQHE6WCBN25VLO6XF3FJAOCJLMRKYOIQLETGIWTR6ON2AIVAC NRSKJPP4FYTEKWNLVRK2QZDL6P24VJAC6R6NUBVX77JSUEBVRISAC VG4QG336SCZNWAXJERI3N5FO6PUAYFJV24CLI27ADUFPO74RVJKQC AK2UZDS2IRVBZP3GRNZS2SIKMKEFUBPIVSA45EZBH4UYFKWI2HCAC TCHEWSZLG3PX7JFBLYO5ASBYAGZU4TWUYZQGNXPHQ3J7DILQPYGAC FPK5LF53CFUEKFYJ3IYXT4UTVC6IITWJOCFATMC4PLHEUP5SIEAAC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC 3EGKZC3CURTH4S36LMFCU57S42VARSHDAGA4J56RKNPD5VR4FKSQC ZD5AEKWMW6IFFW46BJEFRPXRWMXTKCM4CSES6YTUOY7DEUX3E7JQC HPEG2RHVNHOPB5T4ZRXANIRBMVOVY3B5GFETJRYOTDJFVAYH2TQAC RAKTHYAIX757GPYWCHOE5H5RD3QYKQW3QKLWUIUKPHQ5QGWQXWQQC J7EE2XZAB5EZICAZGZ6DKM4JDMH73A5AJIW6INYMWJHENIGVANQAC AH2YD57S37LRYYP54PI4PVOM63SSOPROQZD2IT7AH5ZSM62XAQCAC LKPVSUCI2AE5OMB7R3KIHWZNBAWNAPMN7VRPQ6ZYDGMF2W54SZIAC 75XUS62YF7OK4S45RCZ5OOASXEBIEDNDBYEEMOCBDHVXV4GA3NLQC SJN2QPWHFYKX7CJMW4XZHI2P2THH7MECZZIHQMCH6EKBZ45G3DOAC X5UVREJYKD4FGXILS6ONEGL2LQ43FY3GATXGPXIROFHS3Y6SB4AAC RI4S7SYT3QKWCR2OBQ3RGVHWHRBGB6PKIEVGZYITV3FF6PF3CT6QC CQQSJLONTAKIWT4AEEDZFLFAFCSIPEGWLBJDJIS7VJK6FJ3LZ2RAC EVYSAFB2LYZWBCFCEZSV6JVGRMYN3ALIZCBZG3IZVUDUXCLFYELAC DEMSSSB22UI2ZN26C56UYO4NZWMDCRYKLAQARGOTSORSDXX3ZNNQC 3HZY24CX4U2TO74HOY4YX3LBJIYF4DLXHCIY7J2RASAC4COMSMZAC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC JARRBLZDQ2JZWY7IUVPTOT7WJMBPMLFLF2MGLVGOYROAAISYGLSAC 6GEU36HWK66LK3IY37HZOTJI5HOXJRUHIEYGYSVSIF57YBUEATRAC OEPUOUNBNTHTFZVDXREGBQCKFRCWMVP2MDVK4OA47VK2DBKEWVYAC 4UUKWXDFP2CBW6MJCBIOROQZXZDJPWJWDCKYTXBFKNCGVMJ32BJQC G5YSUSNZCQCKYKR267EZ63E3KIW42R2YZPY2CMIJPYAHPNW3KY3QC QL55ECJ6KMMBUOWQ6LKSOVN7L43CH4S6SPE2AQ3VX3KSGC32RP4AC 4JS4DWHDRVNPIV3QCHLVJP6ZEAO5FHOK7NQ5FGO2JVZE6BZDZAIAC sub getJobStatus {my ($self, $c) = @_;my $maintainer = $c->request->params->{"maintainer"};my $latest = $c->stash->{jobStatus}->search(defined $maintainer ? { maintainers => { like => "%$maintainer%" } } : {},{ '+select' => ["me.statusChangeId", "me.statusChangeTime"], '+as' => ["statusChangeId", "statusChangeTime"], order_by => "coalesce(statusChangeTime, 0) desc"});return $latest;}# A convenient way to see all the errors - i.e. things demanding# attention - at a glance.sub errors : Chained('get_builds') PathPart Args(0) {my ($self, $c) = @_;$c->stash->{template} = 'errors.tt';$c->stash->{brokenJobsets} =[$c->stash->{allJobsets}->search({errormsg => {'!=' => ''}})]if defined $c->stash->{allJobsets};$c->stash->{brokenJobs} =[$c->stash->{allJobs}->search({errormsg => {'!=' => ''}})]if defined $c->stash->{allJobs};$c->stash->{brokenBuilds} =[getJobStatus($self, $c)->search({buildStatus => {'!=' => 0}})];}
{ aggregate => { -in => $job->builds->search({}, { columns => ["id"], order_by => "id desc", rows => 15 })->as_query } },{ join => 'aggregateconstituents_constituents',columns => ['id', 'job', 'finished', 'buildstatus'],+select => ['aggregateconstituents_constituents.aggregate'],+as => ['aggregate']});
{ aggregate => { -in => $job->builds->search({}, { columns => ["id"], order_by => "id desc", rows => 15 })->as_query } },{ join => 'aggregateconstituents_constituents',columns => ['id', 'job', 'finished', 'buildstatus'],+select => ['aggregateconstituents_constituents.aggregate'],+as => ['aggregate']});
my $jobName = $b->get_column('job');$aggregates->{$b->get_column('aggregate')}->{constituents}->{$jobName} ={ id => $b->id, finished => $b->finished, buildstatus => $b->buildstatus };$constituentJobs{$jobName} = 1;
my $jobName = $b->get_column('job');$aggregates->{$b->get_column('aggregate')}->{constituents}->{$jobName} ={ id => $b->id, finished => $b->finished, buildstatus => $b->buildstatus };$constituentJobs{$jobName} = 1;
# FIXME: could be done in one query.$aggregates->{$agg}->{build} =$c->model('DB::Builds')->find({id => $agg}, {columns => [@buildListColumns]}) or die;
# FIXME: could be done in one query.$aggregates->{$agg}->{build} =$c->model('DB::Builds')->find({id => $agg}, {columns => [@buildListColumns]}) or die;
[% WRAPPER layout.tt title="Errors" %][% PROCESS common.tt %]<p>This page provides a quick way to see how FUBARed your packagesare. It shows job expressions that don’t evaluate properly and jobsthat don’t build.</p>[% haveErrors = 0 %][% IF brokenJobsets && brokenJobsets.size > 0; haveErrors = 1 %]<h2>Evaluation errors in jobsets</h2><table class="table table-condensed table-striped"><thead><tr><th>Name</th><th>Error</th></tr></thead><tdata>[% FOREACH j IN brokenJobsets %]<tr><td>[% INCLUDE renderFullJobsetName project=j.project.name jobset=j.name %]</td><td><pre class="error">[% HTML.escape(j.errormsg) %]</pre></td></tr>[% END %]</tdata></table>[% END %][% IF brokenJobs && brokenJobs.size > 0; haveErrors = 1 %]<h2>Evaluation errors in jobs</h2><table class="table table-condensed table-striped"><thead><tr><th>Name</th><th>Error</th></tr></thead><tdata>[% FOREACH j IN brokenJobs %]<tr><td>[% INCLUDE renderFullJobName project=j.project.name jobset=j.jobset.name job=j.name %]</td><td><pre class="error">[% HTML.escape(j.errormsg) %]</pre></td></tr>[% END %]</tdata></table>[% END %][% IF brokenBuilds && brokenBuilds.size > 0; haveErrors = 1 %]<h2>Broken builds</h2>[% INCLUDE renderBuildList builds=brokenBuilds showStatusChange=1 hideProjectName=project hideJobsetName=jobset hideJobName=job %][% END %][% IF !haveErrors %]<p><strong>There are currently no problems.</strong></p>[% END %][% END %]