class Gremlin::Quantile::Estimator
Attributes
invariants[RW]
Public Class Methods
deserialize(message)
click to toggle source
# File lib/gremlin/quantile/estimator.rb, line 40 def self.deserialize(message) doc = JSON.parse(message || "{}") new(values: doc["values"], invariants: doc["invariants"]) end
new(values: nil, invariants: nil)
click to toggle source
# File lib/gremlin/quantile/estimator.rb, line 7 def initialize(values: nil, invariants: nil) if invariants.nil? invariants = [Gremlin::Quantile::Percentile.new(0.5), Gremlin::Quantile::Percentile.new(0.9), Gremlin::Quantile::Percentile.new(0.99)] end @invariants = invariants @values = values || [] end
Public Instance Methods
observe(value)
click to toggle source
# File lib/gremlin/quantile/estimator.rb, line 16 def observe(value) @values << value sum end
serialize()
click to toggle source
# File lib/gremlin/quantile/estimator.rb, line 33 def serialize JSON.dump({ invariants: @invariants.map { |i| i.to_h }, values: @values }) end
sum()
click to toggle source
# File lib/gremlin/quantile/estimator.rb, line 21 def sum @values.reduce { |sum, x| sum += x } end
values()
click to toggle source
# File lib/gremlin/quantile/estimator.rb, line 25 def values @values.sort! invariants.inject(Hash.new) do |doc, invariant| doc[invariant.percent] = invariant.calculate(@values) doc end end