From f125b2acd4d03256294ee966a61cdfdf94e64a02 Mon Sep 17 00:00:00 2001 From: Patrick Bajao <ebajao@gitlab.com> Date: Wed, 24 Feb 2021 20:02:44 +0800 Subject: [PATCH 1/2] Add tracking to merge request time estimate/spent changes We need to track how many users change the time estimate and spent for MRs. To get that, whenever the time estimate and spent changes for a merge request, we track the following events: - i_code_review_user_time_estimate_changed - i_code_review_user_time_spent_changed --- app/services/merge_requests/update_service.rb | 7 +++++++ .../unreleased/292824-track-mr-time-changes.yml | 5 +++++ ...i_code_review_user_time_estimate_changed.yml | 8 ++++++++ ...ta_i_code_review_user_time_spent_changed.yml | 8 ++++++++ .../aggregated_metrics/code_review.yml | 8 ++++++-- .../known_events/code_review_events.yml | 10 ++++++++++ .../merge_request_activity_unique_counter.rb | 10 ++++++++++ ...erge_request_activity_unique_counter_spec.rb | 16 ++++++++++++++++ .../merge_requests/update_service_spec.rb | 17 +++++++++++++++++ 9 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/292824-track-mr-time-changes.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_time_estimate_changed.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_time_spent_changed.yml diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index 217679e733c354..4bc7823faaadcf 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -31,6 +31,7 @@ def handle_changes(merge_request, options) old_mentioned_users = old_associations.fetch(:mentioned_users, []) old_assignees = old_associations.fetch(:assignees, []) old_reviewers = old_associations.fetch(:reviewers, []) + old_timelogs = old_associations.fetch(:timelogs, []) changed_fields = merge_request.previous_changes.keys resolve_todos(merge_request, old_labels, old_assignees, old_reviewers) @@ -48,6 +49,7 @@ def handle_changes(merge_request, options) track_title_and_desc_edits(changed_fields) track_discussion_lock_toggle(merge_request, changed_fields) + track_time_estimate_and_spend_edits(merge_request, old_timelogs, changed_fields) notify_if_labels_added(merge_request, old_labels) notify_if_mentions_added(merge_request, old_mentioned_users) @@ -106,6 +108,11 @@ def track_discussion_lock_toggle(merge_request, changed_fields) end end + def track_time_estimate_and_spend_edits(merge_request, old_timelogs, changed_fields) + merge_request_activity_counter.track_time_estimate_changed_action(user: current_user) if changed_fields.include?('time_estimate') + merge_request_activity_counter.track_time_spent_changed_action(user: current_user) if old_timelogs != merge_request.timelogs + end + def notify_if_labels_added(merge_request, old_labels) added_labels = merge_request.labels - old_labels diff --git a/changelogs/unreleased/292824-track-mr-time-changes.yml b/changelogs/unreleased/292824-track-mr-time-changes.yml new file mode 100644 index 00000000000000..89721e8f8c5c88 --- /dev/null +++ b/changelogs/unreleased/292824-track-mr-time-changes.yml @@ -0,0 +1,5 @@ +--- +title: Add tracking to merge request time estimate/spent changes +merge_request: 55046 +author: +type: other diff --git a/config/feature_flags/development/usage_data_i_code_review_user_time_estimate_changed.yml b/config/feature_flags/development/usage_data_i_code_review_user_time_estimate_changed.yml new file mode 100644 index 00000000000000..81096288a8de4d --- /dev/null +++ b/config/feature_flags/development/usage_data_i_code_review_user_time_estimate_changed.yml @@ -0,0 +1,8 @@ +--- +name: usage_data_i_code_review_user_time_estimate_changed +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046 +rollout_issue_url: +milestone: '13.10' +type: development +group: group::code review +default_enabled: true diff --git a/config/feature_flags/development/usage_data_i_code_review_user_time_spent_changed.yml b/config/feature_flags/development/usage_data_i_code_review_user_time_spent_changed.yml new file mode 100644 index 00000000000000..56329f6b48b768 --- /dev/null +++ b/config/feature_flags/development/usage_data_i_code_review_user_time_spent_changed.yml @@ -0,0 +1,8 @@ +--- +name: usage_data_i_code_review_user_time_spent_changed +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046 +rollout_issue_url: +milestone: '13.10' +type: development +group: group::code review +default_enabled: true diff --git a/lib/gitlab/usage_data_counters/aggregated_metrics/code_review.yml b/lib/gitlab/usage_data_counters/aggregated_metrics/code_review.yml index c856d0a5eeebf7..f19de8504901d5 100644 --- a/lib/gitlab/usage_data_counters/aggregated_metrics/code_review.yml +++ b/lib/gitlab/usage_data_counters/aggregated_metrics/code_review.yml @@ -44,7 +44,9 @@ 'i_code_review_user_toggled_task_item_status', 'i_code_review_user_create_mr_from_issue', 'i_code_review_user_mr_discussion_locked', - 'i_code_review_user_mr_discussion_unlocked' + 'i_code_review_user_mr_discussion_unlocked', + 'i_code_review_user_time_estimate_changed', + 'i_code_review_user_time_spent_changed' ] - name: code_review_category_monthly_active_users operator: OR @@ -82,7 +84,9 @@ 'i_code_review_user_toggled_task_item_status', 'i_code_review_user_create_mr_from_issue', 'i_code_review_user_mr_discussion_locked', - 'i_code_review_user_mr_discussion_unlocked' + 'i_code_review_user_mr_discussion_unlocked', + 'i_code_review_user_time_estimate_changed', + 'i_code_review_user_time_spent_changed' ] - name: code_review_extension_category_monthly_active_users operator: OR diff --git a/lib/gitlab/usage_data_counters/known_events/code_review_events.yml b/lib/gitlab/usage_data_counters/known_events/code_review_events.yml index 21613740142ce2..83a932456f9348 100644 --- a/lib/gitlab/usage_data_counters/known_events/code_review_events.yml +++ b/lib/gitlab/usage_data_counters/known_events/code_review_events.yml @@ -174,3 +174,13 @@ category: code_review aggregation: weekly feature_flag: usage_data_i_code_review_user_mr_discussion_unlocked +- name: i_code_review_user_time_estimate_changed + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_time_estimate_changed +- name: i_code_review_user_time_spent_changed + redis_slot: code_review + category: code_review + aggregation: weekly + feature_flag: usage_data_i_code_review_user_time_spent_changed diff --git a/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb index b94caa32bf7f55..daa4c34ae1f6e9 100644 --- a/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb +++ b/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb @@ -37,6 +37,8 @@ module MergeRequestActivityUniqueCounter MR_CREATE_FROM_ISSUE_ACTION = 'i_code_review_user_create_mr_from_issue' MR_DISCUSSION_LOCKED_ACTION = 'i_code_review_user_mr_discussion_locked' MR_DISCUSSION_UNLOCKED_ACTION = 'i_code_review_user_mr_discussion_unlocked' + MR_TIME_ESTIMATE_CHANGED_ACTION = 'i_code_review_user_time_estimate_changed' + MR_TIME_SPENT_CHANGED_ACTION = 'i_code_review_user_time_spent_changed' class << self def track_mr_diffs_action(merge_request:) @@ -163,6 +165,14 @@ def track_discussion_unlocked_action(user:) track_unique_action_by_user(MR_DISCUSSION_UNLOCKED_ACTION, user) end + def track_time_estimate_changed_action(user:) + track_unique_action_by_user(MR_TIME_ESTIMATE_CHANGED_ACTION, user) + end + + def track_time_spent_changed_action(user:) + track_unique_action_by_user(MR_TIME_SPENT_CHANGED_ACTION, user) + end + private def track_unique_action_by_merge_request(action, merge_request) diff --git a/spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb index 6bc42430889883..d740e19ae7b81f 100644 --- a/spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb +++ b/spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb @@ -300,4 +300,20 @@ let(:action) { described_class::MR_DISCUSSION_UNLOCKED_ACTION } end end + + describe '.track_time_estimate_changed_action' do + subject { described_class.track_time_estimate_changed_action(user: user) } + + it_behaves_like 'a tracked merge request unique event' do + let(:action) { described_class::MR_TIME_ESTIMATE_CHANGED_ACTION } + end + end + + describe '.track_time_spent_changed_action' do + subject { described_class.track_time_spent_changed_action(user: user) } + + it_behaves_like 'a tracked merge request unique event' do + let(:action) { described_class::MR_TIME_SPENT_CHANGED_ACTION } + end + end end diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb index e9ec3bccda3fd1..30d94a2e948e17 100644 --- a/spec/services/merge_requests/update_service_spec.rb +++ b/spec/services/merge_requests/update_service_spec.rb @@ -169,6 +169,23 @@ def update_merge_request(opts) end end end + + it 'tracks time estimate and spend time changes' do + expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter) + .to receive(:track_time_estimate_changed_action).once.with(user: user) + + expect(Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter) + .to receive(:track_time_spent_changed_action).once.with(user: user) + + opts[:time_estimate] = 86400 + opts[:spend_time] = { + duration: 3600, + user_id: user.id, + spent_at: Date.parse('2021-02-24') + } + + MergeRequests::UpdateService.new(project, user, opts).execute(merge_request) + end end context 'updating milestone' do -- GitLab From ab9c269d339d7937624fdd776ec2a403b9ed23f6 Mon Sep 17 00:00:00 2001 From: Patrick Bajao <ebajao@gitlab.com> Date: Tue, 2 Mar 2021 18:38:54 +0800 Subject: [PATCH 2/2] Update usage ping dictionary Use the generators to generate the metric YAML files and to update the dictionary. --- ...iew_user_time_estimate_changed_monthly.yml | 20 +++++ ...review_user_time_spent_changed_monthly.yml | 20 +++++ ...view_user_time_estimate_changed_weekly.yml | 20 +++++ ..._review_user_time_spent_changed_weekly.yml | 20 +++++ doc/development/usage_ping/dictionary.md | 80 +++++++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 config/metrics/counts_28d/20210301102134_i_code_review_user_time_estimate_changed_monthly.yml create mode 100644 config/metrics/counts_28d/20210301102204_i_code_review_user_time_spent_changed_monthly.yml create mode 100644 config/metrics/counts_7d/20210302103539_i_code_review_user_time_estimate_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210302103615_i_code_review_user_time_spent_changed_weekly.yml diff --git a/config/metrics/counts_28d/20210301102134_i_code_review_user_time_estimate_changed_monthly.yml b/config/metrics/counts_28d/20210301102134_i_code_review_user_time_estimate_changed_monthly.yml new file mode 100644 index 00000000000000..69ad9237f0db6f --- /dev/null +++ b/config/metrics/counts_28d/20210301102134_i_code_review_user_time_estimate_changed_monthly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_monthly +description: Count of unique users per month who changed time estimate of a MR +product_section: dev +product_stage: create +product_group: group::code review +product_category: code_review +value_type: number +status: implemented +milestone: "13.10" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046 +time_frame: 28d +data_source: redis_hll +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate diff --git a/config/metrics/counts_28d/20210301102204_i_code_review_user_time_spent_changed_monthly.yml b/config/metrics/counts_28d/20210301102204_i_code_review_user_time_spent_changed_monthly.yml new file mode 100644 index 00000000000000..36972b7e1681c7 --- /dev/null +++ b/config/metrics/counts_28d/20210301102204_i_code_review_user_time_spent_changed_monthly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.code_review.i_code_review_user_time_spent_changed_monthly +description: Count of unique users per month who changed time spent on a MR +product_section: dev +product_stage: create +product_group: group::code review +product_category: code_review +value_type: number +status: implemented +milestone: "13.10" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046 +time_frame: 28d +data_source: redis_hll +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate diff --git a/config/metrics/counts_7d/20210302103539_i_code_review_user_time_estimate_changed_weekly.yml b/config/metrics/counts_7d/20210302103539_i_code_review_user_time_estimate_changed_weekly.yml new file mode 100644 index 00000000000000..fb47deaba92e3c --- /dev/null +++ b/config/metrics/counts_7d/20210302103539_i_code_review_user_time_estimate_changed_weekly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_weekly +description: Count of unique users per week who changed time estimate of a MR +product_section: dev +product_stage: create +product_group: group::code review +product_category: code_review +value_type: number +status: implemented +milestone: "13.10" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046 +time_frame: 7d +data_source: redis_hll +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate diff --git a/config/metrics/counts_7d/20210302103615_i_code_review_user_time_spent_changed_weekly.yml b/config/metrics/counts_7d/20210302103615_i_code_review_user_time_spent_changed_weekly.yml new file mode 100644 index 00000000000000..91c88c00af8906 --- /dev/null +++ b/config/metrics/counts_7d/20210302103615_i_code_review_user_time_spent_changed_weekly.yml @@ -0,0 +1,20 @@ +--- +key_path: redis_hll_counters.code_review.i_code_review_user_time_spent_changed_weekly +description: Count of unique users per week who changed time spent on a MR +product_section: dev +product_stage: create +product_group: group::code review +product_category: code_review +value_type: number +status: implemented +milestone: "13.10" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046 +time_frame: 7d +data_source: redis_hll +distribution: +- ce +- ee +tier: +- free +- premium +- ultimate diff --git a/doc/development/usage_ping/dictionary.md b/doc/development/usage_ping/dictionary.md index 93ce26fceb535a..c244ebb0057348 100644 --- a/doc/development/usage_ping/dictionary.md +++ b/doc/development/usage_ping/dictionary.md @@ -13730,6 +13730,86 @@ Count of unique users per week|month with diffs viewed file by file | `tier` | | | `skip_validation` | true | +## `redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_monthly` + +Count of unique users per month who changed time estimate of a MR + +| field | value | +| --- | --- | +| `key_path` | **`redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_monthly`** | +| `product_section` | dev | +| `product_stage` | create | +| `product_group` | `group::code review` | +| `product_category` | `code_review` | +| `value_type` | number | +| `status` | implemented | +| `milestone` | 13.10 | +| `introduced_by_url` | [Introduced by](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046) | +| `time_frame` | 28d | +| `data_source` | Redis_hll | +| `distribution` | ce, ee | +| `tier` | free, premium, ultimate | + +## `redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_weekly` + +Count of unique users per week who changed time estimate of a MR + +| field | value | +| --- | --- | +| `key_path` | **`redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_weekly`** | +| `product_section` | dev | +| `product_stage` | create | +| `product_group` | `group::code review` | +| `product_category` | `code_review` | +| `value_type` | number | +| `status` | implemented | +| `milestone` | 13.10 | +| `introduced_by_url` | [Introduced by](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046) | +| `time_frame` | 7d | +| `data_source` | Redis_hll | +| `distribution` | ce, ee | +| `tier` | free, premium, ultimate | + +## `redis_hll_counters.code_review.i_code_review_user_time_spent_changed_monthly` + +Count of unique users per month who changed time spent on a MR + +| field | value | +| --- | --- | +| `key_path` | **`redis_hll_counters.code_review.i_code_review_user_time_spent_changed_monthly`** | +| `product_section` | dev | +| `product_stage` | create | +| `product_group` | `group::code review` | +| `product_category` | `code_review` | +| `value_type` | number | +| `status` | implemented | +| `milestone` | 13.10 | +| `introduced_by_url` | [Introduced by](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046) | +| `time_frame` | 28d | +| `data_source` | Redis_hll | +| `distribution` | ce, ee | +| `tier` | free, premium, ultimate | + +## `redis_hll_counters.code_review.i_code_review_user_time_spent_changed_weekly` + +Count of unique users per week who changed time spent on a MR + +| field | value | +| --- | --- | +| `key_path` | **`redis_hll_counters.code_review.i_code_review_user_time_spent_changed_weekly`** | +| `product_section` | dev | +| `product_stage` | create | +| `product_group` | `group::code review` | +| `product_category` | `code_review` | +| `value_type` | number | +| `status` | implemented | +| `milestone` | 13.10 | +| `introduced_by_url` | [Introduced by](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55046) | +| `time_frame` | 7d | +| `data_source` | Redis_hll | +| `distribution` | ce, ee | +| `tier` | free, premium, ultimate | + ## `redis_hll_counters.code_review.i_code_review_user_toggled_task_item_status_monthly` Missing description -- GitLab