class Gremlin::Registry

Constants

AlreadyRegisteredError
NotAMetricError
NotRegisteredError

Public Class Methods

new() click to toggle source
# File lib/gremlin/registry.rb, line 7
def initialize
  @r = Redis.new(**Gremlin.configuration.redis)
end

Public Instance Methods

deregister(instrument) click to toggle source
# File lib/gremlin/registry.rb, line 49
def deregister(instrument)
  name = instrument.name
  raise NotRegisteredError.new() if @r.hdel(retention_key, name) == 0
  metrics
end
deserialize(metric) click to toggle source
# File lib/gremlin/registry.rb, line 55
def deserialize(metric)
  m = JSON.parse(metric)
  Gremlin::Instruments.const_get(m["type"].capitalize).new(m["name"].to_sym, m["docstring"], m["base_labels"])
end
dump_metrics() click to toggle source
# File lib/gremlin/registry.rb, line 29
def dump_metrics
  retention_get
end
exist?(name) click to toggle source
# File lib/gremlin/registry.rb, line 38
def exist?(name)
  @r.hexists retention_key, name.to_s
end
get(name) click to toggle source
# File lib/gremlin/registry.rb, line 33
def get(name)
  m = retention_get[name.to_s]
  deserialize(m) unless m.nil?
end
metrics() click to toggle source
# File lib/gremlin/registry.rb, line 23
def metrics
  retention_get.values.map do |m|
    deserialize(m)
  end
end
node() click to toggle source
# File lib/gremlin/registry.rb, line 11
def node
  `hostname`.strip
end
register(instrument) click to toggle source
# File lib/gremlin/registry.rb, line 42
def register(instrument)
  name = instrument.name
  set = @r.hset retention_key, name, serialize(instrument)

  instrument
end
retention_get() click to toggle source
# File lib/gremlin/registry.rb, line 19
def retention_get
  @r.hgetall retention_key
end
retention_key() click to toggle source
# File lib/gremlin/registry.rb, line 15
def retention_key
  "gremlin_prometheus_#{node}_metrics_registry"
end
serialize(metric) click to toggle source
# File lib/gremlin/registry.rb, line 60
def serialize(metric)
  raise NotAMetricError.new("Specified object is not an instrument and cannot be serialized") unless metric.is_a? Gremlin::Instruments::Base
  {
    type: metric.type,
    name: metric.name.to_s,
    docstring: metric.docstring,
    base_labels: metric.base_labels
  }.to_json
end