Add event tracking for AI Catalog ItemConsumer mutations

What does this MR do?

This MR implements internal event tracking for AI Catalog ItemConsumer mutations as requested in issue #558485 (closed).

Changes

Service Layer Updates

  • CreateService: Added track_internal_event call for create_ai_catalog_item_consumer event
  • UpdateService: Added track_internal_event call for update_ai_catalog_item_consumer event
  • DestroyService: Added track_internal_event call for delete_ai_catalog_item_consumer event

Event Tracking Details

  • Events are only tracked on successful operations
  • Uses the Gitlab::InternalEventsTracking mixin pattern
  • Follows the recommended naming convention for additional properties:
    • label: enabled state (true/false)
    • property: locked state (true/false)
  • Correctly handles project vs group context (project/namespace parameters)

Test Coverage

  • Added comprehensive test coverage for all three services
  • Tests verify events are tracked on success and not tracked on failures
  • Tests verify correct event names, parameters, and additional properties
  • Tests verify proper project vs group context handling

Event Details

Create Event

track_internal_event(
  "create_ai_catalog_item_consumer",
  user: current_user,
  project: <project|nil>, # nil when associated with group
  namespace: <group|nil>, # nil when associated with project
  additional_properties: {
    label: <enabled state>,
    property: <locked state>
  }
)

Update Event

track_internal_event(
  "update_ai_catalog_item_consumer",
  user: current_user,
  project: <project|nil>, # nil when associated with group
  namespace: <group|nil>, # nil when associated with project
  additional_properties: {
    label: <enabled state>,
    property: <locked state>
  }
)

Delete Event

track_internal_event(
  "delete_ai_catalog_item_consumer",
  user: current_user,
  project: <project|nil>, # nil when associated with group
  namespace: <group|nil> # nil when associated with project
)

How to setup and validate locally

Monitor the events

rails runner scripts/internal_events/monitor.rb update_ai_catalog_item_consumer create_ai_catalog_item_consumer delete_ai_catalog_item_consumer

Create a flow

Ai::Catalog::Item.create!(item_type: :flow, description: "A flow", project_id: 1_000_000, organization: Organizations::Organization.first, name: "Test flow")

Create an item consumer

Run the following GraphQL mutation:

 mutation {
   aiCatalogItemConsumerCreate(input: {
		itemId: "gid://gitlab/Ai::Catalog::Item/13", # Replace with the new Item created above
		enabled: true,
		locked: false,
		target: {
			projectId: "gid://gitlab/Project/1000000"
		}
   }) {
    itemConsumer { id },
    errors
   }
 }

Update the item consumer

Run the following GraphQL mutation:

 mutation {
   aiCatalogItemConsumerUpdate(input: {
		id: "gid://gitlab/Ai::Catalog::ItemConsumer/3", # Replace with the new ItemConsumer
		enabled: false,
		locked: true
   }) {
     errors
   }
 }

Delete the item consumer

 mutation {
   aiCatalogItemConsumerDelete(input: {
		id: "gid://gitlab/Ai::Catalog::ItemConsumer/3" # Replace with the new ItemConsumer
   }) {
     errors
   }
 }

Check the events appeared

You should see that the relevant events appeared in the console like below:

Screenshot_from_2025-08-01_16-12-50

Related Issues

Closes #558485 (closed)

Testing

All existing tests continue to pass, and new tests have been added to verify the event tracking functionality.

Edited by Keeyan Nejad

Merge request reports

Loading