Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/metrics_dashboard/stages')
-rw-r--r--lib/gitlab/metrics_dashboard/stages/base_stage.rb20
-rw-r--r--lib/gitlab/metrics_dashboard/stages/project_metrics_inserter.rb6
-rw-r--r--lib/gitlab/metrics_dashboard/stages/sorter.rb4
3 files changed, 30 insertions, 0 deletions
diff --git a/lib/gitlab/metrics_dashboard/stages/base_stage.rb b/lib/gitlab/metrics_dashboard/stages/base_stage.rb
index bdbf0c196cc..df49126a07b 100644
--- a/lib/gitlab/metrics_dashboard/stages/base_stage.rb
+++ b/lib/gitlab/metrics_dashboard/stages/base_stage.rb
@@ -4,6 +4,8 @@ module Gitlab
module MetricsDashboard
module Stages
class BaseStage
+ DashboardLayoutError = Class.new(StandardError)
+
DEFAULT_PANEL_TYPE = 'area-chart'
attr_reader :project, :environment
@@ -23,9 +25,27 @@ module Gitlab
protected
+ def missing_panel_groups!
+ raise DashboardLayoutError.new('Top-level key :panel_groups must be an array')
+ end
+
+ def missing_panels!
+ raise DashboardLayoutError.new('Each "panel_group" must define an array :panels')
+ end
+
+ def missing_metrics!
+ raise DashboardLayoutError.new('Each "panel" must define an array :metrics')
+ end
+
def for_metrics(dashboard)
+ missing_panel_groups! unless dashboard[:panel_groups].is_a?(Array)
+
dashboard[:panel_groups].each do |panel_group|
+ missing_panels! unless panel_group[:panels].is_a?(Array)
+
panel_group[:panels].each do |panel|
+ missing_metrics! unless panel[:metrics].is_a?(Array)
+
panel[:metrics].each do |metric|
yield metric
end
diff --git a/lib/gitlab/metrics_dashboard/stages/project_metrics_inserter.rb b/lib/gitlab/metrics_dashboard/stages/project_metrics_inserter.rb
index 8edb21c89c1..ab33ee75cce 100644
--- a/lib/gitlab/metrics_dashboard/stages/project_metrics_inserter.rb
+++ b/lib/gitlab/metrics_dashboard/stages/project_metrics_inserter.rb
@@ -60,15 +60,21 @@ module Gitlab
end
def find_panel_group(panel_groups, metric)
+ return unless panel_groups
+
panel_groups.find { |group| group[:group] == metric.group_title }
end
def find_panel(panels, metric)
+ return unless panels
+
panel_identifiers = [DEFAULT_PANEL_TYPE, metric.title, metric.y_label]
panels.find { |panel| panel.values_at(:type, :title, :y_label) == panel_identifiers }
end
def find_metric(metrics, metric)
+ return unless metrics
+
metrics.find { |m| m[:id] == metric.identifier }
end
diff --git a/lib/gitlab/metrics_dashboard/stages/sorter.rb b/lib/gitlab/metrics_dashboard/stages/sorter.rb
index a2429e65efa..ca310c9637a 100644
--- a/lib/gitlab/metrics_dashboard/stages/sorter.rb
+++ b/lib/gitlab/metrics_dashboard/stages/sorter.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stages
class Sorter < BaseStage
def transform!(dashboard)
+ missing_panel_groups! unless dashboard[:panel_groups].is_a? Array
+
sort_groups!(dashboard)
sort_panels!(dashboard)
end
@@ -19,6 +21,8 @@ module Gitlab
# Sorts the panels in the dashboard by the :weight key
def sort_panels!(dashboard)
dashboard[:panel_groups].each do |group|
+ missing_panels! unless group[:panels].is_a? Array
+
group[:panels] = group[:panels].sort_by { |panel| -panel[:weight].to_i }
end
end