summaryrefslogtreecommitdiff
path: root/lib/gitlab
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2019-07-23 21:00:39 +0000
committerStan Hu <stanhu@gmail.com>2019-07-23 21:00:39 +0000
commit5032df86ce25410928ec0aa459696a7b6f4e1b82 (patch)
treec0a00c0f1f960afd30abde448dee9aba0f9b3b2b /lib/gitlab
parentdfe0a56e6915dba0b51c15c5c2c0b388b44b134f (diff)
parent822129b6b71bfff3cf46d59e31349e8d47a48687 (diff)
downloadgitlab-ce-5032df86ce25410928ec0aa459696a7b6f4e1b82.tar.gz
Merge branch 'adjust-group-level-analytics-to-accept-multiple-project-ids' into 'master'
Adjust group level analytics to accept multiple projects ids See merge request gitlab-org/gitlab-ce!30744
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/cycle_analytics/base_event_fetcher.rb13
-rw-r--r--lib/gitlab/cycle_analytics/base_stage.rb13
-rw-r--r--lib/gitlab/cycle_analytics/group_projects_provider.rb27
-rw-r--r--lib/gitlab/cycle_analytics/group_stage_summary.rb13
-rw-r--r--lib/gitlab/cycle_analytics/summary/group/base.rb5
-rw-r--r--lib/gitlab/cycle_analytics/summary/group/deploy.rb15
-rw-r--r--lib/gitlab/cycle_analytics/summary/group/issue.rb15
7 files changed, 62 insertions, 39 deletions
diff --git a/lib/gitlab/cycle_analytics/base_event_fetcher.rb b/lib/gitlab/cycle_analytics/base_event_fetcher.rb
index 96aa799e864..07ae430c45e 100644
--- a/lib/gitlab/cycle_analytics/base_event_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/base_event_fetcher.rb
@@ -4,6 +4,7 @@ module Gitlab
module CycleAnalytics
class BaseEventFetcher
include BaseQuery
+ include GroupProjectsProvider
attr_reader :projections, :query, :stage, :order, :options
@@ -73,18 +74,6 @@ module Gitlab
def serialization_context
{}
end
-
- def projects
- group ? Project.inside_path(group.full_path) : [project]
- end
-
- def group
- @group ||= options.fetch(:group, nil)
- end
-
- def project
- @project ||= options.fetch(:project, nil)
- end
end
end
end
diff --git a/lib/gitlab/cycle_analytics/base_stage.rb b/lib/gitlab/cycle_analytics/base_stage.rb
index 678a891e941..1cd54238bb4 100644
--- a/lib/gitlab/cycle_analytics/base_stage.rb
+++ b/lib/gitlab/cycle_analytics/base_stage.rb
@@ -4,6 +4,7 @@ module Gitlab
module CycleAnalytics
class BaseStage
include BaseQuery
+ include GroupProjectsProvider
attr_reader :options
@@ -77,18 +78,6 @@ module Gitlab
def event_options
options.merge(start_time_attrs: start_time_attrs, end_time_attrs: end_time_attrs)
end
-
- def projects
- group ? Project.inside_path(group.full_path) : [project]
- end
-
- def group
- @group ||= options.fetch(:group, nil)
- end
-
- def project
- @project ||= options.fetch(:project, nil)
- end
end
end
end
diff --git a/lib/gitlab/cycle_analytics/group_projects_provider.rb b/lib/gitlab/cycle_analytics/group_projects_provider.rb
new file mode 100644
index 00000000000..1287a48daaa
--- /dev/null
+++ b/lib/gitlab/cycle_analytics/group_projects_provider.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module CycleAnalytics
+ module GroupProjectsProvider
+ def projects
+ group ? projects_for_group : [project]
+ end
+
+ def group
+ @group ||= options.fetch(:group, nil)
+ end
+
+ def project
+ @project ||= options.fetch(:project, nil)
+ end
+
+ private
+
+ def projects_for_group
+ projects = Project.inside_path(group.full_path)
+ projects = projects.where(id: options[:projects]) if options[:projects]
+ projects
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/cycle_analytics/group_stage_summary.rb b/lib/gitlab/cycle_analytics/group_stage_summary.rb
index 7b5c74e1a1b..a1fc941495d 100644
--- a/lib/gitlab/cycle_analytics/group_stage_summary.rb
+++ b/lib/gitlab/cycle_analytics/group_stage_summary.rb
@@ -3,15 +3,18 @@
module Gitlab
module CycleAnalytics
class GroupStageSummary
- def initialize(group, from:, current_user:)
+ attr_reader :group, :from, :current_user, :options
+
+ def initialize(group, options:)
@group = group
- @from = from
- @current_user = current_user
+ @from = options[:from]
+ @current_user = options[:current_user]
+ @options = options
end
def data
- [serialize(Summary::Group::Issue.new(group: @group, from: @from, current_user: @current_user)),
- serialize(Summary::Group::Deploy.new(group: @group, from: @from))]
+ [serialize(Summary::Group::Issue.new(group: group, from: from, current_user: current_user, options: options)),
+ serialize(Summary::Group::Deploy.new(group: group, from: from, options: options))]
end
private
diff --git a/lib/gitlab/cycle_analytics/summary/group/base.rb b/lib/gitlab/cycle_analytics/summary/group/base.rb
index 7f18b61d309..48d8164bde1 100644
--- a/lib/gitlab/cycle_analytics/summary/group/base.rb
+++ b/lib/gitlab/cycle_analytics/summary/group/base.rb
@@ -5,9 +5,12 @@ module Gitlab
module Summary
module Group
class Base
- def initialize(group:, from:)
+ attr_reader :group, :from, :options
+
+ def initialize(group:, from:, options:)
@group = group
@from = from
+ @options = options
end
def title
diff --git a/lib/gitlab/cycle_analytics/summary/group/deploy.rb b/lib/gitlab/cycle_analytics/summary/group/deploy.rb
index d8fcd8f2ce4..78d677cf558 100644
--- a/lib/gitlab/cycle_analytics/summary/group/deploy.rb
+++ b/lib/gitlab/cycle_analytics/summary/group/deploy.rb
@@ -5,22 +5,23 @@ module Gitlab
module Summary
module Group
class Deploy < Group::Base
+ include GroupProjectsProvider
+
def title
n_('Deploy', 'Deploys', value)
end
def value
- @value ||= Deployment.joins(:project)
- .where(projects: { id: projects })
- .where("deployments.created_at > ?", @from)
- .success
- .count
+ @value ||= find_deployments
end
private
- def projects
- Project.inside_path(@group.full_path).ids
+ def find_deployments
+ deployments = Deployment.joins(:project).merge(Project.inside_path(group.full_path))
+ deployments = deployments.where(projects: { id: options[:projects] }) if options[:projects]
+ deployments = deployments.where("deployments.created_at > ?", from)
+ deployments.success.count
end
end
end
diff --git a/lib/gitlab/cycle_analytics/summary/group/issue.rb b/lib/gitlab/cycle_analytics/summary/group/issue.rb
index 70073e6d843..9daae8531d8 100644
--- a/lib/gitlab/cycle_analytics/summary/group/issue.rb
+++ b/lib/gitlab/cycle_analytics/summary/group/issue.rb
@@ -5,10 +5,13 @@ module Gitlab
module Summary
module Group
class Issue < Group::Base
- def initialize(group:, from:, current_user:)
+ attr_reader :group, :from, :current_user, :options
+
+ def initialize(group:, from:, current_user:, options:)
@group = group
@from = from
@current_user = current_user
+ @options = options
end
def title
@@ -16,7 +19,15 @@ module Gitlab
end
def value
- @value ||= IssuesFinder.new(@current_user, group_id: @group.id, include_subgroups: true, created_after: @from).execute.count
+ @value ||= find_issues
+ end
+
+ private
+
+ def find_issues
+ issues = IssuesFinder.new(current_user, group_id: group.id, include_subgroups: true, created_after: from).execute
+ issues = issues.where(projects: { id: options[:projects] }) if options[:projects]
+ issues.count
end
end
end