Class: Gitlab::Analytics::CycleAnalytics::Aggregated::BaseQueryBuilder
- Inherits:
-
Object
- Object
- Gitlab::Analytics::CycleAnalytics::Aggregated::BaseQueryBuilder
- Includes:
- StageQueryHelpers
- Defined in:
- lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb
Overview
rubocop: disable CodeReuse/ActiveRecord
Constant Summary collapse
- MODEL_CLASSES =
{ MergeRequest.to_s => ::Analytics::CycleAnalytics::MergeRequestStageEvent, Issue.to_s => ::Analytics::CycleAnalytics::IssueStageEvent }.freeze
Instance Method Summary collapse
- #base_query ⇒ Object
- #build ⇒ Object
- #build_sorted_query ⇒ Object
- #filter_assignees(query) ⇒ Object
- #filter_author(query) ⇒ Object
- #filter_by_stage_parent(query) ⇒ Object
- #filter_label_names(query) ⇒ Object
- #filter_milestone_ids(query) ⇒ Object
-
#initialize(stage:, params: {}) ⇒ BaseQueryBuilder
constructor
Allowed params: * from - stage end date filter start date * to - stage end date filter to date * author_username * milestone_title * label_name (array) * assignee_username (array) * project_ids (array).
Methods included from StageQueryHelpers
#duration, #duration_in_seconds, #in_progress?, #percentile_cont
Constructor Details
#initialize(stage:, params: {}) ⇒ BaseQueryBuilder
Allowed params:
-
from - stage end date filter start date
-
to - stage end date filter to date
-
author_username
-
milestone_title
-
label_name (array)
-
assignee_username (array)
-
project_ids (array)
24 25 26 27 28 29 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 24 def initialize(stage:, params: {}) @stage = stage @params = params @root_ancestor = stage.namespace.root_ancestor @stage_event_model = MODEL_CLASSES.fetch(stage.subject_class.to_s) end |
Instance Method Details
#base_query ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 96 def base_query query = stage_event_model .by_stage_event_hash_id(stage.stage_event_hash_id) from = params[:from] || 30.days.ago if in_progress? query = query .end_event_is_not_happened_yet .opened_state .(from) query = query.(params[:to]) if params[:to] else query = query.(from) query = query.(params[:to]) if params[:to] end query end |
#build ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 31 def build query = base_query query = filter_by_stage_parent(query) query = (query) query = filter_milestone_ids(query) query = filter_label_names(query) filter_assignees(query) end |
#build_sorted_query ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 40 def build_sorted_query direction = params[:direction] || :desc if params[:sort] == :duration build.order_by_duration(direction) else build.order_by_end_event(direction) end end |
#filter_assignees(query) ⇒ Object
84 85 86 87 88 89 90 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 84 def filter_assignees(query) return query if params[:assignee_username].blank? Issuables::AssigneeFilter .new(params: { assignee_username: params[:assignee_username] }) .filter(query) end |
#filter_author(query) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 50 def (query) return query if params[:author_username].blank? user = User.by_username(params[:author_username]).first return query.none if user.blank? query.(user) end |
#filter_by_stage_parent(query) ⇒ Object
92 93 94 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 92 def filter_by_stage_parent(query) query.by_project_id(stage.namespace.project.id) end |
#filter_label_names(query) ⇒ Object
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 73 def filter_label_names(query) return query if params[:label_name].blank? LabelFilter.new( stage: stage, params: params, project: nil, group: root_ancestor ).filter(query) end |
#filter_milestone_ids(query) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb', line 60 def filter_milestone_ids(query) return query if params[:milestone_title].blank? milestone = MilestonesFinder .new(group_ids: root_ancestor.self_and_descendant_ids, project_ids: root_ancestor.all_projects.select(:id), title: params[:milestone_title]) .execute .first return query.none if milestone.blank? query.with_milestone_id(milestone.id) end |