From ae85d2df23f66fa6b1600d972fc341bcbb85d613 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 5 Nov 2013 16:05:29 +0100 Subject: [PATCH] Add a "My jobsets" tab to the dashboard --- src/lib/Hydra/Controller/User.pm | 16 ++++++++ src/lib/Hydra/Helper/Nix.pm | 16 ++++++-- src/root/common.tt | 61 ++++++++++++++++++++++++++++ src/root/dashboard-my-jobs-tab.tt | 2 +- src/root/dashboard-my-jobsets-tab.tt | 12 ++++++ src/root/dashboard.tt | 2 + src/root/project.tt | 59 +-------------------------- 7 files changed, 105 insertions(+), 63 deletions(-) create mode 100644 src/root/dashboard-my-jobsets-tab.tt diff --git a/src/lib/Hydra/Controller/User.pm b/src/lib/Hydra/Controller/User.pm index 7ddfb6e8..66b645b2 100644 --- a/src/lib/Hydra/Controller/User.pm +++ b/src/lib/Hydra/Controller/User.pm @@ -311,4 +311,20 @@ sub my_jobs_tab :Chained('user') :PathPart('my-jobs-tab') :Args(0) { } +sub my_jobsets_tab :Chained('user') :PathPart('my-jobsets-tab') :Args(0) { + my ($self, $c) = @_; + $c->stash->{template} = 'dashboard-my-jobsets-tab.tt'; + + my $jobsets = $c->model('DB::Jobsets')->search( + { "project.enabled" => 1, "me.enabled" => 1, + , owner => $c->stash->{user}->username + }, + { order_by => ["project", "name"] + , join => ["project"] + }); + + $c->stash->{jobsets} = [jobsetOverview_($c, $jobsets)]; +} + + 1; diff --git a/src/lib/Hydra/Helper/Nix.pm b/src/lib/Hydra/Helper/Nix.pm index a7fa06ed..76e10b47 100644 --- a/src/lib/Hydra/Helper/Nix.pm +++ b/src/lib/Hydra/Helper/Nix.pm @@ -17,7 +17,8 @@ our @EXPORT = qw( getPrimaryBuildsForView getPrimaryBuildTotal getViewResult getLatestSuccessfulViewResult - jobsetOverview removeAsciiEscapes getDrvLogPath findLog logContents + jobsetOverview jobsetOverview_ + removeAsciiEscapes getDrvLogPath findLog logContents getMainOutput getEvals getMachines pathIsInsidePrefix @@ -173,9 +174,9 @@ sub findLastJobForBuilds { } -sub jobsetOverview { - my ($c, $project) = @_; - return $project->jobsets->search( isProjectOwner($c, $project) ? {} : { hidden => 0 }, +sub jobsetOverview_ { + my ($c, $jobsets) = @_; + return $jobsets->search({}, { order_by => "name" , "+select" => [ "(select count(*) from Builds as a where a.finished = 0 and me.project = a.project and me.name = a.jobset and a.isCurrent = 1)" @@ -188,6 +189,13 @@ sub jobsetOverview { } +sub jobsetOverview { + my ($c, $project) = @_; + my $jobsets = $project->jobsets->search(isProjectOwner($c, $project) ? {} : { hidden => 0 }); + return jobsetOverview_($c, $jobsets); +} + + sub getViewResult { my ($primaryBuild, $jobs, $finished) = @_; diff --git a/src/root/common.tt b/src/root/common.tt index 0b0b7472..056c9f7e 100644 --- a/src/root/common.tt +++ b/src/root/common.tt @@ -464,4 +464,65 @@ BLOCK makeStar %] [% IF starred; "★"; ELSE; "☆"; END %] [% END; + +BLOCK renderJobsetOverview %] + + + + + + + + + + + + [% FOREACH j IN jobsets %] + [% successrate = 0 %] + + + + + + [% IF j.get_column('nrtotal') > 0 %] + [% successrate = ( j.get_column('nrsucceeded') / j.get_column('nrtotal') )*100 %] + [% IF j.get_column('nrscheduled') > 0 %] + [% class = 'label' %] + [% ELSIF successrate < 25 %] + [% class = 'label label-important' %] + [% ELSIF successrate < 75 %] + [% class = 'label label-warning' %] + [% ELSIF successrate <= 100 %] + [% class = 'label label-success' %] + [% END %] + [% END %] + + + + [% END %] + +
NameDescriptionLast evaluatedSuccess
+ [% IF j.get_column('nrscheduled') > 0 %] + Scheduled + [% ELSIF j.get_column('nrfailed') == 0 %] + Succeeded + [% ELSIF j.get_column('nrfailed') > 0 && j.get_column('nrsucceeded') > 0 %] + Some Failed + [% ELSE %] + All Failed + [% END %] + [% IF showProject; INCLUDE renderFullJobsetName project=j.get_column('project') jobset=j.name inRow=1; ELSE; INCLUDE renderJobsetName project=j.get_column('project') jobset=j.name inRow=1; END %][% HTML.escape(j.description) %][% IF j.lastcheckedtime; INCLUDE renderDateTime timestamp = j.lastcheckedtime; ELSE; "-"; END %][% successrate FILTER format('%d') %]% + [% IF j.get_column('nrsucceeded') > 0 %] + [% j.get_column('nrsucceeded') %] + [% END %] + [% IF j.get_column('nrfailed') > 0 %] + [% j.get_column('nrfailed') %] + [% END %] + [% IF j.get_column('nrscheduled') > 0 %] + [% j.get_column('nrscheduled') %] + [% END %] +
+[% END; + + %] diff --git a/src/root/dashboard-my-jobs-tab.tt b/src/root/dashboard-my-jobs-tab.tt index 6dee16b5..a1e82612 100644 --- a/src/root/dashboard-my-jobs-tab.tt +++ b/src/root/dashboard-my-jobs-tab.tt @@ -11,7 +11,7 @@

Below are the most recent builds of the [% builds.size %] jobs of which you ([% HTML.escape(user.emailaddress) %]) are a maintainer.

- + [% INCLUDE renderBuildList %] [% END %] diff --git a/src/root/dashboard-my-jobsets-tab.tt b/src/root/dashboard-my-jobsets-tab.tt new file mode 100644 index 00000000..5d857236 --- /dev/null +++ b/src/root/dashboard-my-jobsets-tab.tt @@ -0,0 +1,12 @@ +[% PROCESS common.tt %] + +[% IF builds.size == 0 %] + +
You are not the owner of any + jobset.
+ +[% ELSE %] + + [% INCLUDE renderJobsetOverview showProject=1 %] + +[% END %] diff --git a/src/root/dashboard.tt b/src/root/dashboard.tt index 2e30ea4b..07e48eb5 100644 --- a/src/root/dashboard.tt +++ b/src/root/dashboard.tt @@ -4,6 +4,7 @@
@@ -41,6 +42,7 @@
[% INCLUDE makeLazyTab tabName="tabs-my-jobs" uri=c.uri_for(c.controller('User').action_for('my_jobs_tab'), [user.username]) %] + [% INCLUDE makeLazyTab tabName="tabs-my-jobsets" uri=c.uri_for(c.controller('User').action_for('my_jobsets_tab'), [user.username]) %] diff --git a/src/root/project.tt b/src/root/project.tt index d88474dd..4e2dbd8f 100644 --- a/src/root/project.tt +++ b/src/root/project.tt @@ -30,64 +30,7 @@
[% IF project.jobsets %]

This project has the following jobsets:

- - - - - - - - - - - - - [% FOREACH j IN jobsets %] - [% successrate = 0 %] - - - - - - [% IF j.get_column('nrtotal') > 0 %] - [% successrate = ( j.get_column('nrsucceeded') / j.get_column('nrtotal') )*100 %] - [% IF j.get_column('nrscheduled') > 0 %] - [% class = 'label' %] - [% ELSIF successrate < 25 %] - [% class = 'label label-important' %] - [% ELSIF successrate < 75 %] - [% class = 'label label-warning' %] - [% ELSIF successrate <= 100 %] - [% class = 'label label-success' %] - [% END %] - [% END %] - - - - [% END %] - -
IdDescriptionLast evaluatedSuccess
- [% IF j.get_column('nrscheduled') > 0 %] - Scheduled - [% ELSIF j.get_column('nrfailed') == 0 %] - Succeeded - [% ELSIF j.get_column('nrfailed') > 0 && j.get_column('nrsucceeded') > 0 %] - Some Failed - [% ELSE %] - All Failed - [% END %] - [% INCLUDE renderJobsetName project=project.name jobset=j.name inRow=1 %][% HTML.escape(j.description) %][% IF j.lastcheckedtime; INCLUDE renderDateTime timestamp = j.lastcheckedtime; ELSE; "-"; END %][% successrate FILTER format('%d') %]% - [% IF j.get_column('nrsucceeded') > 0 %] - [% j.get_column('nrsucceeded') %] - [% END %] - [% IF j.get_column('nrfailed') > 0 %] - [% j.get_column('nrfailed') %] - [% END %] - [% IF j.get_column('nrscheduled') > 0 %] - [% j.get_column('nrscheduled') %] - [% END %] -
- + [% INCLUDE renderJobsetOverview %] [% ELSE %]

No jobsets have been defined yet.

[% END %]