[go: up one dir, main page]

Skip to content

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