Class: PrometheusExporter::Server::Collector

Inherits:
CollectorBase show all
Defined in:
lib/prometheus_exporter/server/collector.rb

Constant Summary collapse

MAX_PROCESS_METRIC_AGE =
60
PROCESS_GAUGES =
{
  heap_free_slots: "Free ruby heap slots.",
  heap_live_slots: "Used ruby heap slots.",
  v8_heap_size: "Total JavaScript V8 heap size (bytes).",
  v8_used_heap_size: "Total used JavaScript V8 heap size (bytes).",
  v8_physical_size: "Physical size consumed by V8 heaps.",
  v8_heap_count: "Number of V8 contexts running.",
  rss: "Total RSS used by process.",
}
PROCESS_COUNTERS =
{
  major_gc_ops_total: "Major GC operations by process.",
  minor_gc_ops_total: "Minor GC operations by process.",
  allocated_objects_total: "Total number of allocated objects by process.",
}

Instance Method Summary collapse

Constructor Details

#initialize(json_serializer: nil) ⇒ Collector

Returns a new instance of Collector.



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/prometheus_exporter/server/collector.rb', line 23

def initialize(json_serializer: nil)
  @process_metrics = []
  @metrics = {}
  @mutex = Mutex.new
  @collectors = {}
  @json_serializer = PrometheusExporter.detect_json_serializer(json_serializer)
  register_collector(WebCollector.new)
  register_collector(ProcessCollector.new)
  register_collector(SidekiqCollector.new)
  register_collector(DelayedJobCollector.new)
end

Instance Method Details

#process(str) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/prometheus_exporter/server/collector.rb', line 39

def process(str)
  obj = @json_serializer.parse(str)
  @mutex.synchronize do
    if collector = @collectors[obj["type"]]
      collector.collect(obj)
    else
      metric = @metrics[obj["name"]]
      if !metric
        metric = register_metric_unsafe(obj)
      end
      metric.observe(obj["value"], obj["keys"])
    end
  end
end

#prometheus_metrics_textObject



54
55
56
57
58
59
# File 'lib/prometheus_exporter/server/collector.rb', line 54

def prometheus_metrics_text
  @mutex.synchronize do
    (@metrics.values + @collectors.values.map(&:metrics).flatten)
      .map(&:to_prometheus_text).join("\n")
  end
end

#register_collector(collector) ⇒ Object



35
36
37
# File 'lib/prometheus_exporter/server/collector.rb', line 35

def register_collector(collector)
  @collectors[collector.type] = collector
end

#register_metric(metric) ⇒ Object



61
62
63
64
65
# File 'lib/prometheus_exporter/server/collector.rb', line 61

def register_metric(metric)
  @mutex.synchronize do
    @metrics[metric.name] = metric
  end
end