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