1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
# encoding: UTF-8
require 'thread'
require 'prometheus/client/counter'
require 'prometheus/client/summary'
require 'prometheus/client/gauge'
require 'prometheus/client/histogram'
module Prometheus
module Client
# Registry
class Registry
class AlreadyRegisteredError < StandardError; end
def initialize
@metrics = {}
@mutex = Mutex.new
end
def register(metric)
name = metric.name
@mutex.synchronize do
if exist?(name.to_sym)
raise AlreadyRegisteredError, "#{name} has already been registered"
else
@metrics[name.to_sym] = metric
end
end
metric
end
def counter(name, docstring, base_labels = {})
register(Counter.new(name, docstring, base_labels))
end
def summary(name, docstring, base_labels = {})
register(Summary.new(name, docstring, base_labels))
end
def gauge(name, docstring, base_labels = {}, multiprocess_mode = :all)
register(Gauge.new(name, docstring, base_labels, multiprocess_mode))
end
def histogram(name, docstring, base_labels = {},
buckets = Histogram::DEFAULT_BUCKETS)
register(Histogram.new(name, docstring, base_labels, buckets))
end
def exist?(name)
@metrics.key?(name)
end
def get(name)
@metrics[name.to_sym]
end
def metrics
@metrics.values
end
end
end
end
|