summaryrefslogtreecommitdiff
path: root/app/models/performance_monitoring/prometheus_panel_group.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/performance_monitoring/prometheus_panel_group.rb')
-rw-r--r--app/models/performance_monitoring/prometheus_panel_group.rb21
1 files changed, 14 insertions, 7 deletions
diff --git a/app/models/performance_monitoring/prometheus_panel_group.rb b/app/models/performance_monitoring/prometheus_panel_group.rb
index e672545fce3..f88106f259b 100644
--- a/app/models/performance_monitoring/prometheus_panel_group.rb
+++ b/app/models/performance_monitoring/prometheus_panel_group.rb
@@ -8,15 +8,22 @@ module PerformanceMonitoring
validates :group, presence: true
validates :panels, presence: true
+ class << self
+ def from_json(json_content)
+ build_from_hash(json_content).tap(&:validate!)
+ end
- def self.from_json(json_content)
- panel_group = new(
- group: json_content['group'],
- priority: json_content['priority'],
- panels: json_content['panels'].map { |panel| PrometheusPanel.from_json(panel) }
- )
+ private
- panel_group.tap(&:validate!)
+ def build_from_hash(attributes)
+ return new unless attributes.is_a?(Hash)
+
+ new(
+ group: attributes['group'],
+ priority: attributes['priority'],
+ panels: attributes['panels']&.map { |panel| PrometheusPanel.from_json(panel) }
+ )
+ end
end
end
end