BE - Add sorting support to aiUserMetrics GraphQL endpoint (Clickhouse)
Summary
The aiUserMetrics GraphQL endpoint currently lacks explicit sorting. This issue tracks adding proper sorting support with a sort argument
GraphQL API Changes
Add sort enum:
ee/app/graphql/types/analytics/ai_metrics/user_metrics_sort_enum.rb
module Types
module Analytics
module AiMetrics
class UserMetricsSortEnum < Types::SortEnum
graphql_name 'AiUserMetricsSort'
description 'Values for sorting AI user metrics.'
# Total event count sorting (across all features)
value 'TOTAL_EVENTS_COUNT_DESC', 'Total event count in descending order.', value: :total_events_count_desc
value 'TOTAL_EVENTS_COUNT_ASC', 'Total event count in ascending order.', value: :total_events_count_asc
# Dynamically generate sort values for each registered feature
Gitlab::Tracking::AiTracking.registered_features.each do |feature|
feature_name = feature.to_s.upcase
value "#{feature_name}_TOTAL_COUNT_DESC",
"#{feature.to_s.titleize} total event count in descending order.",
value: :"#{feature}_total_count_desc"
value "#{feature_name}_TOTAL_COUNT_ASC",
"#{feature.to_s.titleize} total event count in ascending order.",
value: :"#{feature}_total_count_asc"
end
end
end
end
end
Add argument to resolver:
ee/app/graphql/resolvers/analytics/ai_metrics/user_metrics_resolver.rb
argument :sort, Types::Analytics::AiMetrics::UserMetricsSortEnum,
required: false,
default_value: :total_events_count_desc,
description: 'Sort AI user metric'
Service Changes
Update Analytics::AiAnalytics::AiUserMetricsService for when we pass a sorting argument it fetches all features then sort based on the sort value
Edited by Amr Taha