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_eventcall forcreate_ai_catalog_item_consumerevent -
UpdateService: Added
track_internal_eventcall forupdate_ai_catalog_item_consumerevent -
DestroyService: Added
track_internal_eventcall fordelete_ai_catalog_item_consumerevent
Event Tracking Details
- Events are only tracked on successful operations
- Uses the
Gitlab::InternalEventsTrackingmixin 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:
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
