From b8c80678af5e57d359b5568cfe829fb711df7691 Mon Sep 17 00:00:00 2001 From: Piotr Skorupa <pskorupa@gitlab.com> Date: Tue, 10 Jan 2023 20:54:05 +0100 Subject: [PATCH] Migrate commit_comment metric to Snowplow --- app/services/notes/create_service.rb | 14 +++++++++ ...s__CreateService_create_commit_comment.yml | 26 +++++++++++++++++ spec/services/notes/create_service_spec.rb | 29 +++++++++++++++++++ .../snowplow_event_tracking_examples.rb | 9 ++++++ 4 files changed, 78 insertions(+) create mode 100644 config/events/1671588492_Notes__CreateService_create_commit_comment.yml diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index 5f05b61328826..49817be4f6528 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -167,6 +167,20 @@ def track_event(note, user) if Feature.enabled?(:notes_create_service_tracking, project) Gitlab::Tracking.event('Notes::CreateService', 'execute', **tracking_data_for(note)) end + + if Feature.enabled?(:route_hll_to_snowplow_phase4, project&.namespace) && note.for_commit? + metric_key_path = 'counts.commit_comment' + + Gitlab::Tracking.event( + 'Notes::CreateService', + 'create_commit_comment', + project: project, + namespace: project&.namespace, + user: user, + label: metric_key_path, + context: [Gitlab::Tracking::ServicePingContext.new(data_source: :redis, key_path: metric_key_path).to_context] + ) + end end def tracking_data_for(note) diff --git a/config/events/1671588492_Notes__CreateService_create_commit_comment.yml b/config/events/1671588492_Notes__CreateService_create_commit_comment.yml new file mode 100644 index 0000000000000..cf2cc2c5b1cbb --- /dev/null +++ b/config/events/1671588492_Notes__CreateService_create_commit_comment.yml @@ -0,0 +1,26 @@ +--- +description: Mirrored `counts.commit_comment` Service Ping metric as a Snowplow event. Emitted when a note for a commit is created. +category: Notes::CreateService +action: create_commit_comment +label_description: Mirrored Service Ping metric key path +property_description: +value_description: +extra_properties: +identifiers: +- project +- user +- namespace +product_section: +product_stage: +product_group: +product_category: +milestone: "15.8" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105148 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate + diff --git a/spec/services/notes/create_service_spec.rb b/spec/services/notes/create_service_spec.rb index 22606cc2461d2..17ef8a85c2b20 100644 --- a/spec/services/notes/create_service_spec.rb +++ b/spec/services/notes/create_service_spec.rb @@ -116,6 +116,35 @@ end end + context 'in a commit', :snowplow do + let_it_be(:commit) { create(:commit, project: project) } + let(:opts) { { note: 'Awesome comment', noteable_type: 'Commit', commit_id: commit.id } } + + let(:counter) { Gitlab::UsageDataCounters::NoteCounter } + + let(:execute_create_service) { described_class.new(project, user, opts).execute } + + before do + stub_feature_flags(notes_create_service_tracking: false) + end + + it 'tracks commit comment usage data', :clean_gitlab_redis_shared_state do + expect(counter).to receive(:count).with(:create, 'Commit').and_call_original + + expect do + execute_create_service + end.to change { counter.read(:create, 'Commit') }.by(1) + end + + it_behaves_like 'Snowplow event tracking with Redis context' do + let(:category) { described_class.name } + let(:action) { 'create_commit_comment' } + let(:label) { 'counts.commit_comment' } + let(:namespace) { project.namespace } + let(:feature_flag_name) { :route_hll_to_snowplow_phase4 } + end + end + describe 'event tracking', :snowplow do let(:event) { Gitlab::UsageDataCounters::IssueActivityUniqueCounter::ISSUE_COMMENT_ADDED } let(:execute_create_service) { described_class.new(project, user, opts).execute } diff --git a/spec/support/shared_examples/controllers/snowplow_event_tracking_examples.rb b/spec/support/shared_examples/controllers/snowplow_event_tracking_examples.rb index 7e99066110d51..ba00e3e06105f 100644 --- a/spec/support/shared_examples/controllers/snowplow_event_tracking_examples.rb +++ b/spec/support/shared_examples/controllers/snowplow_event_tracking_examples.rb @@ -52,3 +52,12 @@ end end end + +RSpec.shared_examples 'Snowplow event tracking with Redis context' do |overrides: {}| + it_behaves_like 'Snowplow event tracking', overrides: overrides do + let(:context) do + key_path = try(:label) || action + [Gitlab::Tracking::ServicePingContext.new(data_source: :redis, key_path: key_path).to_context.to_json] + end + end +end -- GitLab