summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2017-01-12 12:48:01 +0100
committerJames Lopez <james@jameslopez.es>2017-01-17 11:32:55 +0100
commit150a448596dda076f0893facbd621429738aba92 (patch)
treea365c22f24552946c3209355f271bf23872897b7
parent34875ce6b760980c1539c3ab88af0429e04d90bc (diff)
downloadgitlab-ce-150a448596dda076f0893facbd621429738aba92.tar.gz
refactored a bunch of stuff based on feedback
-rw-r--r--app/models/cycle_analytics.rb4
-rw-r--r--lib/gitlab/cycle_analytics/base_event_fetcher.rb2
-rw-r--r--lib/gitlab/cycle_analytics/base_stage.rb20
-rw-r--r--lib/gitlab/cycle_analytics/code_stage.rb9
-rw-r--r--lib/gitlab/cycle_analytics/event_fetcher.rb (renamed from lib/gitlab/cycle_analytics/event.rb)2
-rw-r--r--lib/gitlab/cycle_analytics/issue_stage.rb11
-rw-r--r--lib/gitlab/cycle_analytics/plan_stage.rb11
-rw-r--r--lib/gitlab/cycle_analytics/production_stage.rb9
-rw-r--r--lib/gitlab/cycle_analytics/review_stage.rb9
-rw-r--r--lib/gitlab/cycle_analytics/staging_stage.rb10
-rw-r--r--lib/gitlab/cycle_analytics/test_stage.rb9
-rw-r--r--spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb6
12 files changed, 54 insertions, 48 deletions
diff --git a/app/models/cycle_analytics.rb b/app/models/cycle_analytics.rb
index 37ac56310ef..054a6070bb8 100644
--- a/app/models/cycle_analytics.rb
+++ b/app/models/cycle_analytics.rb
@@ -17,7 +17,7 @@ class CycleAnalytics
end
def no_stats?
- stats.map { |hash| hash[:value] }.compact.empty?
+ stats.all? { hash[:value].nil? }
end
def permissions(user:)
@@ -32,7 +32,7 @@ class CycleAnalytics
def stats_per_stage
STAGES.map do |stage_name|
- self[stage_name].median_data
+ self[stage_name].as_json
end
end
end
diff --git a/lib/gitlab/cycle_analytics/base_event_fetcher.rb b/lib/gitlab/cycle_analytics/base_event_fetcher.rb
index 8d10ddf15d7..0d8791d396b 100644
--- a/lib/gitlab/cycle_analytics/base_event_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/base_event_fetcher.rb
@@ -42,7 +42,7 @@ module Gitlab
end
def default_order
- @options[:start_time_attrs].is_a?(Array) ? @options[:start_time_attrs].first : @options[:start_time_attrs]
+ [@options[:start_time_attrs]].flatten.first
end
def serialize(_event)
diff --git a/lib/gitlab/cycle_analytics/base_stage.rb b/lib/gitlab/cycle_analytics/base_stage.rb
index 9143792e044..7ff15051558 100644
--- a/lib/gitlab/cycle_analytics/base_stage.rb
+++ b/lib/gitlab/cycle_analytics/base_stage.rb
@@ -8,17 +8,11 @@ module Gitlab
@options = options
end
- def event
- @event ||= Gitlab::CycleAnalytics::Event[name].new(project: @project,
- stage: name,
- options: event_options)
- end
-
def events
- event.fetch
+ event_fetcher.fetch
end
- def median_data
+ def as_json
AnalyticsStageSerializer.new.represent(self).as_json
end
@@ -35,7 +29,7 @@ module Gitlab
# cycle analytics stage.
interval_query = Arel::Nodes::As.new(
cte_table,
- subtract_datetimes(base_query.dup, @start_time_attrs, @end_time_attrs, name.to_s))
+ subtract_datetimes(base_query.dup, start_time_attrs, end_time_attrs, name.to_s))
median_datetime(cte_table, interval_query, name)
end
@@ -46,8 +40,14 @@ module Gitlab
private
+ def event_fetcher
+ @event_fetcher ||= Gitlab::CycleAnalytics::EventFetcher[name].new(project: @project,
+ stage: name,
+ options: event_options)
+ end
+
def event_options
- @options.merge(start_time_attrs: @start_time_attrs, end_time_attrs: @end_time_attrs)
+ @options.merge(start_time_attrs: start_time_attrs, end_time_attrs: end_time_attrs)
end
end
end
diff --git a/lib/gitlab/cycle_analytics/code_stage.rb b/lib/gitlab/cycle_analytics/code_stage.rb
index 111c0e99633..d1bc2055ba8 100644
--- a/lib/gitlab/cycle_analytics/code_stage.rb
+++ b/lib/gitlab/cycle_analytics/code_stage.rb
@@ -1,11 +1,12 @@
module Gitlab
module CycleAnalytics
class CodeStage < BaseStage
- def initialize(*args)
- @start_time_attrs = issue_metrics_table[:first_mentioned_in_commit_at]
- @end_time_attrs = mr_table[:created_at]
+ def start_time_attrs
+ @start_time_attrs ||= issue_metrics_table[:first_mentioned_in_commit_at]
+ end
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= mr_table[:created_at]
end
def name
diff --git a/lib/gitlab/cycle_analytics/event.rb b/lib/gitlab/cycle_analytics/event_fetcher.rb
index 1ba7bc08ee5..50e126cf00b 100644
--- a/lib/gitlab/cycle_analytics/event.rb
+++ b/lib/gitlab/cycle_analytics/event_fetcher.rb
@@ -1,6 +1,6 @@
module Gitlab
module CycleAnalytics
- module Event
+ module EventFetcher
def self.[](stage_name)
CycleAnalytics.const_get("#{stage_name.to_s.camelize}EventFetcher")
end
diff --git a/lib/gitlab/cycle_analytics/issue_stage.rb b/lib/gitlab/cycle_analytics/issue_stage.rb
index d320458d7fd..d2068fbc38f 100644
--- a/lib/gitlab/cycle_analytics/issue_stage.rb
+++ b/lib/gitlab/cycle_analytics/issue_stage.rb
@@ -1,12 +1,13 @@
module Gitlab
module CycleAnalytics
class IssueStage < BaseStage
- def initialize(*args)
- @start_time_attrs = issue_table[:created_at]
- @end_time_attrs = [issue_metrics_table[:first_associated_with_milestone_at],
- issue_metrics_table[:first_added_to_board_at]]
+ def start_time_attrs
+ @start_time_attrs ||= issue_table[:created_at]
+ end
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= [issue_metrics_table[:first_associated_with_milestone_at],
+ issue_metrics_table[:first_added_to_board_at]]
end
def name
diff --git a/lib/gitlab/cycle_analytics/plan_stage.rb b/lib/gitlab/cycle_analytics/plan_stage.rb
index a7164e5c5b7..3b4dfc6a30e 100644
--- a/lib/gitlab/cycle_analytics/plan_stage.rb
+++ b/lib/gitlab/cycle_analytics/plan_stage.rb
@@ -1,12 +1,13 @@
module Gitlab
module CycleAnalytics
class PlanStage < BaseStage
- def initialize(*args)
- @start_time_attrs = [issue_metrics_table[:first_associated_with_milestone_at],
- issue_metrics_table[:first_added_to_board_at]]
- @end_time_attrs = issue_metrics_table[:first_mentioned_in_commit_at]
+ def start_time_attrs
+ @start_time_attrs ||= [issue_metrics_table[:first_associated_with_milestone_at],
+ issue_metrics_table[:first_added_to_board_at]]
+ end
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= issue_metrics_table[:first_mentioned_in_commit_at]
end
def name
diff --git a/lib/gitlab/cycle_analytics/production_stage.rb b/lib/gitlab/cycle_analytics/production_stage.rb
index eb221c68324..2a6bcc80116 100644
--- a/lib/gitlab/cycle_analytics/production_stage.rb
+++ b/lib/gitlab/cycle_analytics/production_stage.rb
@@ -3,11 +3,12 @@ module Gitlab
class ProductionStage < BaseStage
include ProductionHelper
- def initialize(*args)
- @start_time_attrs = issue_table[:created_at]
- @end_time_attrs = mr_metrics_table[:first_deployed_to_production_at]
+ def start_time_attrs
+ @start_time_attrs ||= issue_table[:created_at]
+ end
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= mr_metrics_table[:first_deployed_to_production_at]
end
def name
diff --git a/lib/gitlab/cycle_analytics/review_stage.rb b/lib/gitlab/cycle_analytics/review_stage.rb
index 72ce1ed1e16..fbaa3010d81 100644
--- a/lib/gitlab/cycle_analytics/review_stage.rb
+++ b/lib/gitlab/cycle_analytics/review_stage.rb
@@ -1,11 +1,12 @@
module Gitlab
module CycleAnalytics
class ReviewStage < BaseStage
- def initialize(*args)
- @start_time_attrs = mr_table[:created_at]
- @end_time_attrs = mr_metrics_table[:merged_at]
+ def start_time_attrs
+ @start_time_attrs ||= mr_table[:created_at]
+ end
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= mr_metrics_table[:merged_at]
end
def name
diff --git a/lib/gitlab/cycle_analytics/staging_stage.rb b/lib/gitlab/cycle_analytics/staging_stage.rb
index 398c1b5989a..945909a4d62 100644
--- a/lib/gitlab/cycle_analytics/staging_stage.rb
+++ b/lib/gitlab/cycle_analytics/staging_stage.rb
@@ -2,12 +2,12 @@ module Gitlab
module CycleAnalytics
class StagingStage < BaseStage
include ProductionHelper
+ def start_time_attrs
+ @start_time_attrs ||= mr_metrics_table[:merged_at]
+ end
- def initialize(*args)
- @start_time_attrs = mr_metrics_table[:merged_at]
- @end_time_attrs = mr_metrics_table[:first_deployed_to_production_at]
-
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= mr_metrics_table[:first_deployed_to_production_at]
end
def name
diff --git a/lib/gitlab/cycle_analytics/test_stage.rb b/lib/gitlab/cycle_analytics/test_stage.rb
index 7e59745ffef..0079d56e0e4 100644
--- a/lib/gitlab/cycle_analytics/test_stage.rb
+++ b/lib/gitlab/cycle_analytics/test_stage.rb
@@ -1,11 +1,12 @@
module Gitlab
module CycleAnalytics
class TestStage < BaseStage
- def initialize(*args)
- @start_time_attrs = mr_metrics_table[:latest_build_started_at]
- @end_time_attrs = mr_metrics_table[:latest_build_finished_at]
+ def start_time_attrs
+ @start_time_attrs ||= mr_metrics_table[:latest_build_started_at]
+ end
- super(*args)
+ def end_time_attrs
+ @end_time_attrs ||= mr_metrics_table[:latest_build_finished_at]
end
def name
diff --git a/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb b/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb
index 6f3883d80f8..08425acbfc8 100644
--- a/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/shared_stage_spec.rb
@@ -9,15 +9,15 @@ shared_examples 'base stage' do
end
it 'has the median data value' do
- expect(stage.median_data[:value]).not_to be_nil
+ expect(stage.as_json[:value]).not_to be_nil
end
it 'has the median data stage' do
- expect(stage.median_data[:title]).not_to be_nil
+ expect(stage.as_json[:title]).not_to be_nil
end
it 'has the median data description' do
- expect(stage.median_data[:description]).not_to be_nil
+ expect(stage.as_json[:description]).not_to be_nil
end
it 'has the title' do