内部イベントトラッキングのクイックスタート

より効率的でスケーラブルな統一トラッキングAPIを提供するために、GitLabは既存のRedisHLLとSnowplowトラッキングを廃止します。その代わりに、新しいtrack_event メソッドを実装します。このアプローチでは、RedisHLL のカウンターを更新したり Snowplow のイベントを送信したりすることができます。

内部イベントトラッキングでコードを計測するためには、3つのことが必要です:

  1. イベントの定義
  2. 1つまたは複数のメトリクスを定義します。
  3. イベントのトリガー

イベントとメトリクスの定義

イベントとメトリクスの定義を作成するには、internal_events ジェネレータを使用します。

この例では、project_created というイベントのイベント定義と、7日と28日ごとに集計される2つのメトリクス定義を作成します。

bin/rails g gitlab:analytics:internal_events \
--time_frames=7d 28d \
--group=project_management \
--stage=plan --section=dev \
--event=project_created \
--unique=user.id \
--mr=https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121544

トリガーイベント

イベントをトリガーしてメトリクスを更新する方法は、バックエンドとフロントエンドで若干異なります。以下の関連セクションを参照してください。

バックエンドのトラッキング

イベントをトリガーするには、Gitlab::InternalEvents.track_event メソッドを必要な引数とともに呼び出します:

Gitlab::InternalEvents.track_event(
        "i_code_review_user_apply_suggestion",
        user: user,
        namespace: namespace,
        project: project
        )

このメソッドは、イベントi_code_review_user_apply_suggestion に関連するすべての RedisHLL メトリクスを自動的にインクリメントし、すべての名前付き引数と標準コンテキストを持つ対応する Snowplow イベントを送信します(SaaS のみ)。

フロントエンドのトラッキング

Vueコンポーネント

Vueコンポーネントでは、Vue mixinを使用してトラッキングを行うことができます。

Vueコンポーネントのトラッキングを実装するには

  1. InternalEvents ライブラリをインポートし、mixin メソッドを呼び出します:

    import { InternalEvents } from '~/tracking';
    const trackingMixin = InternalEvents.mixin();
    
  2. コンポーネントで mixin を使用します:

    export default {
      mixins: [trackingMixin],
       
      data() {
        return {
          expanded: false,
        };
      },
    };
    
  3. track_event メソッドを呼び出します。トラッキングオプションは2番目のパラメータとして渡すことができます:

    this.track_event('i_code_review_user_apply_suggestion');
    

    または、テンプレート内部でtrack_event メソッドを使用します:

    <template>
      <div>
        <button data-testid="toggle" @click="toggle">Toggle</button>
       
        <div v-if="expanded">
          <p>Hello world!</p>
          <button @click="track_event('i_code_review_user_apply_suggestion')">Track another event</button>
        </div>
      </div>
    </template>
    

生のJavaScript

任意のフロントエンド JavaScript コードから直接イベントをトラッキングするために、生の JavaScript 用のモジュールが提供されています。これは Mixin を利用できないコンポーネントコンテキストの外部で使用することができます。

import { InternalEvents } from '~/tracking';
InternalEvents.track_event('i_code_review_user_apply_suggestion');

データトラック属性

この属性によって、ボタンのGitLab内部イベントをトラッキングしたい場合、ClickハンドラにJavaScriptコードを書く必要がなくなります。その代わりに、イベントの値をdata-event-tracking属性に追加するだけで動作します。これはhamlビューでも使えます。

  <gl-button
    data-event-tracking="i_analytics_dev_ops_adoption"
  >
   Click Me
  </gl-button>

ハムル

= render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle',  data: { event_tracking: 'action' }}) do

レンダリング時の内部イベント

コンポーネントのレンダリング時やロード時に内部イベントを送信したい場合があります。このような場合は、data-event-tracking-load="true" 属性を追加します:

= render Pajamas::ButtonComponent.new(button_options: { data: { event_tracking_load: 'true', event_tracking: 'i_devops' } }) do
        = _("New project")

制限事項

uniqueuser.idproject.idnamespace.id、これらは標準コンテキストの一部として記録されます。現在のところ、merge_request.idのような値を置く場所はありません。これは自己記述イベントによって変わるでしょう。