diff --git a/config/events/k8s_api_proxy_requests_unique_users_via_ci_access.yml b/config/events/k8s_api_proxy_requests_unique_users_via_ci_access.yml new file mode 100644 index 0000000000000000000000000000000000000000..e1c7dc1bb28bd2a04392d6c7536bfd273b300de5 --- /dev/null +++ b/config/events/k8s_api_proxy_requests_unique_users_via_ci_access.yml @@ -0,0 +1,22 @@ +--- +description: Kubernetes API proxy request using the CI/CD Tunnel via CI Access +category: InternalEventTracking +action: k8s_api_proxy_requests_unique_users_via_ci_access +label_description: +property_description: +value_description: +extra_properties: +identifiers: +- user +product_section: ops +product_stage: deploy +product_group: environments +milestone: "16.7" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137488 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/events/k8s_api_proxy_requests_unique_users_via_pat_access.yml b/config/events/k8s_api_proxy_requests_unique_users_via_pat_access.yml new file mode 100644 index 0000000000000000000000000000000000000000..d9b19bbfc1d29a56b93767ad8fcf1ec5c5164607 --- /dev/null +++ b/config/events/k8s_api_proxy_requests_unique_users_via_pat_access.yml @@ -0,0 +1,22 @@ +--- +description: Kubernetes API proxy request via Personal Access Token Access +category: InternalEventTracking +action: k8s_api_proxy_requests_unique_users_via_pat_access +label_description: +property_description: +value_description: +extra_properties: +identifiers: +- user +product_section: ops +product_stage: deploy +product_group: environments +milestone: "16.7" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137488 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/events/k8s_api_proxy_requests_unique_users_via_user_access.yml b/config/events/k8s_api_proxy_requests_unique_users_via_user_access.yml new file mode 100644 index 0000000000000000000000000000000000000000..4dc5d4f7d4bc4d878ec4d7cd59718896e7e4d971 --- /dev/null +++ b/config/events/k8s_api_proxy_requests_unique_users_via_user_access.yml @@ -0,0 +1,22 @@ +--- +description: Kubernetes API proxy request using the CI/CD Tunnel via User Access +category: InternalEventTracking +action: k8s_api_proxy_requests_unique_users_via_user_access +label_description: +property_description: +value_description: +extra_properties: +identifiers: +- user +product_section: ops +product_stage: deploy +product_group: environments +milestone: "16.7" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137488 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_ci_access_monthly.yml b/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_ci_access_monthly.yml index 10e0c13e8e38c9b66ee3b34bc5dcf9b1f127f04c..177bfdd75a70244c5b32b28bd074b0549944e7c0 100644 --- a/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_ci_access_monthly.yml +++ b/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_ci_access_monthly.yml @@ -9,12 +9,15 @@ status: active milestone: "16.2" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124147 time_frame: 28d -data_source: redis_hll +data_source: internal_events data_category: optional instrumentation_class: RedisHLLMetric options: events: - k8s_api_proxy_requests_unique_users_via_ci_access +events: + - name: k8s_api_proxy_requests_unique_users_via_ci_access + unique: user.id performance_indicator_type: [] distribution: - ce diff --git a/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_monthly.yml b/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_monthly.yml index 0ffcd3e9c75a64cfbec6001cd4bdc31e99565e44..bcda6d21dcf9932e7f3e19737bf0a505c3abc813 100644 --- a/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_monthly.yml +++ b/config/metrics/counts_28d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_monthly.yml @@ -9,12 +9,15 @@ status: active milestone: "16.2" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124147 time_frame: 28d -data_source: redis_hll +data_source: internal_events data_category: optional instrumentation_class: RedisHLLMetric options: events: - k8s_api_proxy_requests_unique_users_via_user_access +events: + - name: k8s_api_proxy_requests_unique_users_via_user_access + unique: user.id performance_indicator_type: [] distribution: - ce diff --git a/config/metrics/counts_28d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_monthly.yml b/config/metrics/counts_28d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_monthly.yml index 5f987f9142515d73616351c6c1d859b754d6b504..faee9fee9e826a61156739db64447fc5db325865 100644 --- a/config/metrics/counts_28d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_monthly.yml +++ b/config/metrics/counts_28d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_monthly.yml @@ -9,12 +9,15 @@ status: active milestone: "16.4" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129463 time_frame: 28d -data_source: redis_hll +data_source: internal_events data_category: optional instrumentation_class: RedisHLLMetric options: events: - k8s_api_proxy_requests_unique_users_via_pat_access +events: + - name: k8s_api_proxy_requests_unique_users_via_pat_access + unique: user.id performance_indicator_type: [] distribution: - ce diff --git a/config/metrics/counts_7d/20230620070722_k8s_api_proxy_requests_unique_users_via_ci_access_weekly.yml b/config/metrics/counts_7d/20230620070722_k8s_api_proxy_requests_unique_users_via_ci_access_weekly.yml index 22580c0cf4a9bec8eabd7c7096885c55d7ac687c..52e486e551cf832162713dc12a69145faafabdef 100644 --- a/config/metrics/counts_7d/20230620070722_k8s_api_proxy_requests_unique_users_via_ci_access_weekly.yml +++ b/config/metrics/counts_7d/20230620070722_k8s_api_proxy_requests_unique_users_via_ci_access_weekly.yml @@ -9,12 +9,15 @@ status: active milestone: "16.2" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124147 time_frame: 7d -data_source: redis_hll +data_source: internal_events data_category: optional instrumentation_class: RedisHLLMetric options: events: - k8s_api_proxy_requests_unique_users_via_ci_access +events: + - name: k8s_api_proxy_requests_unique_users_via_ci_access + unique: user.id performance_indicator_type: [] distribution: - ce diff --git a/config/metrics/counts_7d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_weekly.yml b/config/metrics/counts_7d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_weekly.yml index 35d1fe7346bc667131d79b5cba30f3e02a9862a6..9a60fe9f54d1b39316a5ff9aebaddd1aa092e3f7 100644 --- a/config/metrics/counts_7d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_weekly.yml +++ b/config/metrics/counts_7d/20230620070723_k8s_api_proxy_requests_unique_users_via_user_access_weekly.yml @@ -9,12 +9,15 @@ status: active milestone: "16.2" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124147 time_frame: 7d -data_source: redis_hll +data_source: internal_events data_category: optional instrumentation_class: RedisHLLMetric options: events: - k8s_api_proxy_requests_unique_users_via_user_access +events: + - name: k8s_api_proxy_requests_unique_users_via_user_access + unique: user.id performance_indicator_type: [] distribution: - ce diff --git a/config/metrics/counts_7d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_weekly.yml b/config/metrics/counts_7d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_weekly.yml index 5f3d0dc89123bc0b7df95346edf3b3fab048141a..96a07104165b43cf3af7ab533aaf75803c62c14e 100644 --- a/config/metrics/counts_7d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_weekly.yml +++ b/config/metrics/counts_7d/20230816085153_k8s_api_proxy_requests_unique_users_via_pat_access_weekly.yml @@ -9,12 +9,15 @@ status: active milestone: "16.4" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129463 time_frame: 7d -data_source: redis_hll +data_source: internal_events data_category: optional instrumentation_class: RedisHLLMetric options: events: - k8s_api_proxy_requests_unique_users_via_pat_access +events: + - name: k8s_api_proxy_requests_unique_users_via_pat_access + unique: user.id performance_indicator_type: [] distribution: - ce diff --git a/lib/api/helpers/kubernetes/agent_helpers.rb b/lib/api/helpers/kubernetes/agent_helpers.rb index 654317ca6163ab154fde6ce7f6a2dce0e4be5078..ff80270fc15eac7c38445250d0274a64cfdf44e1 100644 --- a/lib/api/helpers/kubernetes/agent_helpers.rb +++ b/lib/api/helpers/kubernetes/agent_helpers.rb @@ -43,9 +43,9 @@ def agent_has_access_to_project?(project) def increment_unique_events events = params[:unique_counters]&.slice( :agent_users_using_ci_tunnel, - :k8s_api_proxy_requests_unique_users_via_ci_access, :k8s_api_proxy_requests_unique_agents_via_ci_access, - :k8s_api_proxy_requests_unique_users_via_user_access, :k8s_api_proxy_requests_unique_agents_via_user_access, - :k8s_api_proxy_requests_unique_users_via_pat_access, :k8s_api_proxy_requests_unique_agents_via_pat_access, + :k8s_api_proxy_requests_unique_agents_via_ci_access, + :k8s_api_proxy_requests_unique_agents_via_user_access, + :k8s_api_proxy_requests_unique_agents_via_pat_access, :flux_git_push_notified_unique_projects ) @@ -54,6 +54,27 @@ def increment_unique_events end end + def track_unique_user_events + events = params[:unique_counters]&.slice( + :k8s_api_proxy_requests_unique_users_via_ci_access, + :k8s_api_proxy_requests_unique_users_via_user_access, + :k8s_api_proxy_requests_unique_users_via_pat_access + ) + return if events.blank? + + unique_user_ids = events.values.flatten.uniq + users = User.id_in(unique_user_ids).index_by(&:id) + + events.each do |event, user_ids| + user_ids.each do |user_id| + user = users[user_id] + next if user.nil? + + Gitlab::InternalEvents.track_event(event, user: user) + end + end + end + def increment_count_events events = params[:counters]&.slice( :gitops_sync, :k8s_api_proxy_request, :flux_git_push_notifications_total, diff --git a/lib/api/internal/kubernetes.rb b/lib/api/internal/kubernetes.rb index 9b1c16d76bc07444e03791fe59e60f7fd7626522..c6538e17b88cdb2a4276c38a547ebb3f58fabbd4 100644 --- a/lib/api/internal/kubernetes.rb +++ b/lib/api/internal/kubernetes.rb @@ -140,6 +140,7 @@ class Kubernetes < ::API::Base post '/', feature_category: :deployment_management do increment_count_events increment_unique_events + track_unique_user_events no_content! rescue ArgumentError => e diff --git a/lib/gitlab/usage_data_counters/hll_redis_counter.rb b/lib/gitlab/usage_data_counters/hll_redis_counter.rb index 185b49d4a6851e8dc3cc383260bfcd8f44002b4c..b044406672222db30ee57bad2a49ab35453a06c0 100644 --- a/lib/gitlab/usage_data_counters/hll_redis_counter.rb +++ b/lib/gitlab/usage_data_counters/hll_redis_counter.rb @@ -66,7 +66,7 @@ def track(values, event_name, time: Time.zone.now) rescue StandardError => e # Ignore any exceptions unless is dev or test env - # The application flow should not be blocked by erros in tracking + # The application flow should not be blocked by errors in tracking Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e) end diff --git a/spec/requests/api/internal/kubernetes_spec.rb b/spec/requests/api/internal/kubernetes_spec.rb index d9d7133c386f16f13a3a3b3a81a45c8faf4fd132..f16fdcb9cc73a68ecbc4bd6ddc9ddda5b37473d0 100644 --- a/spec/requests/api/internal/kubernetes_spec.rb +++ b/spec/requests/api/internal/kubernetes_spec.rb @@ -122,15 +122,17 @@ def send_request(headers: {}, params: {}) k8s_api_proxy_requests_via_user_access: 44, k8s_api_proxy_requests_via_pat_access: 45 } + users = create_list(:user, 3) + user_ids = users.map(&:id) << users[0].id unique_counters = { - agent_users_using_ci_tunnel: [10, 999, 777, 10], - k8s_api_proxy_requests_unique_users_via_ci_access: [10, 999, 777, 10], - k8s_api_proxy_requests_unique_agents_via_ci_access: [10, 999, 777, 10], - k8s_api_proxy_requests_unique_users_via_user_access: [10, 999, 777, 10], - k8s_api_proxy_requests_unique_agents_via_user_access: [10, 999, 777, 10], - k8s_api_proxy_requests_unique_users_via_pat_access: [10, 999, 777, 10], - k8s_api_proxy_requests_unique_agents_via_pat_access: [10, 999, 777, 10], - flux_git_push_notified_unique_projects: [10, 999, 777, 10] + agent_users_using_ci_tunnel: user_ids, + k8s_api_proxy_requests_unique_users_via_ci_access: user_ids, + k8s_api_proxy_requests_unique_agents_via_ci_access: user_ids, + k8s_api_proxy_requests_unique_users_via_user_access: user_ids, + k8s_api_proxy_requests_unique_agents_via_user_access: user_ids, + k8s_api_proxy_requests_unique_users_via_pat_access: user_ids, + k8s_api_proxy_requests_unique_agents_via_pat_access: user_ids, + flux_git_push_notified_unique_projects: user_ids } expected_counters = { kubernetes_agent_gitops_sync: request_count * counters[:gitops_sync],