From 28b4cf43e5679624eb8e1de8424de842fe43b108 Mon Sep 17 00:00:00 2001 From: Daniele Rossetti <drossetti@gitlab.com> Date: Tue, 23 Jul 2024 18:04:12 +0000 Subject: [PATCH] Add metric to check how many groups have enabled observability features ff --- ...240607181654_observability_features_ff.yml | 17 ++++++++++ .../observability_features_ff_metric.rb | 24 ++++++++++++++ .../observability_features_ff_metric_spec.rb | 32 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 config/metrics/settings/20240607181654_observability_features_ff.yml create mode 100644 lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb create mode 100644 spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb 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 0000000000000..0b4c1e600b80a --- /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 0000000000000..164aebad26bb8 --- /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 0000000000000..5de46ea4cc49f --- /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 -- GitLab