diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-06-16 15:23:33 +0300 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-06-16 15:34:23 +0300 |
commit | b97d5b65dd40fb5d8753c0677534e82cb5636f2d (patch) | |
tree | 4e6fbc43e10ddbb2d1be735df5ea2224aa12d42e /lib/gitlab/prometheus | |
parent | 0e7e7c2f2bd0e9c913cda438826a60e761130271 (diff) |
Use include ActiveModel::Model to hold metrics data parsed from yaml.
Diffstat (limited to 'lib/gitlab/prometheus')
-rw-r--r-- | lib/gitlab/prometheus/additional_metrics_parser.rb | 23 | ||||
-rw-r--r-- | lib/gitlab/prometheus/metric.rb | 15 | ||||
-rw-r--r-- | lib/gitlab/prometheus/metric_group.rb | 10 |
3 files changed, 18 insertions, 30 deletions
diff --git a/lib/gitlab/prometheus/additional_metrics_parser.rb b/lib/gitlab/prometheus/additional_metrics_parser.rb index 9bd41b99d81..70151e8c6ad 100644 --- a/lib/gitlab/prometheus/additional_metrics_parser.rb +++ b/lib/gitlab/prometheus/additional_metrics_parser.rb @@ -9,26 +9,17 @@ module Gitlab private - def metrics_from_list(list) - list.map { |entry| metric_from_entry(entry) } - end - - def metric_from_entry(entry) - required_fields = [:title, :required_metrics, :weight, :queries] - missing_fields = required_fields.select { |key| entry[key].nil? } - raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty? - - Metric.new(entry[:title], entry[:required_metrics], entry[:weight], entry[:y_label], entry[:queries]) + def validate!(obj) + raise ParsingError.new(obj.errors.full_messages.join('\n')) unless obj.valid? end def group_from_entry(entry) - required_fields = [:group, :priority, :metrics] - missing_fields = required_fields.select { |key| entry[key].nil? } - - raise ParsingError.new("entry missing required fields #{missing_fields.map(&:to_s)}") unless missing_fields.empty? + entry[:name] = entry.delete(:group) + entry[:metrics]&.map! do |entry| + Metric.new(entry).tap(&method(:validate!)) + end - group = MetricGroup.new(entry[:group], entry[:priority]) - group.tap { |g| g.metrics = metrics_from_list(entry[:metrics]) } + MetricGroup.new(entry).tap(&method(:validate!)) end def additional_metrics_raw diff --git a/lib/gitlab/prometheus/metric.rb b/lib/gitlab/prometheus/metric.rb index 5155064317c..f54b2c6aaff 100644 --- a/lib/gitlab/prometheus/metric.rb +++ b/lib/gitlab/prometheus/metric.rb @@ -1,14 +1,15 @@ module Gitlab module Prometheus class Metric - attr_reader :group, :title, :required_metrics, :weight, :y_label, :queries + include ActiveModel::Model - def initialize(title, required_metrics, weight, y_label, queries = []) - @title = title - @required_metrics = required_metrics - @weight = weight - @y_label = y_label || 'Values' - @queries = queries + attr_accessor :title, :required_metrics, :weight, :y_label, :queries + + validates :title, :required_metrics, :weight, :y_label, :queries, presence: true + + def initialize(params = {}) + super(params) + @y_label ||= 'Values' end end end diff --git a/lib/gitlab/prometheus/metric_group.rb b/lib/gitlab/prometheus/metric_group.rb index 12bdf407ce0..729fef34b35 100644 --- a/lib/gitlab/prometheus/metric_group.rb +++ b/lib/gitlab/prometheus/metric_group.rb @@ -1,14 +1,10 @@ module Gitlab module Prometheus class MetricGroup - attr_reader :priority, :name - attr_accessor :metrics + include ActiveModel::Model - def initialize(name, priority, metrics = []) - @name = name - @priority = priority - @metrics = metrics - end + attr_accessor :name, :priority, :metrics + validates :name, :priority, :metrics, presence: true def self.all AdditionalMetricsParser.load_groups_from_yaml |