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:
authorJames Lopez <james@jameslopez.es>2016-12-01 14:44:35 +0300
committerJames Lopez <james@jameslopez.es>2017-01-17 13:32:55 +0300
commit69ecd951a9e0acbc31f0a4b9b02e8a1981ceff1e (patch)
tree8840bd95a1c558b6672a1375460f1b3e3f2da610 /lib/gitlab/cycle_analytics
parentb8056669849729cab5700466a7fae6dc6b2743b2 (diff)
refactor fetcher and fixed specs
Diffstat (limited to 'lib/gitlab/cycle_analytics')
-rw-r--r--lib/gitlab/cycle_analytics/base_event.rb4
-rw-r--r--lib/gitlab/cycle_analytics/events_query.rb32
-rw-r--r--lib/gitlab/cycle_analytics/metrics_fetcher.rb15
3 files changed, 17 insertions, 34 deletions
diff --git a/lib/gitlab/cycle_analytics/base_event.rb b/lib/gitlab/cycle_analytics/base_event.rb
index eac807af037..2ce9c34d8e8 100644
--- a/lib/gitlab/cycle_analytics/base_event.rb
+++ b/lib/gitlab/cycle_analytics/base_event.rb
@@ -7,7 +7,7 @@ module Gitlab
attr_reader :start_time_attrs, :end_time_attrs, :projections, :query
def initialize(fetcher:, options:)
- @query = EventsQuery.new(fetcher: fetcher)
+ @fetcher = fetcher
@project = fetcher.project
@options = options
end
@@ -39,7 +39,7 @@ module Gitlab
end
def event_result
- @event_result ||= @query.execute(self).to_a
+ @event_result ||= @fetcher.events(self).to_a
end
def serialize(_event)
diff --git a/lib/gitlab/cycle_analytics/events_query.rb b/lib/gitlab/cycle_analytics/events_query.rb
deleted file mode 100644
index e2b79384c9b..00000000000
--- a/lib/gitlab/cycle_analytics/events_query.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-module Gitlab
- module CycleAnalytics
- class EventsQuery
- def initialize(fetcher:)
- @fetcher = fetcher
- end
-
- def execute(stage_class)
- @stage_class = stage_class
-
- ActiveRecord::Base.connection.exec_query(query.to_sql)
- end
-
- private
-
- def query
- base_query = @fetcher.base_query_for(@stage_class.stage)
- diff_fn = @fetcher.subtract_datetimes_diff(base_query, @stage_class.start_time_attrs, @stage_class.end_time_attrs)
-
- @stage_class.custom_query(base_query)
-
- base_query.project(extract_epoch(diff_fn).as('total_time'), *@stage_class.projections).order(@stage_class.order.desc)
- end
-
- def extract_epoch(arel_attribute)
- return arel_attribute unless Gitlab::Database.postgresql?
-
- Arel.sql(%Q{EXTRACT(EPOCH FROM (#{arel_attribute.to_sql}))})
- end
- end
- end
-end
diff --git a/lib/gitlab/cycle_analytics/metrics_fetcher.rb b/lib/gitlab/cycle_analytics/metrics_fetcher.rb
index bd68a0980ca..0542fbfb38d 100644
--- a/lib/gitlab/cycle_analytics/metrics_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/metrics_fetcher.rb
@@ -29,6 +29,21 @@ module Gitlab
median_datetime(cte_table, interval_query, name)
end
+ def events(stage_class)
+ ActiveRecord::Base.connection.exec_query(events_query(stage_class).to_sql)
+ end
+
+ private
+
+ def events_query(stage_class)
+ base_query = base_query_for(stage_class.stage)
+ diff_fn = subtract_datetimes_diff(base_query, stage_class.start_time_attrs, stage_class.end_time_attrs)
+
+ stage_class.custom_query(base_query)
+
+ base_query.project(extract_diff_epoch(diff_fn).as('total_time'), *stage_class.projections).order(stage_class.order.desc)
+ end
+
# Join table with a row for every <issue,merge_request> pair (where the merge request
# closes the given issue) with issue and merge request metrics included. The metrics
# are loaded with an inner join, so issues / merge requests without metrics are