diff --git a/config/metrics/settings/20240607181654_observability_features_ff.yml b/config/metrics/settings/20240607181654_observability_features_ff.yml new file mode 100644 index 0000000000000000000000000000000000000000..0b4c1e600b80a0e6c11c42520c9f3ebba6b4065a --- /dev/null +++ b/config/metrics/settings/20240607181654_observability_features_ff.yml @@ -0,0 +1,17 @@ +--- +key_path: settings.observability_features_ff +description: Count of groups with the observability_features feature flag enabled, where the flag is disabled globally +product_group: observability +value_type: boolean +status: active +milestone: "17.3" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/159930 +time_frame: none +data_source: database +data_category: optional +instrumentation_class: ObservabilityFeaturesFfMetric +performance_indicator_type: [] +distribution: +- ee +tier: +- ultimate diff --git a/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb b/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb new file mode 100644 index 0000000000000000000000000000000000000000..164aebad26bb846d967bc26d8de718246d42661b --- /dev/null +++ b/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class ObservabilityFeaturesFfMetric < GenericMetric + value do + # rubocop:disable Gitlab/FeatureFlagWithoutActor -- we are checking if the flag is enabled for all groups + if Feature.enabled?(:observability_features, type: :wip) + # If the flag is globally enabled, it's enabled for all groups. + # Querying for Group.count here would not be a performant option, + # Keeping it as -1 to indicate it is enabled for all. + -1 + # rubocop:enable Gitlab/FeatureFlagWithoutActor + else + Feature.group_ids_for(:observability_features).length + end + end + end + end + end + end +end diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..5de46ea4cc49f98a17d95cb0339e3caebabafe8e --- /dev/null +++ b/spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Usage::Metrics::Instrumentations::ObservabilityFeaturesFfMetric, feature_category: :product_analytics_data_management do + context 'with FF enabled globally' do + it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'database' } do + let(:expected_value) { -1 } + end + end + + # stub_feature_flags: disabled is required for Feature#group_ids_for to work correctly + context 'with FF enabled for specific groups', stub_feature_flags: false do + before do + stub_feature_flags(observability_features: create_list(:group, 3)) + end + + it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'database' } do + let(:expected_value) { 3 } + end + end + + context 'with FF disabled' do + before do + stub_feature_flags(observability_features: false) + end + + it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'database' } do + let(:expected_value) { 0 } + end + end +end