Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Andrew <mail@timothyandrew.net>2016-08-24 18:17:15 +0300
committerTimothy Andrew <mail@timothyandrew.net>2016-08-26 13:57:37 +0300
commit8ccea81cba048021ed9eded83db15b383ecd4a32 (patch)
treee5bcfd933ea6f9becb248c3e6dd6eaf8122c9ad8 /app/controllers/projects/cycle_analytics_controller.rb
parent516c838a1846d049814765afa85c28a3c14a5b9f (diff)
Display numbers for the "Issue (Tracker)" cycle analytics metric.
1. Code is messy and untested, but it is a start.
Diffstat (limited to 'app/controllers/projects/cycle_analytics_controller.rb')
-rw-r--r--app/controllers/projects/cycle_analytics_controller.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb
new file mode 100644
index 00000000000..ed885729fbb
--- /dev/null
+++ b/app/controllers/projects/cycle_analytics_controller.rb
@@ -0,0 +1,32 @@
+class Projects::CycleAnalyticsController < Projects::ApplicationController
+ def show
+ @metrics = {
+ issue: issue
+ }
+ end
+
+ private
+
+ def issue
+ query = <<-HEREDOC
+ WITH ordered_data AS (
+ SELECT extract(milliseconds FROM (COALESCE(first_associated_with_milestone_at, first_added_to_board_at) - issues.created_at)) AS data_point,
+ row_number() over (order by (COALESCE(first_associated_with_milestone_at, first_added_to_board_at) - issues.created_at)) as row_id
+ FROM issues
+ INNER JOIN issue_metrics ON issue_metrics.issue_id = issues.id
+ WHERE COALESCE(first_associated_with_milestone_at, first_added_to_board_at) IS NOT NULL
+ ),
+
+ ct AS (
+ SELECT count(1) AS ct
+ FROM ordered_data
+ )
+
+ SELECT avg(data_point) AS median
+ FROM ordered_data
+ WHERE row_id between (select ct from ct)/2.0 and (select ct from ct)/2.0 + 1;
+ HEREDOC
+
+ ActiveRecord::Base.connection.execute(query).to_a.first['median']
+ end
+end