Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-20 13:43:29 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-20 13:43:29 +0300
commit3b1af5cc7ed2666ff18b718ce5d30fa5a2756674 (patch)
tree3bc4a40e0ee51ec27eabf917c537033c0c5b14d4 /lib/gitlab/usage_data_counters
parent9bba14be3f2c211bf79e15769cd9b77bc73a13bc (diff)
Add latest changes from gitlab-org/gitlab@16-1-stable-eev16.1.0-rc42
Diffstat (limited to 'lib/gitlab/usage_data_counters')
-rw-r--r--lib/gitlab/usage_data_counters/hll_redis_counter.rb80
-rw-r--r--lib/gitlab/usage_data_counters/jetbrains_bundled_plugin_activity_unique_counter.rb29
-rw-r--r--lib/gitlab/usage_data_counters/known_events/ci_templates.yml2
-rw-r--r--lib/gitlab/usage_data_counters/known_events/code_review_events.yml2
-rw-r--r--lib/gitlab/usage_data_counters/known_events/product_analytics.yml4
-rw-r--r--lib/gitlab/usage_data_counters/known_events/quickactions.yml4
-rw-r--r--lib/gitlab/usage_data_counters/known_events/workspaces.yml5
-rw-r--r--lib/gitlab/usage_data_counters/kubernetes_agent_counter.rb2
-rw-r--r--lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb17
9 files changed, 67 insertions, 78 deletions
diff --git a/lib/gitlab/usage_data_counters/hll_redis_counter.rb b/lib/gitlab/usage_data_counters/hll_redis_counter.rb
index badcda1def0..eaa4bf15fe1 100644
--- a/lib/gitlab/usage_data_counters/hll_redis_counter.rb
+++ b/lib/gitlab/usage_data_counters/hll_redis_counter.rb
@@ -3,18 +3,14 @@
module Gitlab
module UsageDataCounters
module HLLRedisCounter
- DEFAULT_WEEKLY_KEY_EXPIRY_LENGTH = 6.weeks
- DEFAULT_DAILY_KEY_EXPIRY_LENGTH = 29.days
+ KEY_EXPIRY_LENGTH = 6.weeks
REDIS_SLOT = 'hll_counters'
EventError = Class.new(StandardError)
UnknownEvent = Class.new(EventError)
- UnknownAggregation = Class.new(EventError)
- AggregationMismatch = Class.new(EventError)
InvalidContext = Class.new(EventError)
KNOWN_EVENTS_PATH = File.expand_path('known_events/*.yml', __dir__)
- ALLOWED_AGGREGATIONS = %i(daily weekly).freeze
# Track event on entity_id
# Increment a Redis HLL counter for unique event_name and entity_id
@@ -24,7 +20,6 @@ module Gitlab
# Event example:
#
# - name: g_compliance_dashboard # Unique event name
- # aggregation: weekly # Aggregation level, keys are stored weekly
#
# Usage:
#
@@ -63,8 +58,7 @@ module Gitlab
# end_date - The end date of the time range.
# context - Event context, plan level tracking. Available if set when tracking.
def unique_events(event_names:, start_date:, end_date:, context: '')
- count_unique_events(event_names: event_names, start_date: start_date, end_date: end_date, context: context) do |events|
- raise AggregationMismatch, events unless events_same_aggregation?(events)
+ count_unique_events(event_names: event_names, start_date: start_date, end_date: end_date, context: context) do
raise InvalidContext if context.present? && !context.in?(valid_context_list)
end
end
@@ -78,9 +72,7 @@ module Gitlab
end
def calculate_events_union(event_names:, start_date:, end_date:)
- count_unique_events(event_names: event_names, start_date: start_date, end_date: end_date) do |events|
- raise AggregationMismatch, events unless events_same_aggregation?(events)
- end
+ count_unique_events(event_names: event_names, start_date: start_date, end_date: end_date)
end
private
@@ -94,12 +86,7 @@ module Gitlab
return if event.blank?
return unless Feature.enabled?(:redis_hll_tracking, type: :ops)
- if event[:aggregation].to_sym == :daily
- weekly_event = event.dup.tap { |e| e['aggregation'] = 'weekly' }
- Gitlab::Redis::HLL.add(key: redis_key(weekly_event, time, context), value: values, expiry: expiry(weekly_event))
- end
-
- Gitlab::Redis::HLL.add(key: redis_key(event, time, context), value: values, expiry: expiry(event))
+ Gitlab::Redis::HLL.add(key: redis_key(event, time, context), value: values, expiry: KEY_EXPIRY_LENGTH)
rescue StandardError => e
# Ignore any exceptions unless is dev or test env
@@ -117,25 +104,18 @@ module Gitlab
yield events if block_given?
- aggregation = events.first[:aggregation]
-
- if Feature.disabled?(:revert_daily_hll_events_to_weekly_aggregation)
- aggregation = 'weekly'
- events = events.map { |e| e.merge(aggregation: 'weekly') }
- end
+ keys = keys_for_aggregation(events: events, start_date: start_date, end_date: end_date, context: context)
- keys = keys_for_aggregation(aggregation, events: events, start_date: start_date, end_date: end_date, context: context)
return FALLBACK unless keys.any?
redis_usage_data { Gitlab::Redis::HLL.count(keys: keys) }
end
- def keys_for_aggregation(aggregation, events:, start_date:, end_date:, context: '')
- if aggregation.to_sym == :daily
- daily_redis_keys(events: events, start_date: start_date, end_date: end_date, context: context)
- else
- weekly_redis_keys(events: events, start_date: start_date, end_date: end_date, context: context)
- end
+ def keys_for_aggregation(events:, start_date:, end_date:, context: '')
+ end_date = end_date.end_of_week - 1.week
+ (start_date.to_date..end_date.to_date).map do |date|
+ events.map { |event| redis_key(event, date, context) }
+ end.flatten.uniq
end
def load_events(wildcard)
@@ -152,15 +132,6 @@ module Gitlab
known_events.map { |event| event[:name] }
end
- def events_same_aggregation?(events)
- aggregation = events.first[:aggregation]
- events.all? { |event| event[:aggregation] == aggregation }
- end
-
- def expiry(event)
- event[:aggregation].to_sym == :daily ? DEFAULT_DAILY_KEY_EXPIRY_LENGTH : DEFAULT_WEEKLY_KEY_EXPIRY_LENGTH
- end
-
def event_for(event_name)
known_events.find { |event| event[:name] == event_name.to_s }
end
@@ -173,36 +144,13 @@ module Gitlab
def redis_key(event, time, context = '')
raise UnknownEvent, "Unknown event #{event[:name]}" unless known_events_names.include?(event[:name].to_s)
- # ToDo: remove during https://gitlab.com/groups/gitlab-org/-/epics/9542 cleanup
- raise UnknownAggregation, "Use :daily or :weekly aggregation" unless ALLOWED_AGGREGATIONS.include?(event[:aggregation].to_sym)
-
key = "{#{REDIS_SLOT}}_#{event[:name]}"
- key = apply_time_aggregation(key, time, event)
- key = "#{context}_#{key}" if context.present?
- key
- end
- def apply_time_aggregation(key, time, event)
- if event[:aggregation].to_sym == :daily
- year_day = time.strftime('%G-%j')
- "#{year_day}-#{key}"
- else
- year_week = time.strftime('%G-%V')
- "#{key}-#{year_week}"
- end
- end
+ year_week = time.strftime('%G-%V')
+ key = "#{key}-#{year_week}"
- def daily_redis_keys(events:, start_date:, end_date:, context: '')
- (start_date.to_date..end_date.to_date).map do |date|
- events.map { |event| redis_key(event, date, context) }
- end.flatten
- end
-
- def weekly_redis_keys(events:, start_date:, end_date:, context: '')
- end_date = end_date.end_of_week - 1.week
- (start_date.to_date..end_date.to_date).map do |date|
- events.map { |event| redis_key(event, date, context) }
- end.flatten.uniq
+ key = "#{context}_#{key}" if context.present?
+ key
end
end
end
diff --git a/lib/gitlab/usage_data_counters/jetbrains_bundled_plugin_activity_unique_counter.rb b/lib/gitlab/usage_data_counters/jetbrains_bundled_plugin_activity_unique_counter.rb
new file mode 100644
index 00000000000..a9e8d9bf0cb
--- /dev/null
+++ b/lib/gitlab/usage_data_counters/jetbrains_bundled_plugin_activity_unique_counter.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module UsageDataCounters
+ module JetBrainsBundledPluginActivityUniqueCounter
+ JETBRAINS_BUNDLED_API_REQUEST_ACTION = 'i_editor_extensions_user_jetbrains_bundled_api_request'
+ JETBRAINS_BUNDLED_USER_AGENT_REGEX = /\AIntelliJ-GitLab-Plugin/
+
+ class << self
+ def track_api_request_when_trackable(user_agent:, user:)
+ user_agent&.match?(JETBRAINS_BUNDLED_USER_AGENT_REGEX) &&
+ track_unique_action_by_user(JETBRAINS_BUNDLED_API_REQUEST_ACTION, user)
+ end
+
+ private
+
+ 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
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/usage_data_counters/known_events/ci_templates.yml b/lib/gitlab/usage_data_counters/known_events/ci_templates.yml
index f685f0d65d9..c3e1c34151b 100644
--- a/lib/gitlab/usage_data_counters/known_events/ci_templates.yml
+++ b/lib/gitlab/usage_data_counters/known_events/ci_templates.yml
@@ -307,3 +307,5 @@
aggregation: weekly
- name: p_ci_templates_terraform_module
aggregation: weekly
+- name: p_ci_templates_pages_zola
+ aggregation: weekly
diff --git a/lib/gitlab/usage_data_counters/known_events/code_review_events.yml b/lib/gitlab/usage_data_counters/known_events/code_review_events.yml
index db0c0653f63..bd8c79f4801 100644
--- a/lib/gitlab/usage_data_counters/known_events/code_review_events.yml
+++ b/lib/gitlab/usage_data_counters/known_events/code_review_events.yml
@@ -79,6 +79,8 @@
aggregation: weekly
- name: i_code_review_user_jetbrains_api_request
aggregation: weekly
+- name: i_editor_extensions_user_jetbrains_bundled_api_request
+ aggregation: weekly
- name: i_code_review_user_gitlab_cli_api_request
aggregation: weekly
- name: i_code_review_user_create_mr_from_issue
diff --git a/lib/gitlab/usage_data_counters/known_events/product_analytics.yml b/lib/gitlab/usage_data_counters/known_events/product_analytics.yml
index 5a791c4b3c2..c43bf9040dd 100644
--- a/lib/gitlab/usage_data_counters/known_events/product_analytics.yml
+++ b/lib/gitlab/usage_data_counters/known_events/product_analytics.yml
@@ -2,3 +2,7 @@
aggregation: weekly
- name: project_initialized_product_analytics
aggregation: weekly
+- name: user_created_analytics_dashboard
+ aggregation: weekly
+- name: user_visited_dashboard
+ aggregation: weekly
diff --git a/lib/gitlab/usage_data_counters/known_events/quickactions.yml b/lib/gitlab/usage_data_counters/known_events/quickactions.yml
index 136d284f462..69f92ac5c0a 100644
--- a/lib/gitlab/usage_data_counters/known_events/quickactions.yml
+++ b/lib/gitlab/usage_data_counters/known_events/quickactions.yml
@@ -133,3 +133,7 @@
aggregation: weekly
- name: i_quickactions_blocks
aggregation: weekly
+- name: i_quickactions_unlink
+ aggregation: weekly
+- name: i_quickactions_promote_to
+ aggregation: weekly
diff --git a/lib/gitlab/usage_data_counters/known_events/workspaces.yml b/lib/gitlab/usage_data_counters/known_events/workspaces.yml
new file mode 100644
index 00000000000..8a96524b167
--- /dev/null
+++ b/lib/gitlab/usage_data_counters/known_events/workspaces.yml
@@ -0,0 +1,5 @@
+- name: users_updating_workspaces
+ aggregation: weekly
+
+- name: users_creating_workspaces
+ aggregation: weekly
diff --git a/lib/gitlab/usage_data_counters/kubernetes_agent_counter.rb b/lib/gitlab/usage_data_counters/kubernetes_agent_counter.rb
index d6e05f30a0d..ece2ffea83b 100644
--- a/lib/gitlab/usage_data_counters/kubernetes_agent_counter.rb
+++ b/lib/gitlab/usage_data_counters/kubernetes_agent_counter.rb
@@ -4,7 +4,7 @@ module Gitlab
module UsageDataCounters
class KubernetesAgentCounter < BaseCounter
PREFIX = 'kubernetes_agent'
- KNOWN_EVENTS = %w[gitops_sync k8s_api_proxy_request].freeze
+ KNOWN_EVENTS = %w[gitops_sync k8s_api_proxy_request flux_git_push_notifications_total].freeze
class << self
def increment_event_counts(events)
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
index fceeacb60ca..1ed2e891a1f 100644
--- a/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb
+++ b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb
@@ -64,20 +64,15 @@ module Gitlab
end
def track_create_mr_action(user:, merge_request:)
- track_unique_action_by_user(MR_USER_CREATE_ACTION, user)
track_unique_action_by_merge_request(MR_CREATE_ACTION, merge_request)
project = merge_request.target_project
- Gitlab::Tracking.event(
- name,
- :create,
- project: project,
- namespace: project.namespace,
- user: user,
- property: MR_USER_CREATE_ACTION,
- label: 'redis_hll_counters.code_review.i_code_review_user_create_mr_monthly',
- context: [Gitlab::Tracking::ServicePingContext.new(data_source: :redis_hll,
- event: MR_USER_CREATE_ACTION).to_context]
+
+ Gitlab::InternalEvents.track_event(
+ MR_USER_CREATE_ACTION,
+ user_id: user.id,
+ project_id: project.id,
+ namespace_id: project.namespace_id
)
end