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:
authorsyasonik <syasonik@gitlab.com>2019-04-22 09:23:35 +0300
committersyasonik <syasonik@gitlab.com>2019-04-24 13:23:04 +0300
commita08d4cad90f98169339a3793d18f1bae4e46ad83 (patch)
tree91238d10798fe5e896f05fe8c8d83e388706e6e0 /lib/gitlab/metrics_dashboard/stages/base_stage.rb
parent25f957711dac1d401982c18da439580b2e9912c9 (diff)
Defend against dashboard errors, rework sequence
Diffstat (limited to 'lib/gitlab/metrics_dashboard/stages/base_stage.rb')
-rw-r--r--lib/gitlab/metrics_dashboard/stages/base_stage.rb20
1 files changed, 20 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