diff options
author | syasonik <syasonik@gitlab.com> | 2019-04-22 09:23:35 +0300 |
---|---|---|
committer | syasonik <syasonik@gitlab.com> | 2019-04-24 13:23:04 +0300 |
commit | a08d4cad90f98169339a3793d18f1bae4e46ad83 (patch) | |
tree | 91238d10798fe5e896f05fe8c8d83e388706e6e0 /lib/gitlab/metrics_dashboard/stages/base_stage.rb | |
parent | 25f957711dac1d401982c18da439580b2e9912c9 (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.rb | 20 |
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 |