Class: Gitlab::UsageDataQueries
Overview
Constant Summary
Constants inherited
from UsageData
Gitlab::UsageData::CE_MEMOIZED_VALUES, Gitlab::UsageData::MAX_GENERATION_TIME_FOR_SAAS
Gitlab::Usage::TimeFrame::ALL_TIME_TIME_FRAME_NAME, Gitlab::Usage::TimeFrame::DEFAULT_TIMESTAMP_COLUMN, Gitlab::Usage::TimeFrame::SEVEN_DAYS_TIME_FRAME_NAME, Gitlab::Usage::TimeFrame::TWENTY_EIGHT_DAYS_TIME_FRAME_NAME
Gitlab::Utils::UsageData::DISTRIBUTED_HLL_FALLBACK, Gitlab::Utils::UsageData::FALLBACK, Gitlab::Utils::UsageData::HISTOGRAM_FALLBACK, Gitlab::Utils::UsageData::MAX_BUCKET_SIZE
Class Method Summary
collapse
-
.add(*args) ⇒ Object
-
.add_metric(metric, time_frame: 'none', options: {}) ⇒ Object
-
.alt_usage_data(value = nil, fallback: FALLBACK, &block) ⇒ Object
-
.clicked_in_product_marketing_email_count(clicked_emails, track, series) ⇒ Object
-
.count(relation, column = nil, *args, **kwargs) ⇒ Object
-
.distinct_count(relation, column = nil, *args, **kwargs) ⇒ Object
-
.estimate_batch_distinct_count(relation, column = nil, *args, **kwargs) ⇒ Object
For estimated distinct count use exact query instead of hll buckets query, because it can’t be used to obtain estimations without supplementary ruby code present in Gitlab::Database::PostgresHll::BatchDistinctCounter.
-
.histogram(relation, column, buckets:, bucket_size: buckets.size) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
-
.maximum_id(model, column = nil) ⇒ Object
-
.minimum_id(model, column = nil) ⇒ Object
-
.redis_usage_data(counter = nil, &block) ⇒ Object
-
.sent_in_product_marketing_email_count(sent_emails, track, series) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
-
.stage_manage_events(time_period) ⇒ Object
rubocop: enable CodeReuse/ActiveRecord.
-
.sum(relation, column, *args, **kwargs) ⇒ Object
-
.topology_usage_data ⇒ Object
-
.with_metadata ⇒ Object
Methods inherited from UsageData
components_usage_data, data, features_usage_data, features_usage_data_ce, grafana_embed_usage_data, integrations_usage, jira_import_usage, object_store_config, object_store_usage_data, recorded_at, successful_deployments_with_cluster, system_usage_data, system_usage_data_license, system_usage_data_monthly, system_usage_data_weekly, usage_activity_by_stage, usage_activity_by_stage_configure, usage_activity_by_stage_create, usage_activity_by_stage_enablement, usage_activity_by_stage_manage, usage_activity_by_stage_monitor, usage_activity_by_stage_package, usage_activity_by_stage_plan, usage_activity_by_stage_release, usage_activity_by_stage_verify, user_preferences_usage
#monthly_time_range, #monthly_time_range_db_params, #weekly_time_range, #weekly_time_range_db_params
#add, #add_metric, #alt_usage_data, #average, #count, #distinct_count, #estimate_batch_distinct_count, #histogram, #maximum_id, #measure_duration, #minimum_id, #redis_usage_data, #sum, #track_usage_event, #with_finished_at, #with_metadata, #with_prometheus_client
Class Method Details
.add(*args) ⇒ Object
43
44
45
|
# File 'lib/gitlab/usage_data_queries.rb', line 43
def add(*args)
'SELECT ' + args.map { |arg| "(#{arg})" }.join(' + ')
end
|
.add_metric(metric, time_frame: 'none', options: {}) ⇒ Object
12
13
14
15
16
|
# File 'lib/gitlab/usage_data_queries.rb', line 12
def add_metric(metric, time_frame: 'none', options: {})
metric_class = "Gitlab::Usage::Metrics::Instrumentations::#{metric}".constantize
metric_class.new(time_frame: time_frame, options: options).instrumentation
end
|
.alt_usage_data(value = nil, fallback: FALLBACK, &block) ⇒ Object
55
56
57
58
59
60
61
|
# File 'lib/gitlab/usage_data_queries.rb', line 55
def alt_usage_data(value = nil, fallback: FALLBACK, &block)
if block
{ alt_usage_data_block: "non-SQL usage data block" }
else
{ alt_usage_data_value: value }
end
end
|
.clicked_in_product_marketing_email_count(clicked_emails, track, series) ⇒ Object
83
84
85
|
# File 'lib/gitlab/usage_data_queries.rb', line 83
def clicked_in_product_marketing_email_count(clicked_emails, track, series)
count(Users::InProductMarketingEmail.where(track: track, series: series).where.not(cta_clicked_at: nil))
end
|
.count(relation, column = nil, *args, **kwargs) ⇒ Object
18
19
20
|
# File 'lib/gitlab/usage_data_queries.rb', line 18
def count(relation, column = nil, *args, **kwargs)
Gitlab::Usage::Metrics::Query.for(:count, relation, column)
end
|
.distinct_count(relation, column = nil, *args, **kwargs) ⇒ Object
22
23
24
|
# File 'lib/gitlab/usage_data_queries.rb', line 22
def distinct_count(relation, column = nil, *args, **kwargs)
Gitlab::Usage::Metrics::Query.for(:distinct_count, relation, column)
end
|
.estimate_batch_distinct_count(relation, column = nil, *args, **kwargs) ⇒ Object
For estimated distinct count use exact query instead of hll buckets query, because it can’t be used to obtain estimations without supplementary ruby code present in Gitlab::Database::PostgresHll::BatchDistinctCounter
39
40
41
|
# File 'lib/gitlab/usage_data_queries.rb', line 39
def estimate_batch_distinct_count(relation, column = nil, *args, **kwargs)
Gitlab::Usage::Metrics::Query.for(:estimate_batch_distinct_count, relation, column)
end
|
.histogram(relation, column, buckets:, bucket_size: buckets.size) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord
31
32
33
|
# File 'lib/gitlab/usage_data_queries.rb', line 31
def histogram(relation, column, buckets:, bucket_size: buckets.size)
Gitlab::Usage::Metrics::Query.for(:histogram, relation, column, buckets: buckets, bucket_size: bucket_size)
end
|
.maximum_id(model, column = nil) ⇒ Object
47
48
49
|
# File 'lib/gitlab/usage_data_queries.rb', line 47
def maximum_id(model, column = nil)
end
|
.minimum_id(model, column = nil) ⇒ Object
51
52
53
|
# File 'lib/gitlab/usage_data_queries.rb', line 51
def minimum_id(model, column = nil)
end
|
.redis_usage_data(counter = nil, &block) ⇒ Object
63
64
65
66
67
68
69
|
# File 'lib/gitlab/usage_data_queries.rb', line 63
def redis_usage_data(counter = nil, &block)
if block
{ redis_usage_data_block: "non-SQL usage data block" }
elsif counter.present?
{ redis_usage_data_counter: counter.to_s }
end
end
|
.sent_in_product_marketing_email_count(sent_emails, track, series) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord
79
80
81
|
# File 'lib/gitlab/usage_data_queries.rb', line 79
def sent_in_product_marketing_email_count(sent_emails, track, series)
count(Users::InProductMarketingEmail.where(track: track, series: series))
end
|
.stage_manage_events(time_period) ⇒ Object
rubocop: enable CodeReuse/ActiveRecord
88
89
90
91
92
93
94
|
# File 'lib/gitlab/usage_data_queries.rb', line 88
def stage_manage_events(time_period)
estimate_batch_distinct_count(::Event.where(time_period), :author_id)
end
|
.sum(relation, column, *args, **kwargs) ⇒ Object
26
27
28
|
# File 'lib/gitlab/usage_data_queries.rb', line 26
def sum(relation, column, *args, **kwargs)
Gitlab::Usage::Metrics::Query.for(:sum, relation, column)
end
|
.topology_usage_data ⇒ Object
71
72
73
74
75
76
|
# File 'lib/gitlab/usage_data_queries.rb', line 71
def topology_usage_data
{
duration_s: 0,
failures: []
}
end
|
8
9
10
|
# File 'lib/gitlab/usage_data_queries.rb', line 8
def with_metadata
yield
end
|