gitlab-org--gitlab-foss/lib/gitlab/analytics/usage_trends/workers_argument_builder.rb

48 lines
1.4 KiB
Ruby

# 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