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