lib/prometheus/client/helper/metrics_processing.rb in prometheus-client-mmap-0.7.0.beta32 vs lib/prometheus/client/helper/metrics_processing.rb in prometheus-client-mmap-0.7.0.beta33
- old
+ new
@@ -1,57 +1,40 @@
module Prometheus
module Client
module Helper
module MetricsProcessing
def self.merge_metrics(metrics)
- metrics
- end
-
- def self.min(a, b)
- if a < b
- a
- else
- b
+ metrics.each_value do |metric|
+ metric[:samples] = merge_samples(metric[:samples], metric[:type], metric[:multiprocess_mode]).map do |(name, labels), value|
+ [name, labels.to_h, value]
+ end
end
end
- def self.max(a, b)
- if a > b
- a
- else
- b
- end
- end
-
def self.merge_samples(raw_samples, metric_type, multiprocess_mode)
samples = {}
raw_samples.each do |name, labels, value|
- key = { name: name, labels: labels }
- # without_pid = labels.delete(:pid)
+ without_pid = labels.reject { |l| l[0] == 'pid' }
case metric_type
when :gauge
case multiprocess_mode
when 'min'
- labels.delete(:pid)
- s = samples.fetch(key, value)
- samples[key] = min(s, value)
+ s = samples.fetch([name, without_pid], value)
+ samples[[name, without_pid]] = [s, value].min
when 'max'
- labels.delete(:pid)
- s = samples.fetch(key, value)
- samples[key] = max(s, value)
+ s = samples.fetch([name, without_pid], value)
+ samples[[name, without_pid]] = [s, value].max
when 'livesum'
- labels.delete(:pid)
- s = samples.fetch(key, 0.0)
- samples[key] = s + value
+ s = samples.fetch([name, without_pid], 0.0)
+ samples[[name, without_pid]] = s + value
else # all/liveall
- samples[key] = value
+ samples[[name, labels]] = value
end
else
- labels.delete(:pid)
# Counter, Histogram and Summary.
- s = samples.fetch(key, 0.0)
- samples[key] = s + value
+ s = samples.fetch([name, without_pid], 0.0)
+ samples[[name, without_pid]] = s + value
end
end
samples
end