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