class RawkLog::Stat

Constants

DEFAULT_LABEL_SIZE

Public Class Methods

new(key) click to toggle source
# File lib/rawk_log/stat.rb, line 9
def initialize(key)
  @key=key
  @min = nil
  @max = nil
  @sum = 0
  @sum_squares = 0
  @count = 0
  @values = []
end
test() click to toggle source
# File lib/rawk_log/stat.rb, line 81
def self.test
  stat = Stat.new(30)
  stat.add(5)
  stat.add(6)
  stat.add(8)
  stat.add(9)
  results = [7==stat.median ? "median Success" : "median Failure"]
  results <<= (7==stat.average ? "average Success" : "average Failure")
  results <<= (158==(stat.standard_deviation*100).round ? "std Success" : "std Failure")
  puts results.join("\n")
  exit (results.select { |m| m =~ /Failure/ }.size)
end

Public Instance Methods

add(value) click to toggle source
# File lib/rawk_log/stat.rb, line 19
def add(value)
  value=1.0*value
  @count+=1
  @min = value unless @min
  @min = value if value<@min
  @max = value unless @max
  @max = value if value>@max
  @sum += value
  @sum_squares += value*value
  @values << value
end
average() click to toggle source
# File lib/rawk_log/stat.rb, line 55
def average
  @count > 0 ? @sum/@count : @sum
end
count() click to toggle source
# File lib/rawk_log/stat.rb, line 39
def count
  @count
end
header(label_size = DEFAULT_LABEL_SIZE) click to toggle source
# File lib/rawk_log/stat.rb, line 31
def header(label_size = DEFAULT_LABEL_SIZE)
  sprintf "%*s  %s" % [-label_size, "Request", HEADER]
end
key() click to toggle source
# File lib/rawk_log/stat.rb, line 35
def key
  @key
end
max() click to toggle source
# File lib/rawk_log/stat.rb, line 51
def max
  @max
end
median() click to toggle source
# File lib/rawk_log/stat.rb, line 59
def median
  return nil unless @values
  l = @values.length
  return nil unless l>0
  @values.sort!
  return (@values[l/2-1]+@values[l/2])/2 if l%2==0
  @values[(l+1)/2-1]
end
min() click to toggle source
# File lib/rawk_log/stat.rb, line 47
def min
  @min
end
standard_deviation() click to toggle source
# File lib/rawk_log/stat.rb, line 68
def standard_deviation
  return 0 if @count<=1
  Math.sqrt((@sum_squares - (@sum*@sum/@count))/ (@count))
end
sum() click to toggle source
# File lib/rawk_log/stat.rb, line 43
def sum
  @sum
end
to_s(label_size = DEFAULT_LABEL_SIZE) click to toggle source
# File lib/rawk_log/stat.rb, line 73
def to_s(label_size = DEFAULT_LABEL_SIZE)
  if count > 0
    sprintf("%*s %6d %9.2f %7d %7d %7d %7d %7d", -label_size, key, count, sum, max*1000.0, median*1000.0, average*1000.0, min*1000.0, standard_deviation*1000.0)
  else
    sprintf("%*s %6d", -label_size, key, 0)
  end
end