Class: PgqPrometheus::Collector

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

Instance Method Summary collapse

Constructor Details

#initializeCollector

Returns a new instance of Collector.



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/pgq_prometheus/collector.rb', line 9

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



50
51
52
# File 'lib/pgq_prometheus/collector.rb', line 50

def collect(obj)
  @data << obj
end

#metricsObject



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

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

#typeObject



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

def type
  Config.type
end