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
|