diff options
Diffstat (limited to 'lib/gitlab/cycle_analytics/base_stage.rb')
-rw-r--r-- | lib/gitlab/cycle_analytics/base_stage.rb | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/lib/gitlab/cycle_analytics/base_stage.rb b/lib/gitlab/cycle_analytics/base_stage.rb deleted file mode 100644 index 06f0cbed147..00000000000 --- a/lib/gitlab/cycle_analytics/base_stage.rb +++ /dev/null @@ -1,83 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module CycleAnalytics - class BaseStage - include BaseQuery - include GroupProjectsProvider - - attr_reader :options - - def initialize(options:) - @options = options - end - - def events - event_fetcher.fetch - end - - def as_json(serializer: AnalyticsStageSerializer) - serializer.new.represent(self) - end - - def title - raise NotImplementedError.new("Expected #{self.name} to implement title") - end - - def project_median - return if project.nil? - - BatchLoader.for(project.id).batch(key: name) do |project_ids, loader| - if project_ids.one? - loader.call(project.id, median_query(project_ids)) - else - begin - median_datetimes(cte_table, interval_query(project_ids), name, :project_id)&.each do |project_id, median| - loader.call(project_id, median) - end - rescue NotSupportedError - {} - end - end - end - end - - def group_median - median_query(projects.map(&:id)) - end - - def median_query(project_ids) - # Build a `SELECT` query. We find the first of the `end_time_attrs` that isn't `NULL` (call this end_time). - # Next, we find the first of the start_time_attrs that isn't `NULL` (call this start_time). - # We compute the (end_time - start_time) interval, and give it an alias based on the current - # value stream analytics stage. - - median_datetime(cte_table, interval_query(project_ids), name) - end - - def name - raise NotImplementedError.new("Expected #{self.name} to implement name") - end - - def cte_table - Arel::Table.new("cte_table_for_#{name}") - end - - def interval_query(project_ids) - Arel::Nodes::As.new(cte_table, - subtract_datetimes(stage_query(project_ids), start_time_attrs, end_time_attrs, name.to_s)) - end - - private - - def event_fetcher - @event_fetcher ||= Gitlab::CycleAnalytics::EventFetcher[name].new(stage: name, - options: event_options) - end - - def event_options - options.merge(start_time_attrs: start_time_attrs, end_time_attrs: end_time_attrs) - end - end - end -end |