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-05-31 20:36:07 +0300
committerPawel Chojnacki <pawel@chojnacki.ws>2017-06-05 12:36:56 +0300
commite74896df0c7d0d88958a3d35b3144361cfdd0594 (patch)
tree2680ad5f449c9b58c2fec935d51216ddd20d2884 /lib/gitlab/prometheus
parent7e17d763ac2669dd4fe10075d8ba07eb7e119aea (diff)
Matched Metrics tests
Diffstat (limited to 'lib/gitlab/prometheus')
-rw-r--r--lib/gitlab/prometheus/metric.rb21
-rw-r--r--lib/gitlab/prometheus/metric_group.rb2
-rw-r--r--lib/gitlab/prometheus/queries/matched_metrics_query.rb49
3 files changed, 37 insertions, 35 deletions
diff --git a/lib/gitlab/prometheus/metric.rb b/lib/gitlab/prometheus/metric.rb
index 777cf030ceb..d7cd4237a7b 100644
--- a/lib/gitlab/prometheus/metric.rb
+++ b/lib/gitlab/prometheus/metric.rb
@@ -1,29 +1,24 @@
module Gitlab::Prometheus
class Metric
- attr_reader :group, :title, :detect, :weight, :y_label, :queries
+ attr_reader :group, :title, :required_metrics, :weight, :y_label, :queries
- def initialize(group, title, detect, weight, y_label, queries = [])
- @group = group
+ def initialize(title, required_metrics, weight, y_label, queries = [])
@title = title
- @detect = detect
+ @required_metrics = required_metrics
@weight = weight
@y_label = y_label || 'Values'
@queries = queries
end
- def self.metric_from_entry(group, entry)
- missing_fields = [:title, :detect, :weight, :queries].select { |key| !entry.has_key?(key) }
+ def self.metric_from_entry(entry)
+ missing_fields = [:title, :required_metrics, :weight, :queries].select { |key| !entry.has_key?(key) }
raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty?
- Metric.new(group, entry[:title], entry[:detect], entry[:weight], entry[:y_label],entry[:queries])
+ Metric.new(entry[:title], entry[:required_metrics], entry[:weight], entry[:y_label], entry[:queries])
end
- def self.metrics_from_list(group, list)
- list.map { |entry| metric_from_entry(group, entry) }
- end
-
- def self.additional_metrics_raw
- @additional_metrics_raw ||= YAML.load_file(Rails.root.join('config/additional_metrics.yml')).map(&:deep_symbolize_keys)
+ def self.metrics_from_list(list)
+ list.map { |entry| metric_from_entry(entry) }
end
end
end
diff --git a/lib/gitlab/prometheus/metric_group.rb b/lib/gitlab/prometheus/metric_group.rb
index 9f95525bc0c..0dcd9dc0f36 100644
--- a/lib/gitlab/prometheus/metric_group.rb
+++ b/lib/gitlab/prometheus/metric_group.rb
@@ -22,7 +22,7 @@ module Gitlab::Prometheus
raise ParsingError.new("entry missing required fields #{missing_fields}") unless missing_fields.empty?
group = MetricGroup.new(entry[:group], entry[:priority])
- group.metrics = Metric.metrics_from_list(group, entry[:metrics])
+ group.metrics = Metric.metrics_from_list(entry[:metrics])
group
end
diff --git a/lib/gitlab/prometheus/queries/matched_metrics_query.rb b/lib/gitlab/prometheus/queries/matched_metrics_query.rb
index 5a8b0f6c701..a5e1f6a3fde 100644
--- a/lib/gitlab/prometheus/queries/matched_metrics_query.rb
+++ b/lib/gitlab/prometheus/queries/matched_metrics_query.rb
@@ -16,31 +16,28 @@ module Gitlab::Prometheus::Queries
private
def groups_data
- metrics_series = metrics_with_series(Gitlab::Prometheus::MetricGroup.all)
- lookup = active_series_lookup(metrics_series)
+ metrics_groups = groups_with_active_metrics(Gitlab::Prometheus::MetricGroup.all)
+ lookup = active_series_lookup(metrics_groups)
groups = {}
- metrics_series.each do |metrics, series|
- groups[metrics.group] ||= { active_metrics: 0, metrics_missing_requirements: 0 }
- group = groups[metrics.group]
+ metrics_groups.each do |group|
+ groups[group] ||= { active_metrics: 0, metrics_missing_requirements: 0 }
+ metrics = group.metrics.flat_map(&:required_metrics)
+ active_metrics = metrics.count(&lookup.method(:has_key?))
- if series.all?(&lookup.method(:has_key?))
- group[:active_metrics] += 1
- else
- group[:metrics_missing_requirements] += 1
- end
- group
+ groups[group][:active_metrics] += active_metrics
+ groups[group][:metrics_missing_requirements] += metrics.count - active_metrics
end
groups
end
- def active_series_lookup(metrics)
+ def active_series_lookup(metric_groups)
timeframe_start = 8.hours.ago
timeframe_end = Time.now
- series = metrics.flat_map { |metrics, series| series }.uniq
+ series = metric_groups.flat_map(&:metrics).flat_map(&:required_metrics).uniq
lookup = series.each_slice(MAX_QUERY_ITEMS).flat_map do |batched_series|
client_series(*batched_series, start: timeframe_start, stop: timeframe_end)
@@ -54,17 +51,27 @@ module Gitlab::Prometheus::Queries
series_info.has_key?('environment')
end
- def metrics_with_series(metric_groups)
- label_values = client_label_values || []
+ def available_metrics
+ @available_metrics ||= client_label_values || []
+ end
- metrics = metric_groups.flat_map do |group|
- group.metrics.map do |metric|
- matcher = Regexp.compile(metric.detect)
- [metric, label_values.select(&matcher.method(:match))]
- end
+ def filter_active_metrics(metric_group)
+ metric_group.metrics.select! do |metric|
+ metric.required_metrics.all?(&available_metrics.method(:include?))
end
+ metric_group
+ end
- metrics.select { |metric, labels| labels&.any? }
+ def groups_with_active_metrics(metric_groups)
+ metric_groups.map(&method(:filter_active_metrics)).select { |group| group.metrics.any? }
+ end
+
+ def metrics_with_required_series(metric_groups)
+ metric_groups.flat_map do |group|
+ group.metrics.select do |metric|
+ metric.required_metrics.all?(&available_metrics.method(:include?))
+ end
+ end
end
end
end