diff --git a/app/models/cycle_analytics.rb b/app/models/cycle_analytics.rb index 2caccdce9a21bbec7d1807342e7583870fe35ac6..8b791e1e9ac0a0347fa08ea0b7dc3fd4e6b489da 100644 --- a/app/models/cycle_analytics.rb +++ b/app/models/cycle_analytics.rb @@ -17,6 +17,12 @@ class CycleAnalytics Queries::mr_wip_flag_removed_or_assigned_to_user_other_than_author_time) end + def test + calculate_metric(Queries::merge_requests_closing_issues, + Queries::mr_build_started_at, + Queries::mr_build_finished_at) + end + def review calculate_metric(Queries::merge_requests_closing_issues, Queries::mr_wip_flag_removed_or_assigned_to_user_other_than_author_time, diff --git a/app/models/cycle_analytics/queries.rb b/app/models/cycle_analytics/queries.rb index f14f44c387625bbdf14a5ebd12fee9f6ebd92599..efdacc286387d6410e1f218ee55ed848938b830f 100644 --- a/app/models/cycle_analytics/queries.rb +++ b/app/models/cycle_analytics/queries.rb @@ -40,6 +40,28 @@ class CycleAnalytics end end + def mr_build_started_at + lambda do |data_point| + merge_request = data_point[:merge_request] + tip = merge_request.commits.first + return unless tip + + pipeline = Ci::Pipeline.find_by_sha(tip.sha) + pipeline.started_at if pipeline + end + end + + def mr_build_finished_at + lambda do |data_point| + merge_request = data_point[:merge_request] + tip = merge_request.commits.first + return unless tip + + pipeline = Ci::Pipeline.find_by_sha(tip.sha) + pipeline.finished_at if pipeline + end + end + def mr_deployed_to_any_environment_at lambda do |data_point| merge_request = data_point[:merge_request] diff --git a/app/views/projects/cycle_analytics/show.html.haml b/app/views/projects/cycle_analytics/show.html.haml index b4f875f00db88693f647772790eb845ed0baca7b..608712c4d5be25377a49312356767e6add0567bf 100644 --- a/app/views/projects/cycle_analytics/show.html.haml +++ b/app/views/projects/cycle_analytics/show.html.haml @@ -20,6 +20,13 @@ - else = "<Not enough data>" + %li.list-group-item + Test: + - if test = @cycle_analytics.test.presence + = distance_of_time_in_words test + - else + = "<Not enough data>" + %li.list-group-item Review: - if review = @cycle_analytics.review.presence