module StatsdServer::Math

Public Class Methods

summarize(values, opts = {}) click to toggle source
# File lib/statsdserver/math.rb, line 5
def self.summarize(values, opts = {})
  opts = {
    :percentile => 90,
  }.merge(opts)
  res = {}

  values.sort!
  res[:min] = values[0]
  res[:max] = values[-1]
  res[:mean] = res[:min]
  res[:max_at_threshold] = res[:min]
  if values.length > 1
    threshold_index = ((100 - opts[:percentile]) / 100.0) * values.length
    threshold_count = values.length - threshold_index.round
    valid_values = values.slice(0, threshold_count)
    res[:max_at_threshold] = valid_values[-1]
    sum = 0
    valid_values.each { |v| sum += v }
    res[:mean] = sum / valid_values.length
  end

  return res
end