class PgqPrometheus::Collector

Constants

MAX_METRIC_AGE

Public Class Methods

new() click to toggle source
# File lib/pgq_prometheus/collector.rb, line 10
def initialize
  @data = []
  @observers = {}

  Config._metrics.each do |name, opts|
    metric_class = Kernel.const_get opts[:metric_class].to_s
    help = opts[:help]
    metric_args = opts[:metric_args]
    @observers[name] = metric_class.new("#{type}_#{name}", help, *metric_args)
  end
end

Public Instance Methods

collect(obj) click to toggle source
# File lib/pgq_prometheus/collector.rb, line 51
def collect(obj)
  now = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)

  obj['created_at'] = now
  @data.delete_if { |m| m['created_at'] + MAX_METRIC_AGE < now }
  @data << obj
end
metrics() click to toggle source
# File lib/pgq_prometheus/collector.rb, line 26
def metrics
  return [] if @data.length == 0

  metrics = {}

  @data.map do |obj|
    labels = {}
    # labels are passed by PgqPrometheus::Processor
    labels.merge!(obj['metric_labels']) if obj['metric_labels']
    # custom_labels are passed by PrometheusExporter::Client
    labels.merge!(obj['custom_labels']) if obj['custom_labels']

    @observers.each do |name, observer|
      name = name.to_s
      value = obj[name]
      if value
        observer.observe(value, labels)
        metrics[name] = observer
      end
    end
  end

  metrics.values
end
type() click to toggle source
# File lib/pgq_prometheus/collector.rb, line 22
def type
  Config.type
end