Track Direct Transfer and Offline Transfer entity-level lifecycle events

What does this MR do and why?

Fires five internal events on BulkImports::Entity for the Direct Transfer / Offline Transfer entity lifecycle:

  • start_gitlab_migration_entity
  • finish_gitlab_migration_entity
  • fail_gitlab_migration_entity
  • cancel_gitlab_migration_entity
  • timeout_gitlab_migration_entity

All five fire from after_transition hooks in the entity's state machine, alongside the existing *_project_import / *_group_import calls.

How it differs from the project/group events

  • Fires for both project and group entities.
  • Can fire before a Project or Group record exists (e.g. an entity that fails during its very first pipeline) — identifiers are attached only when present.
  • start_gitlab_migration_entity fires at entity.start!, before any pipeline runs — earlier than start_project_import/start_group_import, which wait for the loader to create the destination. That gap is the point: it counts every attempt, not just the ones that got far enough to create something.
  • Carries parent_entity_id so top-level entities can be told apart from nested ones when measuring re-attempts.

label (gitlab_migration vs offline_transfer) and hashed property reuse the shared import_event_attributes helper introduced in !254680 (merged).

Scope

How to validate locally

  1. Enable Snowplow Micro:
gdk config set snowplow_micro.enabled true
gdk reconfigure
gdk restart
  1. Monitor http://gdk.test:9091/micro/good.
  2. Trigger a Direct Transfer or Offline Transfer migration (group or project). Confirm the five entity events fire alongside the existing *_project_import / *_group_import events.

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #627876 (closed)

Edited by Carla Drago

Merge request reports

Loading
Loading