48 lines
1.4 KiB
Ruby
48 lines
1.4 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::EndpointInserter,
|
|
Stages::Sorter
|
|
].freeze
|
|
|
|
PROJECT_SEQUENCE = [
|
|
Stages::CommonMetricsInserter,
|
|
Stages::EndpointInserter,
|
|
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
|