활성화 엔진 추적 빠른 시작
활성화 엔진은 활성화 메트릭을 기록하기 위해 내부 이벤트를 사용합니다. extra_trackers 항목으로 Gitlab::Tracking::ActivationTracking이 포함된 YAML 정의를 가진 내부 이벤트와 함께 Gitlab::InternalEvents.track_event를 호출합니다.
활성화 엔진은 활성화 메트릭을 기록하기 위해 내부 이벤트를 사용합니다. 이벤트는 YAML 기반 extra_trackers 구성을 통해 활성화 엔진으로 라우팅됩니다. 애플리케이션 코드에서 Activation::Metric 모델을 직접 호출하지 않습니다.
메트릭 기록#
extra_trackers 항목으로 Gitlab::Tracking::ActivationTracking이 포함된 YAML 정의를 가진 내부 이벤트와 함께 Gitlab::InternalEvents.track_event를 호출합니다.
Gitlab::InternalEvents.track_event('merged_mr', user: user, project: project)
ee/config/events/merged_mr.yml의 해당 이벤트 정의가 이벤트를 활성화 추적에 연결합니다:
action: merged_mr
internal_events: true
extra_trackers:
- tracking_class: Gitlab::Tracking::ActivationTracking
Gitlab::Tracking::ActivationTracking 어댑터는 이벤트를 받아 Activation::Metric.track에 위임합니다. 다음의 경우 호출은 아무 작업도 하지 않습니다:
-
activation_tracking기능 플래그가 비활성화된 경우. -
동일한 사용자, 네임스페이스, 메트릭 조합에 대한 레코드가 이미 존재하는 경우.
메트릭 완료 확인#
Activation::Metric.completed?(user_id: user.id, metric: :merged_mr, namespace_id: namespace.id)
일치하는 레코드가 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
namespace_id: 매개변수는 선택 사항입니다.
메트릭 쿼리#
Activation::MetricsFinder를 사용하여 선택적 필터가 있는 사용자의 메트릭을 검색합니다.
Activation::MetricsFinder.new(user: user, params: { namespace: namespace, metric: :merged_mr }).execute
지원되는 필터 매개변수:
-
namespace: 특정 네임스페이스로 필터링. -
metric: 메트릭 유형으로 필터링(심볼).
파인더는 기본 제한을 적용하지 않습니다. GraphQL 리졸버에서 사용할 때 페이지네이션은 .connection_type으로 처리됩니다.
새 메트릭 유형 추가#
-
ee/app/models/activation/metric.rb의 enum에 항목을 추가합니다:enum :metric, { merged_mr: 0, new_metric: 1 } -
ee/config/events/에Gitlab::Tracking::ActivationTracking의extra_trackers항목이 포함된 이벤트 정의 YAML을 생성하거나 업데이트합니다. 이벤트action은 enum 키와 일치해야 합니다:action: new_metric internal_events: true extra_trackers: - tracking_class: Gitlab::Tracking::ActivationTracking -
애플리케이션 코드가 적절한 위치에서 해당 이벤트에 대해
Gitlab::InternalEvents.track_event를 호출하는지 확인합니다.
기능 플래그#
activation_tracking 플래그는 :wip 유형 플래그입니다. 개발에서 활성화하려면:
Feature.enable(:activation_tracking)
특정 사용자에게 활성화하려면:
Feature.enable(:activation_tracking, user)
활성화 메트릭 테스트#
:activation_metric 팩토리와 stub_feature_flags를 사용하여 활성화 추적을 테스트합니다.
RSpec.describe 'example', feature_category: :onboarding do
let_it_be(:user) { create(:user) }
let_it_be(:namespace) { create(:namespace) }
describe '.track' do
before do
stub_feature_flags(activation_tracking: user)
end
it 'records the metric', :aggregate_failures do
Activation::Metric.track(:merged_mr, user: user, namespace: namespace)
record = Activation::Metric.last
expect(record.user_id).to eq(user.id)
expect(record.namespace_id).to eq(namespace.id)
expect(record.metric).to eq('merged_mr')
end
end
describe '.completed?' do
before_all do
create(:activation_metric, user: user, namespace: namespace)
end
it 'returns true when the metric exists' do
expect(Activation::Metric.completed?(user_id: user.id, metric: :merged_mr, namespace_id: namespace.id))
.to be(true)
end
end
end
