From 7c7c43335df0d7aba36e7510ae1a1fbe318dec9e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 13 Mar 2009 17:32:08 +0000 Subject: [PATCH] * Job status: show the active jobs. --- src/lib/Hydra/Base/Controller/ListBuilds.pm | 6 ++++-- src/lib/Hydra/Controller/Job.pm | 3 +++ src/lib/Hydra/Controller/Jobset.pm | 4 ++-- src/lib/Hydra/Controller/Project.pm | 1 + src/lib/Hydra/Controller/Root.pm | 1 + src/lib/Hydra/Helper/CatalystUtils.pm | 23 +++++++++------------ src/script/hydra_scheduler.pl | 1 - 7 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/lib/Hydra/Base/Controller/ListBuilds.pm b/src/lib/Hydra/Base/Controller/ListBuilds.pm index b66fddf9..3c7143ea 100644 --- a/src/lib/Hydra/Base/Controller/ListBuilds.pm +++ b/src/lib/Hydra/Base/Controller/ListBuilds.pm @@ -10,7 +10,9 @@ use Hydra::Helper::CatalystUtils; sub jobstatus : Chained('get_builds') PathPart Args(0) { my ($self, $c) = @_; $c->stash->{template} = 'jobstatus.tt'; - $c->stash->{latestBuilds} = getLatestBuilds($c, $c->stash->{allBuilds}, {}); + my $jobs = $c->stash->{allJobs}; + $c->stash->{latestBuilds} = + getLatestBuilds($c, ref $jobs eq "ARRAY" ? $jobs : scalar $jobs->search({active => 1}), {}); } @@ -41,7 +43,7 @@ sub nix : Chained('get_builds') PathPart('channel') CaptureArgs(1) { eval { if ($channelName eq "latest") { $c->stash->{channelName} = $c->stash->{channelBaseName} . "-latest"; - getChannelData($c, getLatestBuilds($c, $c->stash->{allBuilds}, {buildStatus => 0})); + getChannelData($c, getLatestBuilds($c, scalar $c->stash->{allJobs}->search({active => 1}), {buildStatus => 0})); } elsif ($channelName eq "all") { $c->stash->{channelName} = $c->stash->{channelBaseName} . "-all"; diff --git a/src/lib/Hydra/Controller/Job.pm b/src/lib/Hydra/Controller/Job.pm index a3be5c2f..c7965d9a 100644 --- a/src/lib/Hydra/Controller/Job.pm +++ b/src/lib/Hydra/Controller/Job.pm @@ -27,6 +27,9 @@ sub index : Chained('job') PathPart('') Args(0) { sub get_builds : Chained('job') PathPart('') CaptureArgs(0) { my ($self, $c) = @_; $c->stash->{allBuilds} = $c->stash->{job}->builds; + #$c->stash->{allJobs} = # !!! horribly hacky + # $c->stash->{job}->jobset->jobs->search({name => $c->stash->{job}->name}); + $c->stash->{allJobs} = [$c->stash->{job}]; $c->stash->{channelBaseName} = $c->stash->{project}->name . "-" . $c->stash->{jobset}->name . "-" . $c->stash->{job}->name; } diff --git a/src/lib/Hydra/Controller/Jobset.pm b/src/lib/Hydra/Controller/Jobset.pm index 8e21ae63..65bc31d3 100644 --- a/src/lib/Hydra/Controller/Jobset.pm +++ b/src/lib/Hydra/Controller/Jobset.pm @@ -29,8 +29,8 @@ sub index : Chained('jobset') PathPart('') Args(0) { # Hydra::Base::Controller::ListBuilds needs this. sub get_builds : Chained('jobset') PathPart('') CaptureArgs(0) { my ($self, $c) = @_; - $c->stash->{allBuilds} = - $c->stash->{jobset}->builds; + $c->stash->{allBuilds} = $c->stash->{jobset}->builds; + $c->stash->{allJobs} = $c->stash->{jobset}->jobs; $c->stash->{channelBaseName} = $c->stash->{project}->name . "-" . $c->stash->{jobset}->name; } diff --git a/src/lib/Hydra/Controller/Project.pm b/src/lib/Hydra/Controller/Project.pm index 461d2c18..d2f7ec42 100644 --- a/src/lib/Hydra/Controller/Project.pm +++ b/src/lib/Hydra/Controller/Project.pm @@ -225,6 +225,7 @@ sub updateProject { sub get_builds : Chained('project') PathPart('') CaptureArgs(0) { my ($self, $c) = @_; $c->stash->{allBuilds} = $c->stash->{project}->builds; + $c->stash->{allJobs} = $c->stash->{project}->jobs; $c->stash->{channelBaseName} = $c->stash->{project}->name; } diff --git a/src/lib/Hydra/Controller/Root.pm b/src/lib/Hydra/Controller/Root.pm index 00ba6562..befabefb 100644 --- a/src/lib/Hydra/Controller/Root.pm +++ b/src/lib/Hydra/Controller/Root.pm @@ -223,6 +223,7 @@ sub release :Local { sub get_builds : Chained('/') PathPart('') CaptureArgs(0) { my ($self, $c) = @_; $c->stash->{allBuilds} = $c->model('DB::Builds'); + $c->stash->{allJobs} = $c->model('DB::Jobs'); $c->stash->{channelBaseName} = "everything"; } diff --git a/src/lib/Hydra/Helper/CatalystUtils.pm b/src/lib/Hydra/Helper/CatalystUtils.pm index cfa53e84..6d7fc208 100644 --- a/src/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/lib/Hydra/Helper/CatalystUtils.pm @@ -45,22 +45,19 @@ sub getBuildStats { # Return the latest build for each job. sub getLatestBuilds { - my ($c, $builds, $extraAttrs) = @_; + my ($c, $jobs, $extraAttrs) = @_; my @res = (); - foreach my $build ($builds->search({}, - {group_by => ['project', 'job', 'system']})) - { - my $attrs = - { project => $build->get_column('project') - , job => $build->get_column('job') - , system => $build->system - , finished => 1 - }; - my ($build) = $builds->search({ %$attrs, %$extraAttrs }, - { join => 'resultInfo', order_by => 'timestamp DESC', rows => 1 } ); - push @res, $build if defined $build; + # !!! this could be done more efficiently. + + foreach my $job (ref $jobs eq "ARRAY" ? @{$jobs} : $jobs->all) { + foreach my $system ($job->builds->search({}, {select => ['system'], distinct => 1})) { + my ($build) = $job->builds->search( + { finished => 1, system => $system->system, %$extraAttrs }, + { join => 'resultInfo', order_by => 'timestamp DESC', rows => 1 }); + push @res, $build if defined $build; + } } return [@res]; diff --git a/src/script/hydra_scheduler.pl b/src/script/hydra_scheduler.pl index b068056a..1f5cf60c 100755 --- a/src/script/hydra_scheduler.pl +++ b/src/script/hydra_scheduler.pl @@ -355,7 +355,6 @@ sub checkJobSet { $db->txn_do(sub { foreach my $jobInDB ($jobset->jobs->all) { - print $jobInDB->name, "\n"; $jobInDB->update({active => $jobNames{$jobInDB->name} || $failedJobNames{$jobInDB->name} ? 1 : 0}); if ($failedJobNames{$jobInDB->name}) {