Add AiTracking for Merge Commit Message Generation

What does this MR do and why?

Adds track_internal_event('generate_merge_commit_message', ...) to Llm::GenerateCommitMessageService and registers a corresponding generate_merge_commit_message internal event, so Duo merge-commit-message generation lands in ai_usage_events.

Today this Duo feature fires no AiTracking event, so the generation is invisible to AiUsageData, AiUserMetrics, and the Duo and SDLC Trends dashboard. This closes the Merge Commit Message Generation row of the audit at #567159.

The event is registered the current way:

  • ee/config/events/generate_merge_commit_message.yml: the InternalEvents definition. No extra_trackers block, since Gitlab::Tracking::AiTracking is injected as a default tracker for every EE event via ee/lib/ee/gitlab/tracking/event_definition.rb.
  • ee/lib/gitlab/tracking/ai_tracking.rb: registry entry (event id 32).
  • ee/app/graphql/types/analytics/ai_usage/ai_usage_event_type_enum.rb: GraphQL enum value.

The product aiAction stays :generate_commit_message; only the InternalEvents event is named generate_merge_commit_message, for what it records (the commit message generated for a merge request).

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/generate_commit_message_service_spec.rb

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

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

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist.

Edited by Andrew Dunn

Merge request reports

Loading