From 6438df3a1e0fb944485cebf07976160184697d72 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 20 Jan 2021 13:34:23 -0600 Subject: Add latest changes from gitlab-org/gitlab@13-8-stable-ee --- .../aggregated_metrics/common.yml | 5 +- .../ci_template_unique_counter.rb | 37 +++ .../counter_events/guest_package_events.yml | 34 --- .../counter_events/package_events.yml | 46 +++ .../usage_data_counters/editor_unique_counter.rb | 2 +- .../guest_package_event_counter.rb | 11 - .../usage_data_counters/hll_redis_counter.rb | 31 ++- .../issue_activity_unique_counter.rb | 2 +- .../usage_data_counters/known_events/common.yml | 143 ++++++++++ .../known_events/package_events.yml | 308 +++------------------ .../merge_request_activity_unique_counter.rb | 95 +++++++ .../usage_data_counters/package_event_counter.rb | 11 + .../usage_data_counters/track_unique_events.rb | 4 +- 13 files changed, 404 insertions(+), 325 deletions(-) create mode 100644 lib/gitlab/usage_data_counters/ci_template_unique_counter.rb delete mode 100644 lib/gitlab/usage_data_counters/counter_events/guest_package_events.yml create mode 100644 lib/gitlab/usage_data_counters/counter_events/package_events.yml delete mode 100644 lib/gitlab/usage_data_counters/guest_package_event_counter.rb create mode 100644 lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb create mode 100644 lib/gitlab/usage_data_counters/package_event_counter.rb (limited to 'lib/gitlab/usage_data_counters') diff --git a/lib/gitlab/usage_data_counters/aggregated_metrics/common.yml b/lib/gitlab/usage_data_counters/aggregated_metrics/common.yml index b7c0abae227..4966afd534a 100644 --- a/lib/gitlab/usage_data_counters/aggregated_metrics/common.yml +++ b/lib/gitlab/usage_data_counters/aggregated_metrics/common.yml @@ -8,6 +8,9 @@ # Corresponding feature flag should have `default_enabled` attribute set to `false`. # This attribute is OPTIONAL and can be omitted, when `feature_flag` is missing no feature flag will be checked. --- +- name: compliance_features_track_unique_visits_union + operator: OR + events: ['g_compliance_audit_events', 'g_compliance_dashboard', 'i_compliance_audit_events', 'a_compliance_audit_events_api', 'i_compliance_credential_inventory'] - name: product_analytics_test_metrics_union operator: OR events: ['i_search_total', 'i_search_advanced', 'i_search_paid'] @@ -22,7 +25,6 @@ 'incident_management_alert_todo', 'incident_management_alert_create_incident' ] - feature_flag: usage_data_incident_management_alerts_total_unique_counts - name: incident_management_incidents_total_unique_counts operator: OR events: [ @@ -38,4 +40,3 @@ 'incident_management_incident_unrelate', 'incident_management_incident_change_confidential' ] - feature_flag: usage_data_incident_management_incidents_total_unique_counts diff --git a/lib/gitlab/usage_data_counters/ci_template_unique_counter.rb b/lib/gitlab/usage_data_counters/ci_template_unique_counter.rb new file mode 100644 index 00000000000..572ad866895 --- /dev/null +++ b/lib/gitlab/usage_data_counters/ci_template_unique_counter.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Gitlab::UsageDataCounters + class CiTemplateUniqueCounter + REDIS_SLOT = 'ci_templates'.freeze + + TEMPLATE_TO_EVENT = { + 'Auto-DevOps.gitlab-ci.yml' => 'auto_devops', + 'AWS/CF-Provision-and-Deploy-EC2.gitlab-ci.yml' => 'aws_cf_deploy_ec2', + 'AWS/Deploy-ECS.gitlab-ci.yml' => 'aws_deploy_ecs', + 'Jobs/Build.gitlab-ci.yml' => 'auto_devops_build', + 'Jobs/Deploy.gitlab-ci.yml' => 'auto_devops_deploy', + 'Jobs/Deploy.latest.gitlab-ci.yml' => 'auto_devops_deploy_latest', + 'Security/SAST.gitlab-ci.yml' => 'security_sast', + 'Security/Secret-Detection.gitlab-ci.yml' => 'security_secret_detection', + 'Terraform/Base.latest.gitlab-ci.yml' => 'terraform_base_latest' + }.freeze + + class << self + def track_unique_project_event(project_id:, template:) + return if Feature.disabled?(:usage_data_track_ci_templates_unique_projects, default_enabled: :yaml) + + if event = unique_project_event(template) + Gitlab::UsageDataCounters::HLLRedisCounter.track_event(event, values: project_id) + end + end + + private + + def unique_project_event(template) + if name = TEMPLATE_TO_EVENT[template] + "p_#{REDIS_SLOT}_#{name}" + end + end + end + end +end diff --git a/lib/gitlab/usage_data_counters/counter_events/guest_package_events.yml b/lib/gitlab/usage_data_counters/counter_events/guest_package_events.yml deleted file mode 100644 index a9b9f8ea235..00000000000 --- a/lib/gitlab/usage_data_counters/counter_events/guest_package_events.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -- i_package_composer_guest_delete -- i_package_composer_guest_pull -- i_package_composer_guest_push -- i_package_conan_guest_delete -- i_package_conan_guest_pull -- i_package_conan_guest_push -- i_package_container_guest_delete -- i_package_container_guest_pull -- i_package_container_guest_push -- i_package_debian_guest_delete -- i_package_debian_guest_pull -- i_package_debian_guest_push -- i_package_generic_guest_delete -- i_package_generic_guest_pull -- i_package_generic_guest_push -- i_package_golang_guest_delete -- i_package_golang_guest_pull -- i_package_golang_guest_push -- i_package_maven_guest_delete -- i_package_maven_guest_pull -- i_package_maven_guest_push -- i_package_npm_guest_delete -- i_package_npm_guest_pull -- i_package_npm_guest_push -- i_package_nuget_guest_delete -- i_package_nuget_guest_pull -- i_package_nuget_guest_push -- i_package_pypi_guest_delete -- i_package_pypi_guest_pull -- i_package_pypi_guest_push -- i_package_tag_guest_delete -- i_package_tag_guest_pull -- i_package_tag_guest_push diff --git a/lib/gitlab/usage_data_counters/counter_events/package_events.yml b/lib/gitlab/usage_data_counters/counter_events/package_events.yml new file mode 100644 index 00000000000..f6bddabdd44 --- /dev/null +++ b/lib/gitlab/usage_data_counters/counter_events/package_events.yml @@ -0,0 +1,46 @@ +--- +- i_package_composer_delete_package +- i_package_composer_pull_package +- i_package_composer_push_package +- i_package_conan_delete_package +- i_package_conan_pull_package +- i_package_conan_push_package +- i_package_container_delete_package +- i_package_container_pull_package +- i_package_container_push_package +- i_package_debian_delete_package +- i_package_debian_pull_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_pull_package +- i_package_generic_push_package +- i_package_golang_delete_package +- i_package_golang_pull_package +- i_package_golang_push_package +- i_package_maven_delete_package +- i_package_maven_pull_package +- i_package_maven_push_package +- i_package_npm_delete_package +- i_package_npm_pull_package +- i_package_npm_push_package +- i_package_nuget_delete_package +- i_package_nuget_pull_package +- i_package_nuget_push_package +- i_package_pull_package +- i_package_pull_package_by_deploy_token +- i_package_pull_package_by_guest +- i_package_pull_package_by_user +- i_package_push_package +- i_package_push_package_by_deploy_token +- i_package_push_package_by_guest +- i_package_push_package_by_user +- i_package_pypi_delete_package +- i_package_pypi_pull_package +- i_package_pypi_push_package +- i_package_tag_delete_package +- i_package_tag_pull_package +- i_package_tag_push_package diff --git a/lib/gitlab/usage_data_counters/editor_unique_counter.rb b/lib/gitlab/usage_data_counters/editor_unique_counter.rb index eeb26c11bfa..bef3fc7b504 100644 --- a/lib/gitlab/usage_data_counters/editor_unique_counter.rb +++ b/lib/gitlab/usage_data_counters/editor_unique_counter.rb @@ -53,7 +53,7 @@ module Gitlab return unless Feature.enabled?(:track_editor_edit_actions, default_enabled: true) return unless author - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(author.id, action, time) + Gitlab::UsageDataCounters::HLLRedisCounter.track_event(action, values: author.id, time: time) end def count_unique(actions, date_from, date_to) diff --git a/lib/gitlab/usage_data_counters/guest_package_event_counter.rb b/lib/gitlab/usage_data_counters/guest_package_event_counter.rb deleted file mode 100644 index a9bcbfadda2..00000000000 --- a/lib/gitlab/usage_data_counters/guest_package_event_counter.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module UsageDataCounters - class GuestPackageEventCounter < BaseCounter - KNOWN_EVENTS_PATH = File.expand_path('counter_events/guest_package_events.yml', __dir__) - KNOWN_EVENTS = YAML.safe_load(File.read(KNOWN_EVENTS_PATH)).freeze - PREFIX = 'package_guest' - end - end -end diff --git a/lib/gitlab/usage_data_counters/hll_redis_counter.rb b/lib/gitlab/usage_data_counters/hll_redis_counter.rb index b61720c7638..47361d831b2 100644 --- a/lib/gitlab/usage_data_counters/hll_redis_counter.rb +++ b/lib/gitlab/usage_data_counters/hll_redis_counter.rb @@ -39,20 +39,31 @@ module Gitlab # # Usage: # - # * Track event: Gitlab::UsageDataCounters::HLLRedisCounter.track_event(user_id, 'g_compliance_dashboard') + # * Track event: Gitlab::UsageDataCounters::HLLRedisCounter.track_event('g_compliance_dashboard', values: user_id) # * Get unique counts per user: Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(event_names: 'g_compliance_dashboard', start_date: 28.days.ago, end_date: Date.current) class << self include Gitlab::Utils::UsageData - def track_event(value, event_name, time = Time.zone.now) - track(value, event_name, time: time) - end - - def track_event_in_context(value, event_name, context, time = Time.zone.now) + # Track unique events + # + # event_name - The event name. + # values - One or multiple values counted. + # time - Time of the action, set to Time.current. + def track_event(event_name, values:, time: Time.current) + track(values, event_name, time: time) + end + + # Track unique events + # + # event_name - The event name. + # values - One or multiple values counted. + # context - Event context, plan level tracking. + # time - Time of the action, set to Time.current. + def track_event_in_context(event_name, values:, context:, time: Time.zone.now) return if context.blank? return unless context.in?(valid_context_list) - track(value, event_name, context: context, time: time) + track(values, event_name, context: context, time: time) end def unique_events(event_names:, start_date:, end_date:, context: '') @@ -114,16 +125,16 @@ module Gitlab private - def track(value, event_name, context: '', time: Time.zone.now) + def track(values, event_name, context: '', time: Time.zone.now) return unless Gitlab::CurrentSettings.usage_ping_enabled? event = event_for(event_name) raise UnknownEvent, "Unknown event #{event_name}" unless event.present? - Gitlab::Redis::HLL.add(key: redis_key(event, time, context), value: value, expiry: expiry(event)) + Gitlab::Redis::HLL.add(key: redis_key(event, time, context), value: values, expiry: expiry(event)) end - # The aray of valid context on which we allow tracking + # The array of valid context on which we allow tracking def valid_context_list Plan.all_plans end diff --git a/lib/gitlab/usage_data_counters/issue_activity_unique_counter.rb b/lib/gitlab/usage_data_counters/issue_activity_unique_counter.rb index 0fed8e1c211..f649e7f407d 100644 --- a/lib/gitlab/usage_data_counters/issue_activity_unique_counter.rb +++ b/lib/gitlab/usage_data_counters/issue_activity_unique_counter.rb @@ -148,7 +148,7 @@ module Gitlab return unless Feature.enabled?(:track_issue_activity_actions, default_enabled: true) return unless author - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(author.id, action, time) + Gitlab::UsageDataCounters::HLLRedisCounter.track_event(action, values: author.id, time: time) end end end diff --git a/lib/gitlab/usage_data_counters/known_events/common.yml b/lib/gitlab/usage_data_counters/known_events/common.yml index 25cf388aedf..4cbde0c0372 100644 --- a/lib/gitlab/usage_data_counters/known_events/common.yml +++ b/lib/gitlab/usage_data_counters/known_events/common.yml @@ -248,6 +248,26 @@ redis_slot: testing aggregation: weekly feature_flag: usage_data_i_testing_test_case_parsed +- name: i_testing_metrics_report_widget_total + category: testing + redis_slot: testing + aggregation: weekly + feature_flag: usage_data_i_testing_metrics_report_widget_total +- name: i_testing_group_code_coverage_visit_total + category: testing + redis_slot: testing + aggregation: weekly + feature_flag: usage_data_i_testing_group_code_coverage_visit_total +- name: i_testing_full_code_quality_report_total + category: testing + redis_slot: testing + aggregation: weekly + feature_flag: usage_data_i_testing_full_code_quality_report_total +- name: i_testing_web_performance_widget_total + category: testing + redis_slot: testing + aggregation: weekly + feature_flag: usage_data_i_testing_web_performance_widget_total # Project Management group - name: g_project_management_issue_title_changed category: issues_edit @@ -425,3 +445,126 @@ redis_slot: snippets aggregation: weekly feature_flag: usage_data_i_snippets_show +# Merge request counters +- name: i_code_review_mr_diffs + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_mr_diffs +- name: i_code_review_user_single_file_diffs + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_single_file_diffs +- name: i_code_review_mr_single_file_diffs + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_mr_single_file_diffs +- name: i_code_review_user_create_mr + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_create_mr +- name: i_code_review_user_close_mr + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_close_mr +- name: i_code_review_user_reopen_mr + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_reopen_mr +- name: i_code_review_user_merge_mr + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_merge_mr +- name: i_code_review_user_create_mr_comment + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_create_mr_comment +- name: i_code_review_user_edit_mr_comment + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_edit_mr_comment +- name: i_code_review_user_remove_mr_comment + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_remove_mr_comment +- name: i_code_review_user_create_review_note + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_create_review_note +- name: i_code_review_user_publish_review + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_publish_review +- name: i_code_review_user_create_multiline_mr_comment + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_create_multiline_mr_comment +- name: i_code_review_user_edit_multiline_mr_comment + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_edit_multiline_mr_comment +- name: i_code_review_user_remove_multiline_mr_comment + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_remove_multiline_mr_comment +# Terraform +- name: p_terraform_state_api_unique_users + category: terraform + redis_slot: terraform + aggregation: weekly + feature_flag: usage_data_p_terraform_state_api_unique_users +# CI templates +- name: p_ci_templates_auto_devops + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_aws_cf_deploy_ec2 + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_auto_devops_build + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_auto_devops_deploy + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_auto_devops_deploy_latest + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_security_sast + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_security_secret_detection + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects +- name: p_ci_templates_terraform_base_latest + category: ci_templates + redis_slot: ci_templates + aggregation: weekly + feature_flag: usage_data_track_ci_templates_unique_projects diff --git a/lib/gitlab/usage_data_counters/known_events/package_events.yml b/lib/gitlab/usage_data_counters/known_events/package_events.yml index 4c3138dc000..78a2a587b34 100644 --- a/lib/gitlab/usage_data_counters/known_events/package_events.yml +++ b/lib/gitlab/usage_data_counters/known_events/package_events.yml @@ -1,331 +1,111 @@ --- -- name: i_package_composer_deploy_token_delete - category: composer_packages +- name: i_package_composer_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_composer_deploy_token_pull - category: composer_packages +- name: i_package_composer_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_composer_deploy_token_push - category: composer_packages +- name: i_package_conan_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_composer_user_delete - category: composer_packages +- name: i_package_conan_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_composer_user_pull - category: composer_packages +- name: i_package_container_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_composer_user_push - category: composer_packages +- name: i_package_container_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_conan_deploy_token_delete - category: conan_packages +- name: i_package_debian_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_conan_deploy_token_pull - category: conan_packages +- name: i_package_debian_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_conan_deploy_token_push - category: conan_packages +- name: i_package_generic_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_conan_user_delete - category: conan_packages +- name: i_package_generic_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_conan_user_pull - category: conan_packages +- name: i_package_golang_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_conan_user_push - category: conan_packages +- name: i_package_golang_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_container_deploy_token_delete - category: container_packages +- name: i_package_maven_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_container_deploy_token_pull - category: container_packages +- name: i_package_maven_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_container_deploy_token_push - category: container_packages +- name: i_package_npm_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_container_user_delete - category: container_packages +- name: i_package_npm_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_container_user_pull - category: container_packages +- name: i_package_nuget_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_container_user_push - category: container_packages +- name: i_package_nuget_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_debian_deploy_token_delete - category: debian_packages +- name: i_package_pypi_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_debian_deploy_token_pull - category: debian_packages +- name: i_package_pypi_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_debian_deploy_token_push - category: debian_packages +- name: i_package_tag_deploy_token + category: deploy_token_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis -- name: i_package_debian_user_delete - category: debian_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_debian_user_pull - category: debian_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_debian_user_push - category: debian_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_generic_deploy_token_delete - category: generic_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_generic_deploy_token_pull - category: generic_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_generic_deploy_token_push - category: generic_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_generic_user_delete - category: generic_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_generic_user_pull - category: generic_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_generic_user_push - category: generic_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_golang_deploy_token_delete - category: golang_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_golang_deploy_token_pull - category: golang_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_golang_deploy_token_push - category: golang_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_golang_user_delete - category: golang_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_golang_user_pull - category: golang_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_golang_user_push - category: golang_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_maven_deploy_token_delete - category: maven_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_maven_deploy_token_pull - category: maven_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_maven_deploy_token_push - category: maven_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_maven_user_delete - category: maven_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_maven_user_pull - category: maven_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_maven_user_push - category: maven_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_npm_deploy_token_delete - category: npm_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_npm_deploy_token_pull - category: npm_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_npm_deploy_token_push - category: npm_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_npm_user_delete - category: npm_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_npm_user_pull - category: npm_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_npm_user_push - category: npm_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_nuget_deploy_token_delete - category: nuget_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_nuget_deploy_token_pull - category: nuget_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_nuget_deploy_token_push - category: nuget_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_nuget_user_delete - category: nuget_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_nuget_user_pull - category: nuget_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_nuget_user_push - category: nuget_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_pypi_deploy_token_delete - category: pypi_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_pypi_deploy_token_pull - category: pypi_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_pypi_deploy_token_push - category: pypi_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_pypi_user_delete - category: pypi_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_pypi_user_pull - category: pypi_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_pypi_user_push - category: pypi_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_tag_deploy_token_delete - category: tag_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_tag_deploy_token_pull - category: tag_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_tag_deploy_token_push - category: tag_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_tag_user_delete - category: tag_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_tag_user_pull - category: tag_packages - aggregation: weekly - redis_slot: package - feature_flag: collect_package_events_redis -- name: i_package_tag_user_push - category: tag_packages +- name: i_package_tag_user + category: user_packages aggregation: weekly redis_slot: package feature_flag: collect_package_events_redis diff --git a/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb new file mode 100644 index 00000000000..11d59257ed9 --- /dev/null +++ b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb @@ -0,0 +1,95 @@ +# frozen_string_literal: true + +module Gitlab + module UsageDataCounters + module MergeRequestActivityUniqueCounter + MR_DIFFS_ACTION = 'i_code_review_mr_diffs' + MR_DIFFS_SINGLE_FILE_ACTION = 'i_code_review_mr_single_file_diffs' + MR_DIFFS_USER_SINGLE_FILE_ACTION = 'i_code_review_user_single_file_diffs' + MR_CREATE_ACTION = 'i_code_review_user_create_mr' + MR_CLOSE_ACTION = 'i_code_review_user_close_mr' + MR_REOPEN_ACTION = 'i_code_review_user_reopen_mr' + MR_MERGE_ACTION = 'i_code_review_user_merge_mr' + MR_CREATE_COMMENT_ACTION = 'i_code_review_user_create_mr_comment' + MR_EDIT_COMMENT_ACTION = 'i_code_review_user_edit_mr_comment' + MR_REMOVE_COMMENT_ACTION = 'i_code_review_user_remove_mr_comment' + MR_CREATE_REVIEW_NOTE_ACTION = 'i_code_review_user_create_review_note' + MR_PUBLISH_REVIEW_ACTION = 'i_code_review_user_publish_review' + MR_CREATE_MULTILINE_COMMENT_ACTION = 'i_code_review_user_create_multiline_mr_comment' + MR_EDIT_MULTILINE_COMMENT_ACTION = 'i_code_review_user_edit_multiline_mr_comment' + MR_REMOVE_MULTILINE_COMMENT_ACTION = 'i_code_review_user_remove_multiline_mr_comment' + + class << self + def track_mr_diffs_action(merge_request:) + track_unique_action_by_merge_request(MR_DIFFS_ACTION, merge_request) + end + + def track_mr_diffs_single_file_action(merge_request:, user:) + track_unique_action_by_merge_request(MR_DIFFS_SINGLE_FILE_ACTION, merge_request) + track_unique_action_by_user(MR_DIFFS_USER_SINGLE_FILE_ACTION, user) + end + + def track_create_mr_action(user:) + track_unique_action_by_user(MR_CREATE_ACTION, user) + end + + def track_close_mr_action(user:) + track_unique_action_by_user(MR_CLOSE_ACTION, user) + end + + def track_merge_mr_action(user:) + track_unique_action_by_user(MR_MERGE_ACTION, user) + end + + def track_reopen_mr_action(user:) + track_unique_action_by_user(MR_REOPEN_ACTION, user) + end + + def track_create_comment_action(note:) + track_unique_action_by_user(MR_CREATE_COMMENT_ACTION, note.author) + track_multiline_unique_action(MR_CREATE_MULTILINE_COMMENT_ACTION, note) + end + + def track_edit_comment_action(note:) + track_unique_action_by_user(MR_EDIT_COMMENT_ACTION, note.author) + track_multiline_unique_action(MR_EDIT_MULTILINE_COMMENT_ACTION, note) + end + + def track_remove_comment_action(note:) + track_unique_action_by_user(MR_REMOVE_COMMENT_ACTION, note.author) + track_multiline_unique_action(MR_REMOVE_MULTILINE_COMMENT_ACTION, note) + end + + def track_create_review_note_action(user:) + track_unique_action_by_user(MR_CREATE_REVIEW_NOTE_ACTION, user) + end + + def track_publish_review_action(user:) + track_unique_action_by_user(MR_PUBLISH_REVIEW_ACTION, user) + end + + private + + def track_unique_action_by_merge_request(action, merge_request) + track_unique_action(action, merge_request.id) + end + + def track_unique_action_by_user(action, user) + return unless user + + track_unique_action(action, user.id) + end + + def track_unique_action(action, value) + Gitlab::UsageDataCounters::HLLRedisCounter.track_usage_event(action, value) + end + + def track_multiline_unique_action(action, note) + return unless note.is_a?(DiffNote) && note.multiline? + + track_unique_action_by_user(action, note.author) + end + end + end + end +end diff --git a/lib/gitlab/usage_data_counters/package_event_counter.rb b/lib/gitlab/usage_data_counters/package_event_counter.rb new file mode 100644 index 00000000000..700b518eae3 --- /dev/null +++ b/lib/gitlab/usage_data_counters/package_event_counter.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Gitlab + module UsageDataCounters + class PackageEventCounter < BaseCounter + KNOWN_EVENTS_PATH = File.expand_path('counter_events/package_events.yml', __dir__) + KNOWN_EVENTS = YAML.safe_load(File.read(KNOWN_EVENTS_PATH)).freeze + PREFIX = 'package_events' + end + end +end diff --git a/lib/gitlab/usage_data_counters/track_unique_events.rb b/lib/gitlab/usage_data_counters/track_unique_events.rb index 95380ae0b1d..20da9665876 100644 --- a/lib/gitlab/usage_data_counters/track_unique_events.rb +++ b/lib/gitlab/usage_data_counters/track_unique_events.rb @@ -43,7 +43,7 @@ module Gitlab return unless Gitlab::UsageDataCounters::HLLRedisCounter.known_event?(transformed_action.to_s) - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(author_id, transformed_action.to_s, time) + Gitlab::UsageDataCounters::HLLRedisCounter.track_event(transformed_action.to_s, values: author_id, time: time) track_git_write_action(author_id, transformed_action, time) end @@ -73,7 +73,7 @@ module Gitlab def track_git_write_action(author_id, transformed_action, time) return unless GIT_WRITE_ACTIONS.include?(transformed_action) - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(author_id, GIT_WRITE_ACTION, time) + Gitlab::UsageDataCounters::HLLRedisCounter.track_event(GIT_WRITE_ACTION, values: author_id, time: time) end end end -- cgit v1.2.1