Skip to content

Instantly share code, notes, and snippets.

@hugobarauna
Forked from Gregg/autobench_grapher.rb
Created August 17, 2009 22:07

Revisions

  1. @Gregg Gregg created this gist Jun 18, 2009.
    91 changes: 91 additions & 0 deletions autobench_grapher.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,91 @@
    # Used to graph results from autobench
    #
    # Usage: ruby autobench_grapher.rb result_from_autobench.tsv
    #
    # This will generate three svg & png graphs

    require "rubygems"
    require "scruffy"
    require 'csv'
    require 'yaml'

    class ResultGrapher

    def self.run
    new(ARGV.first).run
    end

    def initialize(result_file)
    @result_file = result_file
    @stats = {
    :attempted_request_rate => [],
    :average_reply_rate => [],
    :average_response_time => [],
    :errors => []
    }
    end

    def run
    parse_log
    generate_graph
    end

    def parse_log
    File.open(@result_file).each do |line|
    row = line.split("\t")

    next if row[0] =~ /^\D+/

    @stats[:attempted_request_rate] << row[0].to_f
    @stats[:average_reply_rate] << row[4].to_f
    @stats[:average_response_time] << row[7].to_f
    @stats[:errors] << row[9].to_f
    end
    end

    def file_root
    @result_file.gsub(/\..*/, "")
    end

    def generate_graph
    g = Scruffy::Graph.new
    g.title = "Average Reply Rate (Responses per Second)"
    g.renderer = Scruffy::Renderers::Standard.new

    g.add :area, "Attempted Request Rate", @stats[:attempted_request_rate]
    g.add :line, "Average Reply Rate", @stats[:average_reply_rate]

    g.point_markers = @stats[:attempted_request_rate]

    g.render :to => "#{file_root}_average_reply_rate.svg"
    g.render :width => 600, :height => 400,
    :to => "#{file_root}_average_reply_rate.png", :as => 'png'

    g2 = Scruffy::Graph.new
    g2.title = "Average Response Time (in ms)"
    g2.renderer = Scruffy::Renderers::Standard.new

    g2.add :line, "Average Response Time", @stats[:average_response_time]

    g2.point_markers = @stats[:attempted_request_rate]

    g2.render :to => "#{file_root}_average_response_time.svg"
    g2.render :width => 600, :height => 400,
    :to => "#{file_root}_average_response_time.png", :as => 'png'

    g3 = Scruffy::Graph.new
    g3.title = "Errors"
    g3.renderer = Scruffy::Renderers::Standard.new

    g3.add :line, "Errors", @stats[:errors]

    g3.point_markers = @stats[:attempted_request_rate]

    g3.render :to => "#{file_root}_errors.svg"
    g3.render :width => 600, :height => 400,
    :to => "#{file_root}_errors.png", :as => 'png'

    end
    end

    ResultGrapher.run