Jobset.pm: Factor out build->eval mapping.

[?]
Apr 26, 2015, 5:37 AM
TNIHMBCRFZO4FPMVYCQGPVFHRRYMXF24FPIUX2Q6SSHPDZYOEJ5QC

Dependencies

  • [2] MNKXBLNC Return 410 Gone (rather than 500) if an output is no longer available
  • [3] XA4U3RP6 Jobset job tab: Show eval date rather than eval ID
  • [4] TFPS7WQ2 Jobset.pm: Detect channels by isChannel attribute.
  • [5] ZWKPXRWY Jobset.pm: Don't show channels in "Jobs" tab.
  • [6] XU4PKY3U By default, show the first 250 jobs only
  • [7] 6QRHXIM3 * Speed up the jobset index page. Especially the query to get the
  • [8] AK2UZDS2 Jobset page: Add a new tab to show job status in a matrix
  • [9] D7X6XTKQ Integrate the "Job status" and "All jobs" tabs
  • [10] YVVIXELL Make channels a product type instead of subtype.
  • [11] GEADFVZ5 hydra-queue-runner: Improved scheduling
  • [12] RX7USXWQ jobset: Add a new "channels" tab.
  • [13] CQTN62OH Die tabs die
  • [14] UMFB2767 Hydra/64: Leaving number of builds empty gives DBIx error
  • [15] Z6FOXDEC Use more flash messages
  • [16] TJPIS3UP hydra: minor improvements in hydra ui
  • [17] J3RYO2CU Remove the jobs status page
  • [18] ZI535LI6 * hydra: 'new' UI for project/jobset/job/build
  • [19] QTC3SYBM Jobset page: Load the jobs and status tabs on demand
  • [*] 3HZY24CX * Make jobsets viewable under
  • [*] LBNVQXUB * Build the /build stuff in a separate controller.
  • [*] SSMN5MPT Remove dead code
  • [*] KAZWI5G4 * hydra: buildpage, show changes since last build/successful build
  • [*] LGNML7VJ Don't use a prepared statement for the active build steps query
  • [*] 3PNG7NIB Remove trailing whitespace

Change contents

  • edit in src/lib/Hydra/Controller/Jobset.pm at line 110
    [6.50][6.433:553](),[6.433][6.433:553]()
    my @evals = $c->stash->{jobset}->jobsetevals->search({ hasnewbuilds => 1}, { order_by => "id desc", rows => 20 });
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 111
    [6.554][6.554:610]()
    my $evals = {};
    my %jobs;
    my $nrBuilds = 0;
    [6.554]
    [6.610]
    my ($evals, $builds) = searchBuildsAndEvalsForJobset(
    $c->stash->{jobset},
    { job => { ilike => $filter }, ischannel => 0 },
    10000
    );
  • edit in src/lib/Hydra/Controller/Jobset.pm at line 117
    [6.611][6.611:687](),[6.687][5.0:61](),[5.61][6.756:826](),[6.96][6.756:826](),[6.756][6.756:826](),[6.826][6.198:281](),[6.281][3.0:119](),[3.119][6.328:524](),[6.192][6.328:524](),[6.328][6.328:524](),[6.524][6.1858:1864](),[6.1096][6.1858:1864](),[6.1915][6.1858:1864](),[6.2291][6.1858:1864](),[6.1858][6.1858:1864](),[6.1864][6.1097:1098]()
    foreach my $eval (@evals) {
    my @builds = $eval->builds->search(
    { job => { ilike => $filter }, ischannel => 0 },
    { columns => ['id', 'job', 'finished', 'buildstatus'] });
    foreach my $b (@builds) {
    my $jobName = $b->get_column('job');
    $evals->{$eval->id}->{timestamp} = $eval->timestamp;
    $evals->{$eval->id}->{jobs}->{$jobName} =
    { id => $b->id, finished => $b->finished, buildstatus => $b->buildstatus };
    $jobs{$jobName} = 1;
    $nrBuilds++;
    }
    last if $nrBuilds >= 10000;
    }
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 120
    [6.660][6.660:784]()
    next if defined $jobs{$job->name};
    $c->stash->{inactiveJobs}->{$job->name} = $jobs{$job->name} = 1;
    [6.660]
    [6.784]
    next if defined $builds->{$job->name};
    $c->stash->{inactiveJobs}->{$job->name} = $builds->{$job->name} = 1;
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 126
    [6.1131][6.0:34]()
    my @jobs = sort (keys %jobs);
    [6.1131]
    [6.34]
    my @jobs = sort (keys %$builds);
  • edit in src/lib/Hydra/Controller/Jobset.pm at line 133
    [6.4][6.4:59]()
    # XXX: Pretty much a rip-off of jobs-tab, make it DRY!
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 137
    [6.216][6.216:350]()
    my @evals = $c->stash->{jobset}->jobsetevals->search(
    { hasnewbuilds => 1},
    { order_by => "id desc", rows => 20 }
    [6.216]
    [6.350]
    my ($evals, $builds) = searchBuildsAndEvalsForJobset(
    $c->stash->{jobset},
    { ischannel => 1 }
  • edit in src/lib/Hydra/Controller/Jobset.pm at line 141
    [6.357][6.357:396]()
    my $evals = {};
    my %channels;
  • edit in src/lib/Hydra/Controller/Jobset.pm at line 142
    [6.397][6.397:473](),[6.473][4.0:100](),[4.100][6.680:1089](),[6.680][6.680:1089]()
    foreach my $eval (@evals) {
    my @builds = $eval->builds->search(
    { ischannel => 1 },
    { columns => ['id', 'job', 'finished', 'buildstatus'] }
    );
    foreach my $b (@builds) {
    my $jobName = $b->get_column('job');
    $evals->{$eval->id}->{timestamp} = $eval->timestamp;
    $evals->{$eval->id}->{channels}->{$jobName} = {
    id => $b->id,
    finished => $b->finished,
    buildstatus => $b->buildstatus
    };
    $channels{$jobName} = 1;
    }
    }
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 143
    [6.1122][6.1122:1164]()
    my @channels = sort (keys %channels);
    [6.1122]
    [6.1164]
    my @channels = sort (keys %$builds);
  • edit in src/lib/Hydra/Helper/CatalystUtils.pm at line 13
    [23.70]
    [2.331]
    searchBuildsAndEvalsForJobset
  • edit in src/lib/Hydra/Helper/CatalystUtils.pm at line 87
    [24.1112]
    [25.369]
    sub searchBuildsAndEvalsForJobset {
    my ($jobset, $condition, $maxBuilds) = @_;
    my @evals = $jobset->jobsetevals->search(
    { hasnewbuilds => 1},
    { order_by => "id desc",
    rows => 20
    });
    my $evals = {};
    my %builds;
    my $nrBuilds = 0;
  • edit in src/lib/Hydra/Helper/CatalystUtils.pm at line 102
    [25.370]
    [26.2562]
    foreach my $eval (@evals) {
    my @allBuilds = $eval->builds->search(
    $condition,
    { columns => ['id', 'job', 'finished', 'buildstatus'] }
    );
  • edit in src/lib/Hydra/Helper/CatalystUtils.pm at line 108
    [26.2563]
    [22.3710]
    foreach my $b (@allBuilds) {
    my $jobName = $b->get_column('job');
    $evals->{$eval->id}->{timestamp} = $eval->timestamp;
    $evals->{$eval->id}->{builds}->{$jobName} = {
    id => $b->id,
    finished => $b->finished,
    buildstatus => $b->buildstatus
    };
    $builds{$jobName} = 1;
    $nrBuilds++;
    }
    last if $maxBuilds && $nrBuilds >= $maxBuilds;
    }
    return ($evals, \%builds);
    }
  • replacement in src/root/jobset-channels-tab.tt at line 27
    [6.2024][6.2024:2196]()
    <td>[% r = evals.$eval.channels.$chan; IF r.id %]<a href="[% c.uri_for('/build' r.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
    [6.2024]
    [6.2196]
    <td>[% r = evals.$eval.builds.$chan; IF r.id %]<a href="[% c.uri_for('/build' r.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
  • replacement in src/root/jobset-jobs-tab.tt at line 62
    [6.2526][3.725:890]()
    <td>[% r = evals.$eval.jobs.$j; IF r.id %]<a href="[% c.uri_for('/build' r.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>
    [6.2526]
    [6.2686]
    <td>[% r = evals.$eval.builds.$j; IF r.id %]<a href="[% c.uri_for('/build' r.id) %]">[% INCLUDE renderBuildStatusIcon size=16 build=r %]</a>[% END %]</td>