diff options
Diffstat (limited to 'app/models/cycle_analytics/project_level_stage_adapter.rb')
-rw-r--r-- | app/models/cycle_analytics/project_level_stage_adapter.rb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/app/models/cycle_analytics/project_level_stage_adapter.rb b/app/models/cycle_analytics/project_level_stage_adapter.rb new file mode 100644 index 00000000000..dd4afa9b809 --- /dev/null +++ b/app/models/cycle_analytics/project_level_stage_adapter.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +# This adapter class makes the new value stream (cycle analytics) backend +# compatible with the old value stream controller actions. +module CycleAnalytics + class ProjectLevelStageAdapter + def initialize(stage, options) + @stage = stage + @options = options + end + + # rubocop: disable CodeReuse/Presenter + def as_json(serializer: AnalyticsStageSerializer) + presenter = Analytics::CycleAnalytics::StagePresenter.new(stage) + + serializer.new.represent(OpenStruct.new( + title: presenter.title, + description: presenter.description, + legend: presenter.legend, + name: stage.name, + project_median: median + )) + end + # rubocop: enable CodeReuse/Presenter + + def events + data_collector.records_fetcher.serialized_records + end + + def median + data_collector.median.seconds + end + + alias_method :project_median, :median + + private + + attr_reader :stage, :options + + def data_collector + @data_collector ||= Gitlab::Analytics::CycleAnalytics::DataCollector.new(stage: stage, params: options) + end + end +end |