Adding a little script to run benchmarks. it save the data in a marshalled
[ebb.git] / ruby_binding / benchmark / benchmark_digest.rb
blob6abd80f42840ffbbd4915c74f829703a7f17be3b
1 # supply the benchmark dump file as an argumetn to this program
2 require 'rubygems'
3 require 'google_chart'
5 class Array
6   def avg
7     sum.to_f / length
8   end
9   def sum
10     inject(0) { |i, s| s += i }
11   end
12 end
14 colors = [
15   '99dddd',
16   'dd99dd',
17   'dddd99'
18 ].sort_by { rand }
20 results = Marshal.load(File.read(ARGV[0]))
22 chart = GoogleChart::LineChart.new('500x300', [Time.now.strftime('%Y.%m.%d'), "requests per second", "#{results.length} data points"].join(','), true)
23 servers = results.map {|r| r[:server] }.uniq
24 servers.each do |server|
25   server_data = results.find_all { |r| r[:server] == server }
26   concurrencies = server_data.map { |d| d[:concurrency] }.uniq
27   data = []
28   concurrencies.each do |c|
29     measurements = server_data.find_all { |d| d[:concurrency] == c }.map { |d| d[:rps] }
30     data << [c, measurements.avg]
31   end
32   chart.data(server, data.sort, colors.shift)
33 end
34 chart.axis(:x, :range => [0,100])
35 chart.axis(:x, :labels => ['concurrency'], :positions => [50])
36 puts chart.to_url