1# frozen_string_literal: true 2 3module Gitlab 4 # This class is used by the `gitlab:usage_data:dump_sql` rake tasks to output SQL instead of running it. 5 # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41091 6 class UsageDataQueries < UsageData 7 class << self 8 def add_metric(metric, time_frame: 'none', options: {}) 9 metric_class = "Gitlab::Usage::Metrics::Instrumentations::#{metric}".constantize 10 11 metric_class.new(time_frame: time_frame, options: options).instrumentation 12 end 13 14 def count(relation, column = nil, *args, **kwargs) 15 Gitlab::Usage::Metrics::Query.for(:count, relation, column) 16 end 17 18 def distinct_count(relation, column = nil, *args, **kwargs) 19 Gitlab::Usage::Metrics::Query.for(:distinct_count, relation, column) 20 end 21 22 def sum(relation, column, *args, **kwargs) 23 Gitlab::Usage::Metrics::Query.for(:sum, relation, column) 24 end 25 26 # rubocop: disable CodeReuse/ActiveRecord 27 def histogram(relation, column, buckets:, bucket_size: buckets.size) 28 Gitlab::Usage::Metrics::Query.for(:histogram, relation, column, buckets: buckets, bucket_size: bucket_size) 29 end 30 # rubocop: enable CodeReuse/ActiveRecord 31 32 # For estimated distinct count use exact query instead of hll 33 # buckets query, because it can't be used to obtain estimations without 34 # supplementary ruby code present in Gitlab::Database::PostgresHll::BatchDistinctCounter 35 def estimate_batch_distinct_count(relation, column = nil, *args, **kwargs) 36 Gitlab::Usage::Metrics::Query.for(:estimate_batch_distinct_count, relation, column) 37 end 38 39 def add(*args) 40 'SELECT ' + args.map { |arg| "(#{arg})" }.join(' + ') 41 end 42 43 def maximum_id(model, column = nil) 44 end 45 46 def minimum_id(model, column = nil) 47 end 48 49 def redis_usage_data(counter = nil, &block) 50 if block_given? 51 { redis_usage_data_block: block.to_s } 52 elsif counter.present? 53 { redis_usage_data_counter: counter } 54 end 55 end 56 57 def jira_integration_data 58 { 59 projects_jira_server_active: 0, 60 projects_jira_cloud_active: 0 61 } 62 end 63 64 def epics_deepest_relationship_level 65 { epics_deepest_relationship_level: 0 } 66 end 67 end 68 end 69end 70