Add AiTracking for Merge Request Summary

What does this MR do and why?

Adds track_internal_event('summarize_new_merge_request', ...) to Llm::SummarizeNewMergeRequestService and registers a corresponding summarize_new_merge_request internal event, so Duo merge-request summary generation lands in ai_usage_events.

Today this Duo feature fires no AiTracking event, so MR-summary generation is invisible to AiUsageData, AiUserMetrics, and the Duo and SDLC Trends dashboard. This closes the Merge Request Summary row of the audit at #567159.

The event is registered the current way:

  • ee/config/events/summarize_new_merge_request.yml: the InternalEvents definition. No extra_trackers block: Gitlab::Tracking::AiTracking is injected as a default tracker for every EE event.
  • ee/lib/gitlab/tracking/ai_tracking.rb: registry entry (event id 33; id 32 is reserved by the in-flight !240198).
  • ee/app/graphql/types/analytics/ai_usage/ai_usage_event_type_enum.rb ; GraphQL enum value, plus the regenerated reference docs and introspection schema.

The resource is the target Project (enforced by #valid?), and the service schedules completion asynchronously, so the event is tracked at entry, mirroring Llm::ChatService#perform.

Tracks #567159.

How to set up and validate locally

  1. Self-managed GitLab (PostgreSQL is enough to see the row; ClickHouse for the full analytics surface).

  2. bundle exec rspec ee/spec/services/llm/summarize_new_merge_request_service_spec.rb

  3. End-to-end in a rails console:

    Gitlab::InternalEvents.track_event('summarize_new_merge_request',
      user: User.first, project: Project.first,
      namespace: Project.first.project_namespace)
    UsageEvents::DumpWriteBufferCronWorker.new.perform
    Ai::UsageEvent.where(event: :summarize_new_merge_request).count # +1

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist.

Edited by Andrew Dunn

Merge request reports

Loading