Class: PgqPrometheus::Collector

Inherits:
PrometheusExporter::Server::TypeCollector
  • Object
show all
Defined in:
lib/pgq_prometheus/collector.rb

Constant Summary collapse

MAX_METRIC_AGE =
30

Instance Method Summary collapse

Constructor Details

#initializeCollector

Returns a new instance of Collector.



10
11
12
13
14
15
16
17
18
19
20
# 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

Instance Method Details

#collect(obj) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/pgq_prometheus/collector.rb', line 48

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

#metricsObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/pgq_prometheus/collector.rb', line 26

def metrics
  return [] if @data.length == 0

  @observers.each_value(&:reset!)
  metrics = {}

  @data.map do |obj|
    labels = gather_labels(obj)

    @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

#typeObject



22
23
24
# File 'lib/pgq_prometheus/collector.rb', line 22

def type
  Config.type
end