47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Metrics
 | 
						|
    module Dashboard
 | 
						|
      # Responsible for processesing a dashboard hash, inserting
 | 
						|
      # relevant DB records & sorting for proper rendering in
 | 
						|
      # the UI. These includes shared metric info, custom metrics
 | 
						|
      # info, and alerts (only in EE).
 | 
						|
      class Processor
 | 
						|
        SYSTEM_SEQUENCE = [
 | 
						|
          Stages::CommonMetricsInserter,
 | 
						|
          Stages::ProjectMetricsInserter,
 | 
						|
          Stages::Sorter
 | 
						|
        ].freeze
 | 
						|
 | 
						|
        PROJECT_SEQUENCE = [
 | 
						|
          Stages::CommonMetricsInserter,
 | 
						|
          Stages::Sorter
 | 
						|
        ].freeze
 | 
						|
 | 
						|
        def initialize(project, environment, dashboard)
 | 
						|
          @project = project
 | 
						|
          @environment = environment
 | 
						|
          @dashboard = dashboard
 | 
						|
        end
 | 
						|
 | 
						|
        # Returns a new dashboard hash with the results of
 | 
						|
        # running transforms on the dashboard.
 | 
						|
        def process(insert_project_metrics:)
 | 
						|
          @dashboard.deep_symbolize_keys.tap do |dashboard|
 | 
						|
            sequence(insert_project_metrics).each do |stage|
 | 
						|
              stage.new(@project, @environment, dashboard).transform!
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        private
 | 
						|
 | 
						|
        def sequence(insert_project_metrics)
 | 
						|
          insert_project_metrics ? SYSTEM_SEQUENCE : PROJECT_SEQUENCE
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |