diff options
Diffstat (limited to 'lib/api/helpers/kubernetes/agent_helpers.rb')
-rw-r--r-- | lib/api/helpers/kubernetes/agent_helpers.rb | 72 |
1 files changed, 62 insertions, 10 deletions
diff --git a/lib/api/helpers/kubernetes/agent_helpers.rb b/lib/api/helpers/kubernetes/agent_helpers.rb index aa4f4310e1d..eca26c023cf 100644 --- a/lib/api/helpers/kubernetes/agent_helpers.rb +++ b/lib/api/helpers/kubernetes/agent_helpers.rb @@ -21,19 +21,13 @@ module API strong_memoize_attr :agent def gitaly_info(project) - gitaly_features = Feature::Gitaly.server_feature_flags - - Gitlab::GitalyClient.connection_data(project.repository_storage).merge(features: gitaly_features) + Gitlab::GitalyClient.connection_data(project.repository_storage) end def gitaly_repository(project) project.repository.gitaly_repository.to_h end - def check_feature_enabled - not_found!('Internal API not found') unless Feature.enabled?(:kubernetes_agent_internal_api, type: :ops) - end - def check_agent_token unauthorized! unless agent_token @@ -47,9 +41,9 @@ module API 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 ) @@ -58,6 +52,41 @@ module API end end + def track_events + event_lists = params[:events]&.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 event_lists.blank? + + users, projects = load_users_and_projects(event_lists) + event_lists.each do |event_name, events| + track_events_for(event_name, events, users, projects) + 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, @@ -113,6 +142,29 @@ module API PersonalAccessToken.find_by_token(params[:access_key]) end strong_memoize_attr :access_token + + private + + def load_users_and_projects(event_lists) + all_events = event_lists.values.flatten + unique_user_ids = all_events.pluck('user_id').compact.uniq # rubocop:disable CodeReuse/ActiveRecord -- this pluck isn't from ActiveRecord, it's from ActiveSupport + unique_project_ids = all_events.pluck('project_id').compact.uniq # rubocop:disable CodeReuse/ActiveRecord -- this pluck isn't from ActiveRecord, it's from ActiveSupport + users = User.id_in(unique_user_ids).index_by(&:id) + projects = Project.id_in(unique_project_ids).index_by(&:id) + [users, projects] + end + + def track_events_for(event_name, events, users, projects) + events.each do |event| + next if event.blank? + + user = users[event[:user_id]] + project = projects[event[:project_id]] + next if user.nil? || project.nil? + + Gitlab::InternalEvents.track_event(event_name, user: user, project: project) + end + end end end end |