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