diff --git a/ee/config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml b/ee/config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml index f6d7f8ae440ee8efe187db4b496a6d4d9e8539cc..d78cf315ffe9bd5adf7ce0c9e20824f659ae0fa5 100644 --- a/ee/config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml +++ b/ee/config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml @@ -10,6 +10,7 @@ value_type: number status: active time_frame: 28d data_source: database +instrumentation_class: CountUserPreferencesGroupOverviewSecurityDashboardMetric distribution: - ee tier: diff --git a/ee/config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml b/ee/config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml index 803eebb5892a2a0d286d16642aaa0092d1dfc1ac..9f659b0618119f6a4b1d0c738afe40efc71e5977 100644 --- a/ee/config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml +++ b/ee/config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml @@ -10,6 +10,7 @@ value_type: number status: active time_frame: all data_source: database +instrumentation_class: CountUserPreferencesGroupOverviewSecurityDashboardMetric distribution: - ee tier: diff --git a/ee/config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml b/ee/config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml index 946509f396a63f68534092b135750850b4080f9e..0e4d8aed1a757b29d1ee88da43f0270b079283ac 100644 --- a/ee/config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml +++ b/ee/config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml @@ -10,6 +10,7 @@ value_type: number status: active time_frame: all data_source: database +instrumentation_class: CountUserPreferencesGroupOverviewSecurityDashboardMetric distribution: - ee tier: diff --git a/ee/lib/ee/gitlab/usage_data.rb b/ee/lib/ee/gitlab/usage_data.rb index d66e71e6153a519c89444fac767a2566f8bca084..51422a556b4108c65c7367f64697bb9ef7ec7297 100644 --- a/ee/lib/ee/gitlab/usage_data.rb +++ b/ee/lib/ee/gitlab/usage_data.rb @@ -159,8 +159,7 @@ def on_demand_pipelines_usage def user_preferences_usage super.tap do |user_prefs_usage| user_prefs_usage.merge!( - user_preferences_group_overview_details: count(::User.active.group_view_details), - user_preferences_group_overview_security_dashboard: count(::User.active.group_view_security_dashboard) + user_preferences_group_overview_details: count(::User.active.group_view_details) ) end end @@ -363,11 +362,7 @@ def usage_activity_by_stage_verify(time_period) def usage_activity_by_stage_secure(time_period) prefix = 'user_' - results = { - user_preferences_group_overview_security_dashboard: count(::User.active.group_view_security_dashboard.where(time_period)) - } - - results.merge!(count_secure_pipelines(time_period)) + results = count_secure_pipelines(time_period) results.merge!(count_secure_scans(time_period)) results[:"#{prefix}unique_users_all_secure_scanners"] = distinct_count(::Ci::Build.where(name: SECURE_PRODUCT_TYPES.keys).where(time_period), :user_id) diff --git a/ee/lib/gitlab/usage/metrics/instrumentations/count_user_preferences_group_overview_security_dashboard_metric.rb b/ee/lib/gitlab/usage/metrics/instrumentations/count_user_preferences_group_overview_security_dashboard_metric.rb new file mode 100644 index 0000000000000000000000000000000000000000..d1faa1ee32e56200beb4c26d09dc796870f2c827 --- /dev/null +++ b/ee/lib/gitlab/usage/metrics/instrumentations/count_user_preferences_group_overview_security_dashboard_metric.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Gitlab + module Usage + module Metrics + module Instrumentations + class CountUserPreferencesGroupOverviewSecurityDashboardMetric < DatabaseMetric + operation :count + + relation do + ::User.active.group_view_security_dashboard + end + end + end + end + end +end diff --git a/ee/spec/lib/ee/gitlab/usage_data_spec.rb b/ee/spec/lib/ee/gitlab/usage_data_spec.rb index 78f48a31ce33aabb795fddccd327f9f462e93b5d..b68b77f1881d504671e6c3ae49ceed854c869038 100644 --- a/ee/spec/lib/ee/gitlab/usage_data_spec.rb +++ b/ee/spec/lib/ee/gitlab/usage_data_spec.rb @@ -124,7 +124,6 @@ status_page_issues status_page_projects user_preferences_group_overview_details - user_preferences_group_overview_security_dashboard template_repositories )) @@ -141,7 +140,6 @@ it 'gathers group overview preferences usage data', :aggregate_failures do expect(subject[:counts][:user_preferences_group_overview_details]).to eq(User.active.count - 2) # we have exactly 2 active users with security dashboard set - expect(subject[:counts][:user_preferences_group_overview_security_dashboard]).to eq 2 end it 'includes a recording_ee_finished_at timestamp' do @@ -568,7 +566,6 @@ def ldap_server_config it 'includes accurate usage_activity_by_stage data' do expect(described_class.usage_activity_by_stage_secure(described_class.monthly_time_range_db_params)).to include( - user_preferences_group_overview_security_dashboard: 3, sast_pipeline: be_within(error_rate).percent_of(0), sast_scans: 0, dependency_scanning_pipeline: be_within(error_rate).percent_of(0), @@ -604,7 +601,6 @@ def ldap_server_config end expect(described_class.usage_activity_by_stage_secure({})).to include( - user_preferences_group_overview_security_dashboard: 3, user_unique_users_all_secure_scanners: 1, sast_scans: 2, dependency_scanning_scans: 6, @@ -615,7 +611,6 @@ def ldap_server_config ) expect(described_class.usage_activity_by_stage_secure(described_class.monthly_time_range_db_params)).to include( - user_preferences_group_overview_security_dashboard: 3, sast_pipeline: be_within(error_rate).percent_of(1), dependency_scanning_pipeline: be_within(error_rate).percent_of(2), container_scanning_pipeline: be_within(error_rate).percent_of(1), @@ -642,7 +637,6 @@ def ldap_server_config end expect(described_class.usage_activity_by_stage_secure(described_class.monthly_time_range_db_params)).to include( - user_preferences_group_overview_security_dashboard: 3, sast_pipeline: be_within(error_rate).percent_of(0), sast_scans: 0, dependency_scanning_pipeline: be_within(error_rate).percent_of(0), @@ -667,7 +661,6 @@ def ldap_server_config end expect(described_class.usage_activity_by_stage_secure(described_class.monthly_time_range_db_params)).to include( - user_preferences_group_overview_security_dashboard: 3, sast_pipeline: be_within(error_rate).percent_of(0), sast_scans: 0, dependency_scanning_pipeline: be_within(error_rate).percent_of(0), @@ -714,7 +707,6 @@ def ldap_server_config end expect(subject).to include( - user_preferences_group_overview_security_dashboard: -1, sast_pipeline: -1, sast_scans: -1, dependency_scanning_pipeline: -1, diff --git a/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_user_preferences_group_overview_security_dashboard_metric_spec.rb b/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_user_preferences_group_overview_security_dashboard_metric_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..7a0a6e7d8dfe3665ccdc1a20be9ca1e35e5b15c8 --- /dev/null +++ b/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_user_preferences_group_overview_security_dashboard_metric_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Usage::Metrics::Instrumentations::CountUserPreferencesGroupOverviewSecurityDashboardMetric, feature_category: :service_ping do + context 'with time_frame: all' do + let(:expected_value) { 3 } + + let_it_be(:user) { create(:user, group_view: :security_dashboard, created_at: 3.days.ago) } + let_it_be(:user2) { create(:user, group_view: :security_dashboard, created_at: 3.days.ago) } + let_it_be(:user3) { create(:user, group_view: :security_dashboard, created_at: 10.days.ago) } + + it_behaves_like 'a correct instrumented metric value', { time_frame: 'all', data_source: 'database' } + end + + context 'with monthly aggregation' do + let(:expected_value) { 2 } + + let_it_be(:user) { create(:user, group_view: :security_dashboard, created_at: 3.days.ago) } + let_it_be(:user2) { create(:user, group_view: :security_dashboard, created_at: 10.days.ago) } + let_it_be(:user3) { create(:user, group_view: :security_dashboard, created_at: 40.days.ago) } + + it_behaves_like 'a correct instrumented metric value', { time_frame: '28d', data_source: 'database' } + end +end