48 lines
1.4 KiB
Ruby
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
|