diff --git a/ee/app/graphql/mutations/secrets_management/project_secrets_manager_initialize.rb b/ee/app/graphql/mutations/secrets_management/project_secrets_manager_initialize.rb index 506ffe53290ae095a19e4db86172266a024c8134..33ce6f5808d8293938a1d02beb014bc4602b368e 100644 --- a/ee/app/graphql/mutations/secrets_management/project_secrets_manager_initialize.rb +++ b/ee/app/graphql/mutations/secrets_management/project_secrets_manager_initialize.rb @@ -6,6 +6,7 @@ class ProjectSecretsManagerInitialize < BaseMutation graphql_name 'ProjectSecretsManagerInitialize' include ResolvesProject + include Gitlab::InternalEventsTracking authorize :admin_project_secrets_manager @@ -30,6 +31,7 @@ def resolve(project_path:) .execute if result.success? + track_event(project) { project_secrets_manager: result.payload[:project_secrets_manager], errors: [] @@ -44,6 +46,18 @@ def resolve(project_path:) private + def track_event(project) + track_internal_event( + 'enable_ci_secrets_manager_for_project', + project: project, + user: current_user, + namespace: project.namespace, + additional_properties: { + label: 'graphql' + } + ) + end + def find_object(project_path:) resolve_project(full_path: project_path) end diff --git a/ee/config/events/enable_ci_secrets_manager_for_project.yml b/ee/config/events/enable_ci_secrets_manager_for_project.yml new file mode 100644 index 0000000000000000000000000000000000000000..0a57ee5ed2de20bb0b07ba2a5266161688d4bd5a --- /dev/null +++ b/ee/config/events/enable_ci_secrets_manager_for_project.yml @@ -0,0 +1,18 @@ +--- +description: Enabling of the GitLab secrets manager for a project +internal_events: true +action: enable_ci_secrets_manager_for_project +identifiers: +- project +- namespace +- user +additional_properties: + label: + description: '"How the enabling of secrets manager was triggered [graphql]"' +product_group: pipeline_security +product_categories: +- secrets_management +milestone: '17.10' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183730 +tiers: +- ultimate diff --git a/ee/config/metrics/counts_all/count_total_enable_ci_secrets_manager_for_project.yml b/ee/config/metrics/counts_all/count_total_enable_ci_secrets_manager_for_project.yml new file mode 100644 index 0000000000000000000000000000000000000000..93f8789aa591fdf45967594f380f47147142cf1b --- /dev/null +++ b/ee/config/metrics/counts_all/count_total_enable_ci_secrets_manager_for_project.yml @@ -0,0 +1,19 @@ +--- +key_path: counts.count_total_enable_ci_secrets_manager_for_project +description: Count of projects that have enabled the GitLab secrets manager +product_group: pipeline_security +product_categories: +- secrets_management +performance_indicator_type: [] +value_type: number +status: active +milestone: '17.10' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183730 +time_frame: +- all +data_source: internal_events +data_category: optional +tiers: +- ultimate +events: +- name: enable_ci_secrets_manager_for_project diff --git a/ee/spec/requests/api/graphql/secrets_management/project_secrets_manager_initialize_spec.rb b/ee/spec/requests/api/graphql/secrets_management/project_secrets_manager_initialize_spec.rb index a3e07ea35fd3451c0eb9b3397c01afb59b812bb0..831a88b25dd00a1392b80c2b94bfa631e5895367 100644 --- a/ee/spec/requests/api/graphql/secrets_management/project_secrets_manager_initialize_spec.rb +++ b/ee/spec/requests/api/graphql/secrets_management/project_secrets_manager_initialize_spec.rb @@ -44,7 +44,21 @@ )) end + it_behaves_like 'internal event tracking' do + let(:event) { 'enable_ci_secrets_manager_for_project' } + let(:namespace) { project.namespace } + let(:user) { current_user } + let(:category) { 'Mutations::SecretsManagement::ProjectSecretsManagerInitialize' } + let(:additional_properties) { { label: 'graphql' } } + end + context 'and service results to a failure' do + before do + allow_next_instance_of(SecretsManagement::InitializeProjectSecretsManagerService) do |service| + allow(service).to receive(:execute).and_return(ServiceResponse.error(message: 'some error')) + end + end + it 'returns the service error' do expect_next_instance_of(SecretsManagement::InitializeProjectSecretsManagerService) do |service| result = ServiceResponse.error(message: 'some error') @@ -55,6 +69,8 @@ expect(mutation_response['errors']).to include('some error') end + + it_behaves_like 'internal event not tracked' end context 'and secrets_manager feature flag is disabled' do