summaryrefslogtreecommitdiff
path: root/lib/gitlab/usage_data_counters
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2021-01-20 13:34:23 -0600
committerRobert Speicher <rspeicher@gmail.com>2021-01-20 13:34:23 -0600
commit6438df3a1e0fb944485cebf07976160184697d72 (patch)
tree00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /lib/gitlab/usage_data_counters
parent42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff)
downloadgitlab-ce-6438df3a1e0fb944485cebf07976160184697d72.tar.gz
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'lib/gitlab/usage_data_counters')
-rw-r--r--lib/gitlab/usage_data_counters/aggregated_metrics/common.yml5
-rw-r--r--lib/gitlab/usage_data_counters/ci_template_unique_counter.rb37
-rw-r--r--lib/gitlab/usage_data_counters/counter_events/guest_package_events.yml34
-rw-r--r--lib/gitlab/usage_data_counters/counter_events/package_events.yml46
-rw-r--r--lib/gitlab/usage_data_counters/editor_unique_counter.rb2
-rw-r--r--lib/gitlab/usage_data_counters/guest_package_event_counter.rb11
-rw-r--r--lib/gitlab/usage_data_counters/hll_redis_counter.rb31
-rw-r--r--lib/gitlab/usage_data_counters/issue_activity_unique_counter.rb2
-rw-r--r--lib/gitlab/usage_data_counters/known_events/common.yml143
-rw-r--r--lib/gitlab/usage_data_counters/known_events/package_events.yml308
-rw-r--r--lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb95
-rw-r--r--lib/gitlab/usage_data_counters/package_event_counter.rb11
-rw-r--r--lib/gitlab/usage_data_counters/track_unique_events.rb4
13 files changed, 404 insertions, 325 deletions
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