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/usage_trends/workers_argument_builder.rb')
-rw-r--r--lib/gitlab/analytics/usage_trends/workers_argument_builder.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/gitlab/analytics/usage_trends/workers_argument_builder.rb b/lib/gitlab/analytics/usage_trends/workers_argument_builder.rb
new file mode 100644
index 00000000000..a502f46287d
--- /dev/null
+++ b/lib/gitlab/analytics/usage_trends/workers_argument_builder.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Analytics
+ module UsageTrends
+ class WorkersArgumentBuilder
+ def initialize(measurement_identifiers: [], recorded_at: Time.zone.now)
+ @measurement_identifiers = measurement_identifiers
+ @recorded_at = recorded_at
+ end
+
+ def execute
+ measurement_identifiers.map do |measurement_identifier|
+ query_scope = query_mappings[measurement_identifier]&.call
+
+ next if query_scope.nil?
+
+ [measurement_identifier, *determine_start_and_finish(measurement_identifier, query_scope), recorded_at]
+ end.compact
+ end
+
+ private
+
+ attr_reader :measurement_identifiers, :recorded_at
+
+ # Determining the query range (id range) as early as possible in order to get more accurate counts.
+ def determine_start_and_finish(measurement_identifier, query_scope)
+ queries = custom_min_max_queries[measurement_identifier]
+
+ if queries
+ [queries[:minimum_query].call, queries[:maximum_query].call]
+ else
+ [query_scope.minimum(:id), query_scope.maximum(:id)]
+ end
+ end
+
+ def custom_min_max_queries
+ ::Analytics::UsageTrends::Measurement.identifier_min_max_queries
+ end
+
+ def query_mappings
+ ::Analytics::UsageTrends::Measurement.identifier_query_mapping
+ end
+ end
+ end
+ end
+end