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. Noextra_trackersblock:Gitlab::Tracking::AiTrackingis 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
-
Self-managed GitLab (PostgreSQL is enough to see the row; ClickHouse for the full analytics surface).
-
bundle exec rspec ee/spec/services/llm/summarize_new_merge_request_service_spec.rb -
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.