diff --git a/config/metrics/settings/20210204124858_container_registry_enabled.yml b/config/metrics/settings/20210204124858_container_registry_enabled.yml index f7ef96f196d14d4076132a239f81629fafc15be7..f98b9cb96fb4a3fa398cb710ea68f28260b4dad5 100644 --- a/config/metrics/settings/20210204124858_container_registry_enabled.yml +++ b/config/metrics/settings/20210204124858_container_registry_enabled.yml @@ -9,6 +9,10 @@ value_type: boolean status: active time_frame: none data_source: system +instrumentation_class: GitlabConfigMetric +options: + config: + registry: enabled distribution: - ee - ce diff --git a/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml b/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml index 0d3382cfe5a384c3b1b2664219afef486f1f1fb8..ac359a9ff7befe087390872e3710944095cceac0 100644 --- a/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml +++ b/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml @@ -9,6 +9,10 @@ value_type: boolean status: active time_frame: none data_source: system +instrumentation_class: GitlabConfigMetric +options: + config: + dependency_proxy: enabled distribution: - ee - ce diff --git a/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml b/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml index fa645922f92b16a1c2b08da210cc19940234bc7e..dd9a623dc75ec395a2138d14b470f31ec7aed19e 100644 --- a/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml +++ b/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml @@ -9,6 +9,10 @@ value_type: boolean status: active time_frame: none data_source: system +instrumentation_class: GitlabConfigMetric +options: + config: + gitlab_ci: shared_runners_enabled distribution: - ce - ee diff --git a/config/metrics/settings/20210204124906_ldap_enabled.yml b/config/metrics/settings/20210204124906_ldap_enabled.yml index d5f682912f5675a9c7cdd16a3b3d5c5b21deef4c..59fa6ddfa8dd6373e8ad20b644164ba6b31bc813 100644 --- a/config/metrics/settings/20210204124906_ldap_enabled.yml +++ b/config/metrics/settings/20210204124906_ldap_enabled.yml @@ -9,6 +9,10 @@ value_type: boolean status: active time_frame: none data_source: system +instrumentation_class: GitlabConfigMetric +options: + config: + ldap: enabled distribution: - ce - ee diff --git a/config/metrics/settings/20210204124908_mattermost_enabled.yml b/config/metrics/settings/20210204124908_mattermost_enabled.yml index 6c8b063547147246cd05ce930cfbfa805036da93..1e8560ae6fd6eedea090b485971b883599d52f5b 100644 --- a/config/metrics/settings/20210204124908_mattermost_enabled.yml +++ b/config/metrics/settings/20210204124908_mattermost_enabled.yml @@ -9,6 +9,10 @@ value_type: boolean status: active time_frame: none data_source: system +instrumentation_class: GitlabConfigMetric +options: + config: + mattermost: enabled distribution: - ce - ee diff --git a/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric.rb b/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric.rb new file mode 100644 index 0000000000000000000000000000000000000000..daeef06e6c58339325c6e32521b2c42f5deb4e3d --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class GitlabConfigMetric < GenericMetric + value do + method_name_array = config_hash_to_method_array(options[:config]) + + method_name_array.inject(Gitlab.config, :public_send) + end + + private + + def config_hash_to_method_array(object) + object.each_with_object([]) do |(key, value), result| + result.append(key) + + if value.is_a?(Hash) + result.concat(config_hash_to_method_array(value)) + else + result.append(value) + end + end + end + end + end + end + end +end diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb index 930a637cdd4ff21b1b199a9d30631c507b737237..2b8b7aedeb2aa61e87de0961a8b9594e9bb95a44 100644 --- a/lib/gitlab/usage_data.rb +++ b/lib/gitlab/usage_data.rb @@ -163,11 +163,6 @@ def features_usage_data def features_usage_data_ce { - container_registry_enabled: alt_usage_data(fallback: nil) { Gitlab.config.registry.enabled }, - dependency_proxy_enabled: Gitlab.config.try(:dependency_proxy)&.enabled, - gitlab_shared_runners_enabled: alt_usage_data(fallback: nil) { Gitlab.config.gitlab_ci.shared_runners_enabled }, - ldap_enabled: alt_usage_data(fallback: nil) { Gitlab.config.ldap.enabled }, - mattermost_enabled: alt_usage_data(fallback: nil) { Gitlab.config.mattermost.enabled }, omniauth_enabled: alt_usage_data(fallback: nil) { Gitlab::Auth.omniauth_enabled? }, prometheus_enabled: alt_usage_data(fallback: nil) { Gitlab::Prometheus::Internal.prometheus_enabled? }, prometheus_metrics_enabled: alt_usage_data(fallback: nil) { Gitlab::Metrics.prometheus_metrics_enabled? }, diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..e9814f0cb51bd38902adaf9343c5fe46284471a6 --- /dev/null +++ b/spec/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Usage::Metrics::Instrumentations::GitlabConfigMetric, feature_category: :service_ping do + describe 'config metric' do + using RSpec::Parameterized::TableSyntax + + where(:config_value, :expected_value) do + false | false + true | true + end + + with_them do + before do + stub_config(artifacts: { object_store: { enabled: config_value } }) + end + + it_behaves_like 'a correct instrumented metric value', { + time_frame: 'none', + options: { + config: { + artifacts: { + object_store: 'enabled' + } + } + } + } + end + end +end diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 25a032ec183cded2b8d4c3bf37fe8a2fa42ad767..06492056da2e082132fc2a58bc49653aaa3e5f04 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -571,13 +571,8 @@ def omniauth_providers subject { described_class.features_usage_data_ce } it 'gathers feature usage data', :aggregate_failures do - expect(subject[:mattermost_enabled]).to eq(Gitlab.config.mattermost.enabled) - expect(subject[:ldap_enabled]).to eq(Gitlab.config.ldap.enabled) expect(subject[:omniauth_enabled]).to eq(Gitlab::Auth.omniauth_enabled?) expect(subject[:reply_by_email_enabled]).to eq(Gitlab::Email::IncomingEmail.enabled?) - expect(subject[:container_registry_enabled]).to eq(Gitlab.config.registry.enabled) - expect(subject[:dependency_proxy_enabled]).to eq(Gitlab.config.dependency_proxy.enabled) - expect(subject[:gitlab_shared_runners_enabled]).to eq(Gitlab.config.gitlab_ci.shared_runners_enabled) end context 'with embedded Prometheus' do diff --git a/spec/support/helpers/usage_data_helpers.rb b/spec/support/helpers/usage_data_helpers.rb index 8f17e44ed741f3d35455cd557d73d0617175b3e2..d8c4c5107c75968dd2db87420ac4663fdf067aa5 100644 --- a/spec/support/helpers/usage_data_helpers.rb +++ b/spec/support/helpers/usage_data_helpers.rb @@ -77,13 +77,8 @@ module UsageDataHelpers USAGE_DATA_KEYS = %i[ counts recorded_at - mattermost_enabled - ldap_enabled omniauth_enabled reply_by_email_enabled - container_registry_enabled - dependency_proxy_enabled - gitlab_shared_runners_enabled gitlab_pages git gitaly