TX7Q4RASUYPTHIHZFACQ227BIZYLNJGRA5HHIAFQWCL4FHEHVGPQC FHOH54HQJOWN2HGIKLVADURVYYHIIORLKEFI4NVKE4K457GLG6CAC 6GZZDDQBAIAZJAESJDIT5JKVY6F7IQTJHG6QT2HHBMK2EWE2MHCQC AFNDUSGDI2LSRZICZNFXTCFNIVG6IZCKYR7V3KOTHXYUFUU6AYCAC PH3DFCNU2W73FSDAQHS3VXPA474NBQFH2MGL5U6V5VC6CHMQI43AC KDBWLKRPZS2XQNS4IXBYJGRZ7OO7OQSC2MRUQDTY2M55G55CTQRAC VH5ZABDRP565VZIG55YHNYYPST53NQ2J6YM362NSLXCAHI5WPH4AC UICHT2PSN2QOCHP6MGY5QQJUDU4IF6FBIOJLBA55QBJDK6ST566AC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC EJ7C77C3QLT7JPRHFTDIOY4WAXPXAXMAPWJYWEPKGPO5CCGD3SZAC HRAFVVOEGQJQS4XQNZSMNYN2SUZGKEGPSJUDZUBMI2IN32WFNQ4QC LCLXI7PTVYQLR2SGXVIAJCLKW3H2TTM3UVJSZHAO7VMISNIHTXOQC GK326R5NJYVROQQUOBQT26P3OV6OZLMLTZRU6VIDR2HEOOTRAGAQC CS7T2XFIISZ7TPQ6FFRIDYPR6BDCQHURP4JE4YKLI4OYSNWKZCHAC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC 2GUAKGTBTNFFER343SQWSLFYIXXHJLDSGH5JHF7QMC3AVZB7Q3TQC QCGCX2BRDJ3MECT45M6KUQDSTVXWRHGLD4KKNG5UOCOTNAW7L3TQC IK53RV4VGOHLCZGQCCIKPB45M3C7M7YMNBOJFBGZJ4LWIZNU4QNQC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC 4JS4DWHDRVNPIV3QCHLVJP6ZEAO5FHOK7NQ5FGO2JVZE6BZDZAIAC JZVRK5QJGPDT7HNQLC2UOJRG6V6QO4NJJ5V5QEMQ6VUTUIQWHG5AC QL55ECJ6KMMBUOWQ6LKSOVN7L43CH4S6SPE2AQ3VX3KSGC32RP4AC PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLAC N22GPKYTOLZLBGTGDATQDVZ4R5APZEAOIA7L32X4UXBH4XNI7MWAC }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");
[% WRAPPER layout.tt title="Latest steps" %][% PROCESS common.tt %]<p>Showing steps [% (page - 1) * resultsPerPage + 1 %] - [% (page - 1)* resultsPerPage + steps.size %] of about [% total %] inorder of descending finish time.</p><table class="table table-striped table-condensed clickable-rows"><thead><tr><th></th><th>What</th><th>Job</th><th>Build</th><th>Step</th><th>When</th><th>Duration</th><th>Machine</th></tr></thead><tbody>[% FOREACH step IN steps %]<tr><td>[% INCLUDE renderBuildStatusIcon buildstatus=step.status size=16 %]</td><td><tt>[% step.drvpath.match('-(.*).drv').0 %]</tt></td><td><tt>[% INCLUDE renderFullJobNameOfBuild build=step.build %]</tt></td><td><a href="[% c.uri_for('/build' step.build.id) %]">[% step.build.id %]</a></td><td><a class="row-link" href="[% c.uri_for('/build' step.build.id 'nixlog' step.stepnr 'tail-reload') %]">[% step.stepnr %]</a></td><td>[% INCLUDE renderRelativeDate timestamp=step.stoptime %]</td><td style="width: 10em">[% INCLUDE renderDuration duration = step.stoptime - step.starttime %] </td><td><tt>[% INCLUDE renderMachineName machine=step.machine %]</tt></td></tr>[% END %]</tbody></table>[% INCLUDE renderPager %][% END %]
create index IndexBuildStepsOnStopTime on BuildSteps(stopTime desc) where startTime is not null and stopTime is not null;