Commit 229b520f authored by Niko Belokolodov's avatar Niko Belokolodov

Migrate License metrics to one class

parent 0049f328
...@@ -9,13 +9,16 @@ value_type: string ...@@ -9,13 +9,16 @@ value_type: string
status: active status: active
time_frame: none time_frame: none
data_source: license data_source: license
instrumentation_class: LicenseMdFiveMetric instrumentation_class: LicenseMetric
options:
attribute:
- md5
data_category: standard data_category: standard
distribution: distribution:
- ee - ee
tier: tier:
- premium - premium
- ultimate - ultimate
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/557 introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/557
performance_indicator_type: [] performance_indicator_type: []
milestone: "<13.9" milestone: "<13.9"
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
time_frame: none time_frame: none
data_source: license data_source: license
data_category: subscription data_category: subscription
instrumentation_class: LicenseMetric
options:
attribute:
- id
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
time_frame: none time_frame: none
data_source: license data_source: license
data_category: subscription data_category: subscription
instrumentation_class: LicenseMetric
options:
attribute:
user_count
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
time_frame: none time_frame: none
data_source: license data_source: license
data_category: subscription data_category: subscription
instrumentation_class: LicenseMetric
options:
attribute:
- starts_at
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
data_category: subscription data_category: subscription
time_frame: none time_frame: none
data_source: license data_source: license
instrumentation_class: LicenseMetric
options:
attribute:
- expires_at
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
time_frame: none time_frame: none
data_source: license data_source: license
data_category: subscription data_category: subscription
instrumentation_class: LicenseMetric
options:
attribute:
- plan
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
time_frame: none time_frame: none
data_source: license data_source: license
data_category: subscription data_category: subscription
instrumentation_class: LicenseMetric
options:
attribute:
- trial
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -9,7 +9,10 @@ value_type: string ...@@ -9,7 +9,10 @@ value_type: string
status: active status: active
time_frame: none time_frame: none
data_source: license data_source: license
instrumentation_class: ZuoraSubscriptionIdMetric instrumentation_class: LicenseMetric
options:
attribute:
- subsription_id
data_category: standard data_category: standard
distribution: distribution:
- ee - ee
......
...@@ -10,6 +10,10 @@ status: active ...@@ -10,6 +10,10 @@ status: active
time_frame: none time_frame: none
data_source: database data_source: database
data_category: subscription data_category: subscription
instrumentation_class: LicenseMetric
options:
attribute:
- trial_ends_on
distribution: distribution:
- ee - ee
tier: tier:
......
...@@ -72,7 +72,7 @@ module EE ...@@ -72,7 +72,7 @@ module EE
def features_usage_data_ee def features_usage_data_ee
{ {
elasticsearch_enabled: alt_usage_data(fallback: nil) { ::Gitlab::CurrentSettings.elasticsearch_search? }, elasticsearch_enabled: alt_usage_data(fallback: nil) { ::Gitlab::CurrentSettings.elasticsearch_search? },
license_trial_ends_on: alt_usage_data(fallback: nil) { License.trial_ends_on }, license_trial_ends_on: alt_usage_data(fallback: nil) { add_metric("LicenseMetric", options: { attribute: :trial_ends_on }) },
geo_enabled: alt_usage_data(fallback: nil) { ::Gitlab::Geo.enabled? }, geo_enabled: alt_usage_data(fallback: nil) { ::Gitlab::Geo.enabled? },
user_cap_feature_enabled: add_metric('UserCapSettingEnabledMetric', time_frame: 'none') user_cap_feature_enabled: add_metric('UserCapSettingEnabledMetric', time_frame: 'none')
} }
......
# frozen_string_literal: true
module Gitlab
module Usage
module Metrics
module Instrumentations
class LicenseMetric < GenericMetric
# Usage example
#
# In metric YAML defintion
# instrumentation_class: LicenseMetric
# options:
# attribute: md5
# end
ALLOWED_ATTRIBUTES = %i(md5
id
plan
trial
starts_at
expires_at
user_count
trial_ends_on
subscription_id).freeze
def initialize(time_frame:, options: {})
super
raise ArgumentError, "License options attribute are required" unless license_attribute.present?
raise ArgumentError, "attribute should one allowed" unless license_attribute.in?(ALLOWED_ATTRIBUTES)
end
def license_attribute
options[:attribute]
end
def value
alt_usage_data(fallback: -1) do
::Licese.current.send(license_attribute)
end
end
end
end
end
end
end
...@@ -45,14 +45,13 @@ module Gitlab ...@@ -45,14 +45,13 @@ module Gitlab
MAX_BUCKET_SIZE = 100 MAX_BUCKET_SIZE = 100
INSTRUMENTATION_CLASS_FALLBACK = -100 INSTRUMENTATION_CLASS_FALLBACK = -100
def add_metric(metric, time_frame: 'none') def add_metric(metric, time_frame: 'none', options: {})
# Results of this method should be overwritten by instrumentation class values # Results of this method should be overwritten by instrumentation class values
# -100 indicates the metric was not properly merged. # -100 indicates the metric was not properly merged.
return INSTRUMENTATION_CLASS_FALLBACK if Feature.enabled?(:usage_data_instrumentation) return INSTRUMENTATION_CLASS_FALLBACK if Feature.enabled?(:usage_data_instrumentation)
metric_class = "Gitlab::Usage::Metrics::Instrumentations::#{metric}".constantize metric_class = "Gitlab::Usage::Metrics::Instrumentations::#{metric}".constantize
metric_class.new(time_frame: time_frame).value metric_class.new(time_frame: time_frame, options: options).value
end end
def count(relation, column = nil, batch: true, batch_size: nil, start: nil, finish: nil) def count(relation, column = nil, batch: true, batch_size: nil, start: nil, finish: nil)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment