Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/analytics')
-rw-r--r--lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb10
-rw-r--r--lib/gitlab/analytics/cycle_analytics/aggregated/data_collector.rb8
-rw-r--r--lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb27
-rw-r--r--lib/gitlab/analytics/cycle_analytics/data_collector.rb6
4 files changed, 30 insertions, 21 deletions
diff --git a/lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb b/lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb
index 1e50c980a3a..dd8149aba94 100644
--- a/lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb
+++ b/lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb
@@ -37,6 +37,16 @@ module Gitlab
filter_assignees(query)
end
+ 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
+
def filter_author(query)
return query if params[:author_username].blank?
diff --git a/lib/gitlab/analytics/cycle_analytics/aggregated/data_collector.rb b/lib/gitlab/analytics/cycle_analytics/aggregated/data_collector.rb
index 2441b7a7497..22d8874db57 100644
--- a/lib/gitlab/analytics/cycle_analytics/aggregated/data_collector.rb
+++ b/lib/gitlab/analytics/cycle_analytics/aggregated/data_collector.rb
@@ -32,7 +32,7 @@ module Gitlab
def records_fetcher
strong_memoize(:records_fetcher) do
- RecordsFetcher.new(stage: stage, query: query, params: params)
+ RecordsFetcher.new(stage: stage, query: query_builder.build_sorted_query, params: params)
end
end
@@ -41,7 +41,11 @@ module Gitlab
attr_reader :stage, :params
def query
- BaseQueryBuilder.new(stage: stage, params: params).build
+ query_builder.build
+ end
+
+ def query_builder
+ @query_builder = BaseQueryBuilder.new(stage: stage, params: params)
end
def limit_count
diff --git a/lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb b/lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb
index 1742d396c10..55e421173d7 100644
--- a/lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb
+++ b/lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb
@@ -36,7 +36,13 @@ module Gitlab
def serialized_records
strong_memoize(:serialized_records) do
- records = ordered_and_limited_query.select(stage_event_model.arel_table[Arel.star], duration_in_seconds.as('total_time'))
+ # When RecordsFetcher is used with query sourced from
+ # InOperatorOptimization::QueryBuilder only columns
+ # used in ORDER BY statement would be selected by Arel.start operation
+ selections = [stage_event_model.arel_table[Arel.star]]
+ selections << duration_in_seconds.as('total_time') if params[:sort] != :duration # duration sorting already exposes this data
+
+ records = limited_query.select(*selections)
yield records if block_given?
issuables_and_records = load_issuables(records)
@@ -56,27 +62,12 @@ module Gitlab
end
end
- # rubocop: disable CodeReuse/ActiveRecord
- def ordered_and_limited_query
- sorting_options = {
- end_event: {
- asc: -> { query.order(end_event_timestamp: :asc) },
- desc: -> { query.order(end_event_timestamp: :desc) }
- },
- duration: {
- asc: -> { query.order(duration.asc) },
- desc: -> { query.order(duration.desc) }
- }
- }
-
- sort_lambda = sorting_options.dig(sort, direction) || sorting_options.dig(:end_event, :desc)
-
- sort_lambda.call
+ def limited_query
+ query
.page(page)
.per(per_page)
.without_count
end
- # rubocop: enable CodeReuse/ActiveRecord
private
diff --git a/lib/gitlab/analytics/cycle_analytics/data_collector.rb b/lib/gitlab/analytics/cycle_analytics/data_collector.rb
index a20481dd39e..ae675b6ad27 100644
--- a/lib/gitlab/analytics/cycle_analytics/data_collector.rb
+++ b/lib/gitlab/analytics/cycle_analytics/data_collector.rb
@@ -62,7 +62,11 @@ module Gitlab
attr_reader :stage, :params
def query
- BaseQueryBuilder.new(stage: stage, params: params).build
+ query_builder.build
+ end
+
+ def query_builder
+ @query_builder ||= BaseQueryBuilder.new(stage: stage, params: params)
end
# Limiting the maximum number of records so the COUNT(*) query stays efficient for large groups.