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:
authorPawel Chojnacki <pawel@chojnacki.ws>2017-06-16 15:23:33 +0300
committerPawel Chojnacki <pawel@chojnacki.ws>2017-06-16 15:34:23 +0300
commitb97d5b65dd40fb5d8753c0677534e82cb5636f2d (patch)
tree4e6fbc43e10ddbb2d1be735df5ea2224aa12d42e /lib/gitlab/prometheus
parent0e7e7c2f2bd0e9c913cda438826a60e761130271 (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.rb23
-rw-r--r--lib/gitlab/prometheus/metric.rb15
-rw-r--r--lib/gitlab/prometheus/metric_group.rb10
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