InfoGrab Docs

활성화 엔진 추적 빠른 시작

요약

활성화 엔진은 활성화 메트릭을 기록하기 위해 내부 이벤트를 사용합니다. 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으로 처리됩니다.

새 메트릭 유형 추가#

  1. ee/app/models/activation/metric.rb의 enum에 항목을 추가합니다:

    enum :metric, {
      merged_mr: 0,
      new_metric: 1
    }
    
  2. ee/config/events/Gitlab::Tracking::ActivationTrackingextra_trackers 항목이 포함된 이벤트 정의 YAML을 생성하거나 업데이트합니다. 이벤트 action은 enum 키와 일치해야 합니다:

    action: new_metric
    internal_events: true
    extra_trackers:
      - tracking_class: Gitlab::Tracking::ActivationTracking
    
  3. 애플리케이션 코드가 적절한 위치에서 해당 이벤트에 대해 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

활성화 엔진 추적 빠른 시작

원문 보기
요약

활성화 엔진은 활성화 메트릭을 기록하기 위해 내부 이벤트를 사용합니다. 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으로 처리됩니다.

새 메트릭 유형 추가#

  1. ee/app/models/activation/metric.rb의 enum에 항목을 추가합니다:

    enum :metric, {
      merged_mr: 0,
      new_metric: 1
    }
    
  2. ee/config/events/Gitlab::Tracking::ActivationTrackingextra_trackers 항목이 포함된 이벤트 정의 YAML을 생성하거나 업데이트합니다. 이벤트 action은 enum 키와 일치해야 합니다:

    action: new_metric
    internal_events: true
    extra_trackers:
      - tracking_class: Gitlab::Tracking::ActivationTracking
    
  3. 애플리케이션 코드가 적절한 위치에서 해당 이벤트에 대해 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