mirror of
https://github.com/mistergibson/gxg-web-client.git
synced 2026-08-15 03:26:00 -07:00
108 lines
2.4 KiB
Ruby
108 lines
2.4 KiB
Ruby
module Rubinius
|
|
module Stats
|
|
module Units
|
|
# Time unit factors, where one second is
|
|
# 10^9 nanoseconds (ns)
|
|
# 10^6 microseconds (us)
|
|
# 10^3 milliseconds (ms)
|
|
|
|
SEC_PER_NS = 1.0e-9
|
|
MSEC_PER_NS = 1.0e-6
|
|
USEC_PER_NS = 1.0e-3
|
|
|
|
KBYTES = 1024
|
|
|
|
def usec(ns)
|
|
ns * USEC_PER_NS
|
|
end
|
|
|
|
def msec(ns)
|
|
ns * MSEC_PER_NS
|
|
end
|
|
|
|
def sec(ns)
|
|
ns * SEC_PER_NS
|
|
end
|
|
|
|
def auto_time(time)
|
|
return "0" if time == 0
|
|
|
|
elapsed = sec time
|
|
return "%.2fs" % elapsed if elapsed > 1.0
|
|
|
|
elapsed = msec time
|
|
return "%.2fm" % elapsed if elapsed > 1.0
|
|
|
|
elapsed = usec time
|
|
return "%.2fu" % elapsed if elapsed > 1.0
|
|
|
|
"%dn" % time
|
|
end
|
|
|
|
# Thanks Ruby Quiz #113
|
|
def comma(number, digits=2)
|
|
if number.is_a? Float
|
|
str = "%.#{digits}f" % number
|
|
else
|
|
str = number.to_s
|
|
end
|
|
|
|
str.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(',').reverse
|
|
end
|
|
|
|
def percentage(part, whole, digits=1, percent='%%')
|
|
"%.#{digits}f#{percent}" % (part * 100.0 / whole)
|
|
end
|
|
|
|
def auto_bytes(bytes)
|
|
return bytes.to_s if bytes < KBYTES
|
|
|
|
bytes /= KBYTES.to_f
|
|
return "%.1fK" % bytes if bytes < KBYTES
|
|
|
|
"%.1fM" % (bytes / KBYTES)
|
|
end
|
|
end
|
|
|
|
module Printer
|
|
def columns(*columns)
|
|
@width = columns.inject(0) { |sum, x| sum + x }
|
|
|
|
text_column = "%%-%ds" % columns.shift
|
|
@value_format = "#{text_column}%#{columns[1]}s\n"
|
|
|
|
format = columns.map { |c| "%%%ds" % c }.join
|
|
@stats_format = "#{text_column}#{format}\n"
|
|
|
|
@header_format = "\n" << @stats_format
|
|
end
|
|
|
|
def headings(*headings)
|
|
@headings = headings
|
|
end
|
|
|
|
def heading(leader)
|
|
printf @header_format, leader, *@headings
|
|
separator
|
|
end
|
|
|
|
def separator(limit=nil)
|
|
width = limit || @width
|
|
puts "-" * width
|
|
end
|
|
|
|
def string(metric, string)
|
|
printf @value_format, metric, string
|
|
end
|
|
|
|
def value(metric, value, meth=:comma)
|
|
printf @value_format, metric, send(meth, value)
|
|
end
|
|
|
|
def statistics(metric, data, meth=:comma)
|
|
values = [data[:total], data[:max], data[:min], data[:average]]
|
|
printf @stats_format, metric, *values.map { |d| send meth, d }
|
|
end
|
|
end
|
|
end
|
|
end
|