class Steep::Sampler
def average
def average if count > 0 total/count else 0.to_f end end
def count
def count @samples.count end
def initialize()
def initialize() @samples = [] end
def percentile(p)
def percentile(p) c = [count * p / 100.to_r, 1].max or raise slowests(c.to_i).last&.last || 0.to_f end
def sample(message)
def sample(message) start = Time.now begin yield ensure time = Time.now - start @samples << [message, time] end end
def slowests(num)
def slowests(num) @samples.sort_by(&:last).reverse.take(num) end
def total
def total @samples.sum(&:last) end