diff --git a/app/services/packages/create_event_service.rb b/app/services/packages/create_event_service.rb index d89e079966d865603bb97115adbbdb449c101998..c46613a1a1c93224396ac023c4e8b74e57a77c92 100644 --- a/app/services/packages/create_event_service.rb +++ b/app/services/packages/create_event_service.rb @@ -3,6 +3,7 @@ module Packages class CreateEventService < BaseService INTERNAL_EVENTS_NAMES = { + 'delete_package' => 'delete_package_from_registry', 'pull_package' => 'pull_package_from_registry' }.freeze diff --git a/config/events/delete_package_from_registry.yml b/config/events/delete_package_from_registry.yml new file mode 100644 index 0000000000000000000000000000000000000000..5c23e26e37132565903e1faf1fc91c653fb024b5 --- /dev/null +++ b/config/events/delete_package_from_registry.yml @@ -0,0 +1,23 @@ +--- +description: Packaged deleted from the registry +internal_events: true +action: delete_package_from_registry +identifiers: + - project + - namespace + - user +additional_properties: + label: + description: The name of the package type + property: + description: The auth type. Either 'guest', 'user' or 'deploy_token' +product_group: package_registry +milestone: '17.3' +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/153159 +distributions: + - ce + - ee +tiers: + - free + - premium + - ultimate diff --git a/config/metrics/counts_all/20210216182855_package_events_i_package_composer_delete_package.yml b/config/metrics/counts_all/20210216182855_package_events_i_package_composer_delete_package.yml index 807bdbec7d5d22601529bdcb0ab2ec7551c551d0..094a84b9e296766e08b5e97307f90b94b6edcb53 100644 --- a/config/metrics/counts_all/20210216182855_package_events_i_package_composer_delete_package.yml +++ b/config/metrics/counts_all/20210216182855_package_events_i_package_composer_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_composer_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: composer distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182901_package_events_i_package_conan_delete_package.yml b/config/metrics/counts_all/20210216182901_package_events_i_package_conan_delete_package.yml index 294c6013925841ae2e7fbd63b0c178689dd69b8b..b7f4fcdd6f5f085b3e69d3020497b697769879aa 100644 --- a/config/metrics/counts_all/20210216182901_package_events_i_package_conan_delete_package.yml +++ b/config/metrics/counts_all/20210216182901_package_events_i_package_conan_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_conan_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: conan distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182913_package_events_i_package_debian_delete_package.yml b/config/metrics/counts_all/20210216182913_package_events_i_package_debian_delete_package.yml index 12e4adc8d7594943b2153d6d89c2f6918c2f2e94..e97fe5cf98ce890fc5ce9d0bfa5eba45a9f87e02 100644 --- a/config/metrics/counts_all/20210216182913_package_events_i_package_debian_delete_package.yml +++ b/config/metrics/counts_all/20210216182913_package_events_i_package_debian_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_debian_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: debian distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182919_package_events_i_package_delete_package.yml b/config/metrics/counts_all/20210216182919_package_events_i_package_delete_package.yml index e6d78d0df6c5da920c0ec46141e1a48d9eb59700..d05de137ec612de692e222da397313a09a0e9049 100644 --- a/config/metrics/counts_all/20210216182919_package_events_i_package_delete_package.yml +++ b/config/metrics/counts_all/20210216182919_package_events_i_package_delete_package.yml @@ -6,11 +6,9 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182921_package_events_i_package_delete_package_by_deploy_token.yml b/config/metrics/counts_all/20210216182921_package_events_i_package_delete_package_by_deploy_token.yml index b6e6fe97847927cf9809df3c56954636aa6c5f03..9d2aff61382c6762ef1dc971dd198943aacf6372 100644 --- a/config/metrics/counts_all/20210216182921_package_events_i_package_delete_package_by_deploy_token.yml +++ b/config/metrics/counts_all/20210216182921_package_events_i_package_delete_package_by_deploy_token.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_delete_package_by_deploy_token +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + property: deploy_token distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182923_package_events_i_package_delete_package_by_guest.yml b/config/metrics/counts_all/20210216182923_package_events_i_package_delete_package_by_guest.yml index 5744a88f037610e9ffa5c83329a093c5a14a7d3e..80c1039cc14994e2fc30ade09d2fb462cb3614b7 100644 --- a/config/metrics/counts_all/20210216182923_package_events_i_package_delete_package_by_guest.yml +++ b/config/metrics/counts_all/20210216182923_package_events_i_package_delete_package_by_guest.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_delete_package_by_guest +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + property: guest distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182925_package_events_i_package_delete_package_by_user.yml b/config/metrics/counts_all/20210216182925_package_events_i_package_delete_package_by_user.yml index 962bfdcc519a2d5a7f05747895e78f2054ff6304..56312ce2f941132dcd8d670296e640a944b54c30 100644 --- a/config/metrics/counts_all/20210216182925_package_events_i_package_delete_package_by_user.yml +++ b/config/metrics/counts_all/20210216182925_package_events_i_package_delete_package_by_user.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_delete_package_by_user +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + property: user distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182927_package_events_i_package_generic_delete_package.yml b/config/metrics/counts_all/20210216182927_package_events_i_package_generic_delete_package.yml index 3d1750aafe93037188ace57ba2499d915cb3eaba..1a9fa81bd0f43c2dbf8d9c3a7be02384e2929667 100644 --- a/config/metrics/counts_all/20210216182927_package_events_i_package_generic_delete_package.yml +++ b/config/metrics/counts_all/20210216182927_package_events_i_package_generic_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_generic_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: generic distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182933_package_events_i_package_golang_delete_package.yml b/config/metrics/counts_all/20210216182933_package_events_i_package_golang_delete_package.yml index d72d66a74f247b713194f459a5a287c687c74e09..8c7fa464841f8ae2c24eb652410a371c7b0c981b 100644 --- a/config/metrics/counts_all/20210216182933_package_events_i_package_golang_delete_package.yml +++ b/config/metrics/counts_all/20210216182933_package_events_i_package_golang_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_golang_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: golang distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182938_package_events_i_package_maven_delete_package.yml b/config/metrics/counts_all/20210216182938_package_events_i_package_maven_delete_package.yml index e47416ca8602ce8dff4b8fe687446802ef54624f..f2ed200cc7c5d66ab89d85abaae6f2bbcde08bfc 100644 --- a/config/metrics/counts_all/20210216182938_package_events_i_package_maven_delete_package.yml +++ b/config/metrics/counts_all/20210216182938_package_events_i_package_maven_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_maven_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: maven distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182944_package_events_i_package_npm_delete_package.yml b/config/metrics/counts_all/20210216182944_package_events_i_package_npm_delete_package.yml index 3369dc2d174a1e3b3ef04f7e354c7c592b8bee9e..040fcc93c6cdcd4c771a2b7edea2e846f3a74dd8 100644 --- a/config/metrics/counts_all/20210216182944_package_events_i_package_npm_delete_package.yml +++ b/config/metrics/counts_all/20210216182944_package_events_i_package_npm_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_npm_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: npm distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216182950_package_events_i_package_nuget_delete_package.yml b/config/metrics/counts_all/20210216182950_package_events_i_package_nuget_delete_package.yml index 2bc2c2fee01891f3963c29631e5223a07a6738c8..2cce71e6cff0a6693d8c0efd61c29f923b67007e 100644 --- a/config/metrics/counts_all/20210216182950_package_events_i_package_nuget_delete_package.yml +++ b/config/metrics/counts_all/20210216182950_package_events_i_package_nuget_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_nuget_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: nuget distribution: - ee - ce diff --git a/config/metrics/counts_all/20210216183011_package_events_i_package_pypi_delete_package.yml b/config/metrics/counts_all/20210216183011_package_events_i_package_pypi_delete_package.yml index c4468639d96862aeb160d9ffed92680a5c86d9e9..d507feb9bcc5ce31adee615d86949b66ade1dccd 100644 --- a/config/metrics/counts_all/20210216183011_package_events_i_package_pypi_delete_package.yml +++ b/config/metrics/counts_all/20210216183011_package_events_i_package_pypi_delete_package.yml @@ -6,11 +6,11 @@ product_group: package_registry value_type: number status: active time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_pypi_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: pypi distribution: - ee - ce diff --git a/config/metrics/counts_all/20210303153000_package_events_i_package_rubygems_delete_package.yml b/config/metrics/counts_all/20210303153000_package_events_i_package_rubygems_delete_package.yml index 4967e08afa5b63d21dfbf59940eed59786d82c3f..0a9b2d3957a78b06f3ee4271f08970583e9becaf 100644 --- a/config/metrics/counts_all/20210303153000_package_events_i_package_rubygems_delete_package.yml +++ b/config/metrics/counts_all/20210303153000_package_events_i_package_rubygems_delete_package.yml @@ -8,11 +8,11 @@ status: active milestone: '13.10' introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53480 time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_rubygems_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: rubygems distribution: - ce - ee diff --git a/config/metrics/counts_all/20210410012200_package_events_i_package_terraform_module_delete_package.yml b/config/metrics/counts_all/20210410012200_package_events_i_package_terraform_module_delete_package.yml index 1014fb88154ce109d09958f50dd40f1daeb5462f..06310a280615e1b9c32bc5a3ebcaed5c9e9ccd0d 100644 --- a/config/metrics/counts_all/20210410012200_package_events_i_package_terraform_module_delete_package.yml +++ b/config/metrics/counts_all/20210410012200_package_events_i_package_terraform_module_delete_package.yml @@ -8,11 +8,11 @@ status: active milestone: '13.11' introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55018 time_frame: all -data_source: redis -instrumentation_class: RedisMetric -options: - prefix: package_events - event: i_package_terraform_module_delete_package +data_source: internal_events +events: + - name: delete_package_from_registry + filter: + label: terraform_module distribution: - ce - ee diff --git a/lib/gitlab/usage_data_counters/counter_events/package_events.yml b/lib/gitlab/usage_data_counters/counter_events/package_events.yml index eef4e2998623eaeefbd0fcc0765bee1a0828c31e..38bf21d70bc1bc20256a81b59142da6d9ced3473 100644 --- a/lib/gitlab/usage_data_counters/counter_events/package_events.yml +++ b/lib/gitlab/usage_data_counters/counter_events/package_events.yml @@ -1,24 +1,12 @@ --- -- i_package_composer_delete_package - i_package_composer_push_package -- i_package_conan_delete_package - i_package_conan_push_package -- i_package_debian_delete_package - i_package_debian_push_package -- i_package_delete_package -- i_package_delete_package_by_deploy_token -- i_package_delete_package_by_guest -- i_package_delete_package_by_user -- i_package_generic_delete_package - i_package_generic_push_package -- i_package_golang_delete_package - i_package_golang_push_package - i_package_helm_push_package -- i_package_maven_delete_package - i_package_maven_push_package -- i_package_npm_delete_package - i_package_npm_push_package -- i_package_nuget_delete_package - i_package_nuget_push_package - i_package_nuget_pull_symbol_package - i_package_nuget_push_symbol_package @@ -34,10 +22,7 @@ - i_package_push_symbol_package_by_deploy_token - i_package_push_symbol_package_by_guest - i_package_push_symbol_package_by_user -- i_package_pypi_delete_package - i_package_pypi_push_package -- i_package_rubygems_delete_package - i_package_rubygems_push_package -- i_package_terraform_module_delete_package - i_package_terraform_module_push_package - i_package_rpm_push_package diff --git a/lib/gitlab/usage_data_counters/total_counter_redis_key_overrides.yml b/lib/gitlab/usage_data_counters/total_counter_redis_key_overrides.yml index 35b490e3e1f695d201521b1ba4d881223f9bd54a..18ccede9657218cc9d8d6f40be460b1035aa5981 100644 --- a/lib/gitlab/usage_data_counters/total_counter_redis_key_overrides.yml +++ b/lib/gitlab/usage_data_counters/total_counter_redis_key_overrides.yml @@ -28,6 +28,12 @@ '{event_counters}_create_snippet_note': USAGE_NOTE_CREATE_SNIPPET '{event_counters}_create_wiki_page': USAGE_WIKI_PAGES_CREATE '{event_counters}_delete_design_management_design': USAGE_DESIGN_MANAGEMENT_DESIGNS_DELETE +'{event_counters}_delete_package_from_registry-filter': USAGE_PACKAGE_EVENTS_I_PACKAGE_DELETE_PACKAGE +'{event_counters}_delete_package_from_registry-filter:[label:conan]': USAGE_PACKAGE_EVENTS_I_PACKAGE_CONAN_DELETE_PACKAGE +'{event_counters}_delete_package_from_registry-filter:[label:nuget]': USAGE_PACKAGE_EVENTS_I_PACKAGE_NUGET_DELETE_PACKAGE +'{event_counters}_delete_package_from_registry-filter:[property:deploy_token]': USAGE_PACKAGE_EVENTS_I_PACKAGE_DELETE_PACKAGE_BY_DEPLOY_TOKEN +'{event_counters}_delete_package_from_registry-filter:[property:guest]': USAGE_PACKAGE_EVENTS_I_PACKAGE_DELETE_PACKAGE_BY_GUEST +'{event_counters}_delete_package_from_registry-filter:[property:user]': USAGE_PACKAGE_EVENTS_I_PACKAGE_DELETE_PACKAGE_BY_USER '{event_counters}_delete_wiki_page': USAGE_WIKI_PAGES_DELETE '{event_counters}_expand_merge_request_widget-filter:[label:accessibility]': USAGE_I_CODE_REVIEW_MERGE_REQUEST_WIDGET_ACCESSIBILITY_COUNT_EXPAND '{event_counters}_expand_merge_request_widget-filter:[label:accessibility,property:failed]': USAGE_I_CODE_REVIEW_MERGE_REQUEST_WIDGET_ACCESSIBILITY_COUNT_EXPAND_FAILED diff --git a/spec/requests/api/nuget_project_packages_spec.rb b/spec/requests/api/nuget_project_packages_spec.rb index 8252fc1c4cdfa510c49288d40c977403caa76aa5..336b6a0dbf1c79603fd0ad09badbcb9ac65dc475 100644 --- a/spec/requests/api/nuget_project_packages_spec.rb +++ b/spec/requests/api/nuget_project_packages_spec.rb @@ -390,7 +390,7 @@ def snowplow_context(user_role: :developer, event_user: user) update_visibility_to(Gitlab::VisibilityLevel.const_get(visibility.to_s.upcase, false)) end - it_behaves_like params[:shared_examples_name], params[:user_role], params[:expected_status] + it_behaves_like params[:shared_examples_name], params[:user_role], params[:expected_status], params[:auth] end end diff --git a/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb index 116e987400117b3a093a8137e3b5a621df6c2d5b..e7cdac774659eacaefa19ca9f94c44345fe6528c 100644 --- a/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb +++ b/spec/support/shared_examples/requests/api/conan_packages_shared_examples.rb @@ -593,7 +593,11 @@ project.add_maintainer(user) end - it_behaves_like 'a package tracking event', 'API::ConanPackages', 'delete_package' + it 'triggers an internal event' do + expect { subject } + .to trigger_internal_events('delete_package_from_registry') + .with(user: user, project: project, property: 'user', label: 'conan', category: 'InternalEventTracking') + end it 'deletes a package' do expect { subject }.to change { Packages::Package.count }.from(2).to(1) diff --git a/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb b/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb index 7019392a91a5a758d974799224e9df1787fabaad..c7d0c296b20a730f420e0486347b7390d9640113 100644 --- a/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb +++ b/spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb @@ -753,7 +753,7 @@ end end -RSpec.shared_examples 'process nuget delete request' do |user_type, status| +RSpec.shared_examples 'process nuget delete request' do |user_type, status, auth| context "for user type #{user_type}" do before do target.send("add_#{user_type}", user) if user_type @@ -761,7 +761,22 @@ it_behaves_like 'returning response status', status - it_behaves_like 'a package tracking event', 'API::NugetPackages', 'delete_package' + it 'triggers an internal event' do + args = { project: project, label: 'nuget', category: 'InternalEventTracking' } + + if auth.nil? + args[:property] = 'guest' + elsif auth == :deploy_token + args[:property] = 'deploy_token' + else + args[:user] = user + args[:property] = 'user' + end + + expect { subject } + .to trigger_internal_events('delete_package_from_registry') + .with(**args) + end it 'marks package for deletion' do expect { subject }.to change { package.reset.status }.from('default').to('pending_destruction')