Commit 1e1b44a0 authored by Ash McKenzie's avatar Ash McKenzie

Merge branch '247184-instument-file-by-file-mrs' into 'master'

Instrument viewing merge request diffs file by file

See merge request gitlab-org/gitlab!48470
parents 6c22c01a 9e81b932
......@@ -11,6 +11,8 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
around_action :allow_gitaly_ref_name_caching
after_action :track_viewed_diffs_events, only: [:diffs_batch]
def show
render_diffs
end
......@@ -188,4 +190,16 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic
Discussions::CaptureDiffNotePositionsService.new(@merge_request).execute
end
def track_viewed_diffs_events
return if request.headers['DNT'] == '1'
Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter
.track_mr_diffs_action(merge_request: @merge_request)
return unless current_user&.view_diffs_file_by_file
Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter
.track_mr_diffs_single_file_action(merge_request: @merge_request, user: current_user)
end
end
---
title: Instrument viewing merge request diffs file by file
merge_request: 48470
author:
type: added
---
name: usage_data_i_code_review_mr_diffs
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48470
rollout_issue_url:
milestone: '13.7'
type: development
group: group::code review
default_enabled: true
---
name: usage_data_i_code_review_mr_single_file_diffs
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48470
rollout_issue_url:
milestone: '13.7'
type: development
group: group::code review
default_enabled: true
---
name: usage_data_i_code_review_user_single_file_diffs
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48470
rollout_issue_url:
milestone: '13.7'
type: development
group: group::code review
default_enabled: true
......@@ -425,3 +425,18 @@
redis_slot: snippets
aggregation: weekly
feature_flag: usage_data_i_snippets_show
- name: i_code_review_mr_diffs
redis_slot: code_review
category: code_review
aggregation: weekly
feature_flag: usage_data_i_code_review_mr_diffs
- name: i_code_review_user_single_file_diffs
redis_slot: code_review
category: code_review
aggregation: weekly
feature_flag: usage_data_i_code_review_user_single_file_diffs
- name: i_code_review_mr_single_file_diffs
redis_slot: code_review
category: code_review
aggregation: weekly
feature_flag: usage_data_i_code_review_mr_single_file_diffs
# frozen_string_literal: true
module Gitlab
module UsageDataCounters
module MergeRequestActivityUniqueCounter
MR_DIFFS_ACTION = 'i_code_review_mr_diffs'
MR_DIFFS_SINGLE_FILE_ACTION = 'i_code_review_mr_single_file_diffs'
MR_DIFFS_USER_SINGLE_FILE_ACTION = 'i_code_review_user_single_file_diffs'
class << self
def track_mr_diffs_action(merge_request:)
track_unique_action_by_merge_request(MR_DIFFS_ACTION, merge_request)
end
def track_mr_diffs_single_file_action(merge_request:, user:)
track_unique_action_by_merge_request(MR_DIFFS_SINGLE_FILE_ACTION, merge_request)
track_unique_action_by_user(MR_DIFFS_USER_SINGLE_FILE_ACTION, user)
end
private
def track_unique_action_by_merge_request(action, merge_request)
track_unique_action(action, merge_request.id)
end
def track_unique_action_by_user(action, user)
return unless user
track_unique_action(action, user.id)
end
def track_unique_action(action, value)
Gitlab::UsageDataCounters::HLLRedisCounter.track_usage_event(action, value)
end
end
end
end
end
......@@ -378,6 +378,57 @@ RSpec.describe Projects::MergeRequests::DiffsController do
expect(response).to have_gitlab_http_status(:ok)
end
it 'tracks mr_diffs event' do
expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
.to receive(:track_mr_diffs_action)
.with(merge_request: merge_request)
subject
end
context 'when DNT is enabled' do
before do
request.headers['DNT'] = '1'
end
it 'does not track any mr_diffs event' do
expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
.not_to receive(:track_mr_diffs_action)
expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
.not_to receive(:track_mr_diffs_single_file_action)
subject
end
end
context 'when user has view_diffs_file_by_file set to false' do
before do
user.update!(view_diffs_file_by_file: false)
end
it 'does not track single_file_diffs events' do
expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
.not_to receive(:track_mr_diffs_single_file_action)
subject
end
end
context 'when user has view_diffs_file_by_file set to true' do
before do
user.update!(view_diffs_file_by_file: true)
end
it 'tracks single_file_diffs events' do
expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter)
.to receive(:track_mr_diffs_single_file_action)
.with(merge_request: merge_request, user: user)
subject
end
end
end
def collection_arguments(pagination_data = {})
......
......@@ -45,7 +45,8 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s
'debian_packages',
'container_packages',
'tag_packages',
'snippets'
'snippets',
'code_review'
)
end
end
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter, :clean_gitlab_redis_shared_state do
let(:merge_request) { build(:merge_request, id: 1) }
let(:user) { build(:user, id: 1) }
shared_examples_for 'a tracked merge request unique event' do
specify do
expect { 3.times { subject } }
.to change {
Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(
event_names: action,
start_date: 2.weeks.ago,
end_date: 2.weeks.from_now
)
}
.by(1)
end
end
describe '.track_mr_diffs_action' do
subject { described_class.track_mr_diffs_action(merge_request: merge_request) }
it_behaves_like 'a tracked merge request unique event' do
let(:action) { described_class::MR_DIFFS_ACTION }
end
end
describe '.track_mr_diffs_single_file_action' do
subject { described_class.track_mr_diffs_single_file_action(merge_request: merge_request, user: user) }
it_behaves_like 'a tracked merge request unique event' do
let(:action) { described_class::MR_DIFFS_SINGLE_FILE_ACTION }
end
it_behaves_like 'a tracked merge request unique event' do
let(:action) { described_class::MR_DIFFS_USER_SINGLE_FILE_ACTION }
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment