class PrometheusExporter::CustomActiveRecordCollector
Constants
- ACTIVE_RECORD_GAUGES
- MAX_METRIC_AGE
Public Class Methods
Source
# File lib/prometheus_exporter/custom_active_record_collector.rb, line 29 def initialize super @active_record_metrics = PrometheusExporter::Server::MetricsContainer.new(ttl: MAX_METRIC_AGE) @active_record_metrics.filter = ->(new_metric, old_metric) do new_metric["pid"] == old_metric["pid"] && new_metric["hostname"] == old_metric["hostname"] && new_metric["metric_labels"]["pool_name"] == old_metric["metric_labels"]["pool_name"] end end
Calls superclass method
Public Instance Methods
Source
# File lib/prometheus_exporter/custom_active_record_collector.rb, line 86 def collect(obj) @active_record_metrics << obj end
Source
# File lib/prometheus_exporter/custom_active_record_collector.rb, line 45 def metrics return [] if @active_record_metrics.length.zero? # rubocop:disable Style/ZeroLengthPredicate aggregated = {} @active_record_metrics.each do |metric| label_key = metric["metric_labels"] || {} label_key.merge!(metric["custom_labels"]) if metric["custom_labels"] group_key = label_key.to_a.sort if aggregated[group_key] ACTIVE_RECORD_GAUGES.each_key do |key| aggregated[group_key][:values][key] = ( aggregated[group_key][:values][key] || 0 ) + (metric[key] || 0) end else values = ACTIVE_RECORD_GAUGES.keys.index_with { |key| metric[key] || 0 } aggregated[group_key] = { labels: label_key, values: values } end end metrics = {} aggregated.each_value do |agg| ACTIVE_RECORD_GAUGES.each do |key, help| next if (v = agg[:values][key]).nil? gauge = metrics[key] ||= PrometheusExporter::Metric::Gauge.new( "active_record_connection_pool_#{key}", help ) gauge.observe(v, agg[:labels]) end end metrics.values end
Source
# File lib/prometheus_exporter/custom_active_record_collector.rb, line 41 def type "active_record" end