bf918b68f6
https://gitlab.com/gitlab-org/gitlab-ce/issues/62971 Adds support to EnvironmentsController#metrics_dashboard for the following params: group, title, y_label These params are used to uniquely identify a panel on the metrics dashboard. Metrics are stored in several places, so this adds utilities to find a specific panel from the database or filesystem depending on the metric specified. Also moves some shared utilities into separate classes, notably default values and errors.
63 lines
1.9 KiB
Ruby
63 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Responsible for returning a filtered system dashboard
|
|
# containing only the default embedded metrics. This class
|
|
# operates by selecting metrics directly from the system
|
|
# dashboard.
|
|
#
|
|
# Why isn't this filtering in a processing stage? By filtering
|
|
# here, we ensure the dynamically-determined dashboard is cached.
|
|
#
|
|
# Use Gitlab::Metrics::Dashboard::Finder to retrive dashboards.
|
|
module Metrics
|
|
module Dashboard
|
|
class DefaultEmbedService < ::Metrics::Dashboard::BaseEmbedService
|
|
# For the default filtering for embedded metrics,
|
|
# uses the 'id' key in dashboard-yml definition for
|
|
# identification.
|
|
DEFAULT_EMBEDDED_METRICS_IDENTIFIERS = %w(
|
|
system_metrics_kubernetes_container_memory_total
|
|
system_metrics_kubernetes_container_cores_total
|
|
).freeze
|
|
|
|
# Returns a new dashboard with only the matching
|
|
# metrics from the system dashboard, stripped of groups.
|
|
# @return [Hash]
|
|
def get_raw_dashboard
|
|
panels = panel_groups.each_with_object([]) do |group, panels|
|
|
matched_panels = group['panels'].select { |panel| matching_panel?(panel) }
|
|
|
|
panels.concat(matched_panels)
|
|
end
|
|
|
|
{ 'panel_groups' => [{ 'panels' => panels }] }
|
|
end
|
|
|
|
private
|
|
|
|
# Returns an array of the panels groups on the
|
|
# system dashboard
|
|
def panel_groups
|
|
::Metrics::Dashboard::SystemDashboardService
|
|
.new(project, nil)
|
|
.raw_dashboard['panel_groups']
|
|
end
|
|
|
|
# Identifies a panel as "matching" if any metric ids in
|
|
# the panel is in the list of identifiers to collect.
|
|
def matching_panel?(panel)
|
|
panel['metrics'].any? do |metric|
|
|
metric_identifiers.include?(metric['id'])
|
|
end
|
|
end
|
|
|
|
def metric_identifiers
|
|
DEFAULT_EMBEDDED_METRICS_IDENTIFIERS
|
|
end
|
|
|
|
def identifiers
|
|
metric_identifiers.join('|')
|
|
end
|
|
end
|
|
end
|
|
end
|