class Gremlin::Instruments::Summary
Public Instance Methods
default()
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 88 def default Gremlin::Quantile::Estimator.new end
get(labels={})
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 54 def get(labels={}) val = retention_get[labels.to_json] return val if val.nil? deserialized = JSON.parse(val) Value.new(unpack(deserialized)) end
observe(labels={}, value)
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 16 def observe(labels={}, value) # grabbing estimator from redis # deserializing and converting back to objects # adding a new observation into the values array # set the updated estimator into redis # return sum # if retention_get == {} # e = nil # else # e = parse(retention_get)[labels.to_json] # end # # if e.nil? # estimator = default # else # deserialized = JSON.parse(e) # estimator = unpack(deserialized) # end # sum = estimator.observe(value) # # @r.hset retention_key, labels.to_json, p(estimator.serialize) # # sum estimator = Gremlin::Quantile::Estimator.deserialize(retention_get[labels.to_json]) sum = estimator.observe(value) @r.hset retention_key, labels.to_json, estimator.serialize sum end
parse(value)
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 62 def parse(value) vals = value.each_with_object({}) { |(l,v), m| m[JSON.parse(l).merge(@base_labels)] = cast(v) } values = vals.each_with_object({}) do |(l, v), memo| v = JSON.parse(v) if v.is_a? Hash v = Value.new(unpack(v)) v.each do |b, i| memo[l.merge({percent: b})] = i end end end { name: @name, type: type_string, help: help_string, values: values } end
retention_key()
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 96 def retention_key "gremlin_prometheus_#{node}_summary_#{name}" end
type()
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 92 def type :summary end
unpack(metric_hash)
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 83 def unpack(metric_hash) Gremlin::Quantile::Estimator.new(values: metric_hash["values"], invariants: metric_hash["invariants"].map { |i| Gremlin::Quantile::Percentile.new(i["percent"]) }) end
values()
click to toggle source
# File lib/gremlin/instruments/summary.rb, line 46 def values retention_get.each_with_object({}) do |(labels, value), memo| deserialized = JSON.parse(value) e = unpack(deserialized) memo[JSON.parse(labels)] = Value.new(e) end end