diff options
author | Timothy Andrew <mail@timothyandrew.net> | 2016-09-02 09:44:39 +0530 |
---|---|---|
committer | Timothy Andrew <mail@timothyandrew.net> | 2016-09-02 09:44:39 +0530 |
commit | 0910868d3cdd63d416f711df0f12ab67d4328130 (patch) | |
tree | 593bd78c086a5ccfd51c15ebec527042a5a3ba3a /app | |
parent | 2f57eee7dabd10ebd31afd30dbfd6f4752135859 (diff) | |
download | gitlab-ce-0910868d3cdd63d416f711df0f12ab67d4328130.tar.gz |
Tweak cycle analytics query to match the current requirements.
- The `review` phase ends when a MR is merged, not "merged OR closed".
- The `code` phase starts when a MR is first mentioned in a commit, and
ends when a merge request closing the issue is created.
- The `plan` phase ends when the issue first mentioned in a commit.
---
- Fix the `median` function so it sorts the incoming data points.
- A data point where `end_time` is prior to `start_time` is invalid.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/cycle_analytics.rb | 16 | ||||
-rw-r--r-- | app/models/cycle_analytics/queries.rb | 8 |
2 files changed, 16 insertions, 8 deletions
diff --git a/app/models/cycle_analytics.rb b/app/models/cycle_analytics.rb index d6a0b5fcc7a..a52b5aff559 100644 --- a/app/models/cycle_analytics.rb +++ b/app/models/cycle_analytics.rb @@ -15,13 +15,13 @@ class CycleAnalytics def plan calculate_metric(Queries::issues(@project, created_after: @from), [Queries::issue_first_associated_with_milestone_at, Queries::issue_first_added_to_list_label_at], - Queries::issue_closing_merge_request_opened_at) + Queries::issue_first_mentioned_in_commit_at) end def code calculate_metric(Queries::merge_requests_closing_issues(@project, created_after: @from), - -> (data_point) { data_point[:merge_request].created_at }, - [Queries::merge_request_first_assigned_to_user_other_than_author_at, Queries::merge_request_wip_flag_first_removed_at]) + Queries::issue_first_mentioned_in_commit_at, + -> (data_point) { data_point[:merge_request].created_at }) end def test @@ -32,14 +32,14 @@ class CycleAnalytics def review calculate_metric(Queries::merge_requests_closing_issues(@project, created_after: @from), - [Queries::merge_request_first_assigned_to_user_other_than_author_at, Queries::merge_request_wip_flag_first_removed_at], - [Queries::merge_request_first_closed_at, Queries::merge_request_merged_at]) + -> (data_point) { data_point[:merge_request].created_at }, + Queries::merge_request_merged_at) end def staging calculate_metric(Queries::merge_requests_closing_issues(@project, created_after: @from), Queries::merge_request_merged_at, - Queries::merge_request_deployed_to_any_environment_at) + Queries::merge_request_deployed_to_production_at) end def production @@ -55,12 +55,12 @@ class CycleAnalytics start_time = Array.wrap(start_time_fns).map { |fn| fn[data_point] }.compact.first end_time = Array.wrap(end_time_fns).map { |fn| fn[data_point] }.compact.first - if start_time.present? && end_time.present? + if start_time.present? && end_time.present? && end_time >= start_time end_time - start_time end end - median(times.compact) + median(times.compact.sort) end def median(coll) diff --git a/app/models/cycle_analytics/queries.rb b/app/models/cycle_analytics/queries.rb index 1a9a1daa2b0..7816c96a0ed 100644 --- a/app/models/cycle_analytics/queries.rb +++ b/app/models/cycle_analytics/queries.rb @@ -26,6 +26,14 @@ class CycleAnalytics end end + def issue_first_mentioned_in_commit_at + lambda do |data_point| + issue = data_point[:issue] + commits_mentioning_issue = issue.notes.system.map { |note| note.all_references.commits }.flatten + commits_mentioning_issue.map(&:committed_date).min if commits_mentioning_issue.present? + end + end + def merge_request_first_closed_at lambda do |data_point| merge_request = data_point[:merge_request] |