Kouhei Sutou
null+****@clear*****
Wed Oct 16 18:08:37 JST 2013
Kouhei Sutou 2013-10-16 18:08:37 +0900 (Wed, 16 Oct 2013) New Revision: a6170d96fde86156047052376a2b1b985293eb63 https://github.com/droonga/drnbench/commit/a6170d96fde86156047052376a2b1b985293eb63 Message: Unindent Modified files: lib/drnbench/client/http-droonga-search.rb lib/drnbench/client/http.rb lib/drnbench/gradual-runner.rb lib/drnbench/result.rb lib/drnbench/runner.rb Modified: lib/drnbench/client/http-droonga-search.rb (+18 -18) =================================================================== --- lib/drnbench/client/http-droonga-search.rb 2013-10-16 18:07:57 +0900 (ee42e6b) +++ lib/drnbench/client/http-droonga-search.rb 2013-10-16 18:08:37 +0900 (d92f6b2) @@ -1,26 +1,26 @@ # -*- coding: utf-8 -*- module Drnbench - class HttpDroongaSearchClient < HttpClient - DEFAULT_PATH = "/droonga/search" - DEFAULT_METHOD = "POST" + class HttpDroongaSearchClient < HttpClient + DEFAULT_PATH = "/droonga/search" + DEFAULT_METHOD = "POST" - def initialize(params) - params[:path] ||= DEFAULT_PATH - params[:method] ||= DEFAULT_METHOD - params[:requests] = populate_http_requests(params[:requests]) - super - end + def initialize(params) + params[:path] ||= DEFAULT_PATH + params[:method] ||= DEFAULT_METHOD + params[:requests] = populate_http_requests(params[:requests]) + super + end - private - def populate_http_requests(requests) - requests.collect do |queries| - { - :body => { - :queries => queries, - }, - } - end + private + def populate_http_requests(requests) + requests.collect do |queries| + { + :body => { + :queries => queries, + }, + } end end + end end Modified: lib/drnbench/client/http.rb (+47 -47) =================================================================== --- lib/drnbench/client/http.rb 2013-10-16 18:07:57 +0900 (de6cad5) +++ lib/drnbench/client/http.rb 2013-10-16 18:08:37 +0900 (9669899) @@ -5,63 +5,63 @@ require "net/http" require "json" module Drnbench - class HttpClient - attr_reader :requests, :results, :wait + class HttpClient + attr_reader :requests, :results, :wait - DEFAULT_PATH = "/" - DEFAULT_METHOD = "GET" + DEFAULT_PATH = "/" + DEFAULT_METHOD = "GET" - def initialize(params) - @requests = params[:requests] - @result = params[:result] - @wait = params[:wait] + def initialize(params) + @requests = params[:requests] + @result = params[:result] + @wait = params[:wait] - @default_host = params[:host] - @default_port = params[:port] - @default_path = params[:path] || DEFAULT_PATH - @default_method = params[:method] || DEFAULT_METHOD - end + @default_host = params[:host] + @default_port = params[:port] + @default_path = params[:path] || DEFAULT_PATH + @default_method = params[:method] || DEFAULT_METHOD + end - def run - @thread = Thread.new do - loop do - request =****@reque***** - request[:host] ||= @default_host - request[:port] ||= @default_port - request[:path] ||= @default_path - request[:method] ||= @default_method - request[:method] = request[:method].upcase + def run + @thread = Thread.new do + loop do + request =****@reque***** + request[:host] ||= @default_host + request[:port] ||= @default_port + request[:path] ||= @default_path + request[:method] ||= @default_method + request[:method] = request[:method].upcase - Net::HTTP.start(request[:host], request[:port]) do |http| - header = { - "user-agent" => "Ruby/#{RUBY_VERSION} Droonga::Benchmark::Runner::HttpClient" - } - response = nil - start_time = Time.now - case request[:method] - when "GET" - response = http.get(request[:path], header) - when "POST" - body = request[:body] - unless body.is_a?(String) - body = JSON.generate(body) - end - response = http.post(request[:path], body, header) + Net::HTTP.start(request[:host], request[:port]) do |http| + header = { + "user-agent" => "Ruby/#{RUBY_VERSION} Droonga::Benchmark::Runner::HttpClient" + } + response = nil + start_time = Time.now + case request[:method] + when "GET" + response = http.get(request[:path], header) + when "POST" + body = request[:body] + unless body.is_a?(String) + body = JSON.generate(body) end - @result << { - :request => request, - :status => response.code, - :elapsed_time => Time.now - start_time, - } + response = http.post(request[:path], body, header) end - sleep @wait + @result << { + :request => request, + :status => response.code, + :elapsed_time => Time.now - start_time, + } end + sleep @wait end - self end + self + end - def stop - @thread.exit - end + def stop + @thread.exit end + end end Modified: lib/drnbench/gradual-runner.rb (+64 -64) =================================================================== --- lib/drnbench/gradual-runner.rb 2013-10-16 18:07:57 +0900 (cb8aa51) +++ lib/drnbench/gradual-runner.rb 2013-10-16 18:08:37 +0900 (691ec8b) @@ -4,86 +4,86 @@ require "drnbench/runner" require "csv" module Drnbench - class GradualRunner - attr_reader :start_n_clients, :end_n_clients, :step - attr_reader :report_progressively, :result + class GradualRunner + attr_reader :start_n_clients, :end_n_clients, :step + attr_reader :report_progressively, :result - DEFAULT_START_N_CLIENTS = 1 - DEFAULT_END_N_CLIENTS = 1 - DEFAULT_STEP = 1 + DEFAULT_START_N_CLIENTS = 1 + DEFAULT_END_N_CLIENTS = 1 + DEFAULT_STEP = 1 - def initialize(params) - @start_n_clients = params[:start_n_clients] || DEFAULT_START_N_CLIENTS - @end_n_clients = params[:end_n_clients] || DEFAULT_END_N_CLIENTS - @step = params[:step] || DEFAULT_STEP - @report_progressively = params[:report_progressively] || false - @params = params - end + def initialize(params) + @start_n_clients = params[:start_n_clients] || DEFAULT_START_N_CLIENTS + @end_n_clients = params[:end_n_clients] || DEFAULT_END_N_CLIENTS + @step = params[:step] || DEFAULT_STEP + @report_progressively = params[:report_progressively] || false + @params = params + end - def run - run_benchmarks - @result - end + def run + run_benchmarks + @result + end - private - def run_benchmarks - @result = Result.new - @start_n_clients.step(@end_n_clients, @step) do |n_clients| - benchmark = Runner.new(@params.merge(:n_clients => n_clients)) - if @report_progressively - puts "Running benchmark with #{n_clients} clients..." - end - benchmark.run - if @report_progressively - puts benchmark.result.to_s - end - @result << benchmark.result + private + def run_benchmarks + @result = Result.new + @start_n_clients.step(@end_n_clients, @step) do |n_clients| + benchmark = Runner.new(@params.merge(:n_clients => n_clients)) + if @report_progressively + puts "Running benchmark with #{n_clients} clients..." + end + benchmark.run + if @report_progressively + puts benchmark.result.to_s end + @result << benchmark.result end + end - class Result - def initialize - @results = {} - end + class Result + def initialize + @results = {} + end - def <<(result) - @statuses = nil - @results[result.n_clients] = result - end + def <<(result) + @statuses = nil + @results[result.n_clients] = result + end - def statuses - @statuses ||= prepare_statuses - end + def statuses + @statuses ||= prepare_statuses + end - def to_csv - ([csv_header] + csv_body).collect do |row| - CSV.generate_line(row) - end.join("") - end + def to_csv + ([csv_header] + csv_body).collect do |row| + CSV.generate_line(row) + end.join("") + end - private - def prepare_statuses - statuses = [] - @results.each do |n_clients, result| - statuses += result.statuses.keys - end - statuses.uniq! - statuses.sort! - statuses + private + def prepare_statuses + statuses = [] + @results.each do |n_clients, result| + statuses += result.statuses.keys end + statuses.uniq! + statuses.sort! + statuses + end - def csv_header - Runner::Result.keys + statuses - end + def csv_header + Runner::Result.keys + statuses + end - def csv_body - @results.values.collect do |result| - result.values + - statuses.collect do |status| - result.status_percentages[status] || 0 - end + def csv_body + @results.values.collect do |result| + result.values + + statuses.collect do |status| + result.status_percentages[status] || 0 end end end end + end end Modified: lib/drnbench/result.rb (+88 -88) =================================================================== --- lib/drnbench/result.rb 2013-10-16 18:07:57 +0900 (280f916) +++ lib/drnbench/result.rb 2013-10-16 18:08:37 +0900 (14fc41c) @@ -1,112 +1,112 @@ # -*- coding: utf-8 -*- module Drnbench - class Result - attr_reader :n_clients, :duration, :statuses - - class << self - def keys - [ - :n_clients, - :total_n_requests, - :queries_per_second, - :min_elapsed_time, - :max_elapsed_time, - :average_elapsed_time, - ] - end + class Result + attr_reader :n_clients, :duration, :statuses + + class << self + def keys + [ + :n_clients, + :total_n_requests, + :queries_per_second, + :min_elapsed_time, + :max_elapsed_time, + :average_elapsed_time, + ] end + end - def initialize(params) - @n_clients = params[:n_clients] - @duration = params[:duration] + def initialize(params) + @n_clients = params[:n_clients] + @duration = params[:duration] - @results = [] - @total_elapsed_time = 0.0 - @elapsed_times = [] - @statuses = {} - end + @results = [] + @total_elapsed_time = 0.0 + @elapsed_times = [] + @statuses = {} + end - def <<(result) - clear_cached_statistics + def <<(result) + clear_cached_statistics - @results << result + @results << result - @statuses[result[:status]] ||= 0 - @statuses[result[:status]] += 1 + @statuses[result[:status]] ||= 0 + @statuses[result[:status]] += 1 - @elapsed_times << result[:elapsed_time] - @total_elapsed_time += result[:elapsed_time] - end + @elapsed_times << result[:elapsed_time] + @total_elapsed_time += result[:elapsed_time] + end - def total_n_requests - @total_n_requests ||=****@resul***** - end + def total_n_requests + @total_n_requests ||=****@resul***** + end - def queries_per_second - @queries_per_second ||= total_n_requests.to_f / @duration - end + def queries_per_second + @queries_per_second ||= total_n_requests.to_f / @duration + end - def status_percentages - @status_percentages ||= prepare_status_percentages - end + def status_percentages + @status_percentages ||= prepare_status_percentages + end - def min_elapsed_time - @min_elapsed_time ||= @elapsed_times.min - end + def min_elapsed_time + @min_elapsed_time ||= @elapsed_times.min + end - def max_elapsed_time - @max_elapsed_time ||= @elapsed_times.min - end + def max_elapsed_time + @max_elapsed_time ||= @elapsed_times.min + end - def average_elapsed_time - @average_elapsed_time ||= @total_elapsed_time / @elapsed_times.size - end + def average_elapsed_time + @average_elapsed_time ||= @total_elapsed_time / @elapsed_times.size + end - def to_s - "Total requests: #{total_n_requests} " + - "(#{queries_per_second} queries per second)\n" + - "Status:\n" + - status_percentages.collect do |status, percentage| - " #{status}: #{percentage} %" - end.join("\n") + "\n" + - "Elapsed time:\n" + - " min: #{min_elapsed_time} sec\n" + - " max: #{max_elapsed_time} sec\n" + - " average: #{average_elapsed_time} sec" - end + def to_s + "Total requests: #{total_n_requests} " + + "(#{queries_per_second} queries per second)\n" + + "Status:\n" + + status_percentages.collect do |status, percentage| + " #{status}: #{percentage} %" + end.join("\n") + "\n" + + "Elapsed time:\n" + + " min: #{min_elapsed_time} sec\n" + + " max: #{max_elapsed_time} sec\n" + + " average: #{average_elapsed_time} sec" + end - def values - self.class.keys.collect do |column| - send(column) - end + def values + self.class.keys.collect do |column| + send(column) end + end - private - def clear_cached_statistics - @total_n_requests = nil - @queries_per_second = nil - @status_percentages = nil - @min_elapsed_time = nil - @max_elapsed_time = nil - @average_elapsed_time = nil - end + private + def clear_cached_statistics + @total_n_requests = nil + @queries_per_second = nil + @status_percentages = nil + @min_elapsed_time = nil + @max_elapsed_time = nil + @average_elapsed_time = nil + end - def prepare_status_percentages - status_percentages = [] - @statuses.each do |status, n_results| - percentage = n_results.to_f / total_n_requests * 100 - status_percentages << {:percentage => percentage, - :status => status} - end - status_percentages.sort! do |a, b| - (-1) * (a[:percentage] <=> b[:percentage]) - end - status_percentages = {} - status_percentages.each do |status| - status_percentages[status[:status]] = status[:percentage] - end - status_percentages + def prepare_status_percentages + status_percentages = [] + @statuses.each do |status, n_results| + percentage = n_results.to_f / total_n_requests * 100 + status_percentages << {:percentage => percentage, + :status => status} + end + status_percentages.sort! do |a, b| + (-1) * (a[:percentage] <=> b[:percentage]) + end + status_percentages = {} + status_percentages.each do |status| + status_percentages[status[:status]] = status[:percentage] end + status_percentages end + end end Modified: lib/drnbench/runner.rb (+92 -92) =================================================================== --- lib/drnbench/runner.rb 2013-10-16 18:07:57 +0900 (0d358c8) +++ lib/drnbench/runner.rb 2013-10-16 18:08:37 +0900 (8e1442f) @@ -5,114 +5,114 @@ require "drnbench/client/http-droonga-search" require "drnbench/result" module Drnbench - class Runner - attr_reader :duration, :n_clients, :result - - MIN_DURATION = 1 - DEFAULT_DURATION = 10 - MIN_WAIT = 0 - DEFAULT_WAIT = 1 - MAX_N_CLIENTS = 16 - DEFAULT_N_CLIENTS = 1 - TOTAL_N_REQUESTS = 1000 - - DEFAULT_HOST = "localhost" - DEFAULT_PORT = 80 - - def initialize(params) - @duration = [params[:duration] || DEFAULT_DURATION, MIN_DURATION].max - @n_clients = [params[:n_clients] || DEFAULT_N_CLIENTS, MAX_N_CLIENTS].min - @n_requests = params[:n_requests] || TOTAL_N_REQUESTS - - params[:host] ||= DEFAULT_HOST - params[:port] ||= DEFAULT_PORT - params[:wait] ||= DEFAULT_WAIT - params[:wait] = [params[:wait], MIN_WAIT].max - - @params = params - - if params[:request_pattern] - params[:request_pattern][:frequency] = 1 - @request_patterns = [params[:request_pattern]] - else - @request_patterns = params[:request_patterns] - end - populate_requests + class Runner + attr_reader :duration, :n_clients, :result + + MIN_DURATION = 1 + DEFAULT_DURATION = 10 + MIN_WAIT = 0 + DEFAULT_WAIT = 1 + MAX_N_CLIENTS = 16 + DEFAULT_N_CLIENTS = 1 + TOTAL_N_REQUESTS = 1000 + + DEFAULT_HOST = "localhost" + DEFAULT_PORT = 80 + + def initialize(params) + @duration = [params[:duration] || DEFAULT_DURATION, MIN_DURATION].max + @n_clients = [params[:n_clients] || DEFAULT_N_CLIENTS, MAX_N_CLIENTS].min + @n_requests = params[:n_requests] || TOTAL_N_REQUESTS + + params[:host] ||= DEFAULT_HOST + params[:port] ||= DEFAULT_PORT + params[:wait] ||= DEFAULT_WAIT + params[:wait] = [params[:wait], MIN_WAIT].max + + @params = params + + if params[:request_pattern] + params[:request_pattern][:frequency] = 1 + @request_patterns = [params[:request_pattern]] + else + @request_patterns = params[:request_patterns] end + populate_requests + end - def run - process_requests - @result - end + def run + process_requests + @result + end - private - def process_requests - requests_queue = Queue.new - @result = Result.new(:n_clients => @n_clients, - :duration => @duration) - - client_params =****@param*****(:requests => requests_queue, - :result => @result) - @clients = @n_clients.times.collect do |index| - client = nil - case @params[:mode] - when :http - client = HttpClient.new(client_params) - when :http_droonga_search - client = HttpDroongaSearchClient.new(client_params) - end - client.run - client + private + def process_requests + requests_queue = Queue.new + @result = Result.new(:n_clients => @n_clients, + :duration => @duration) + + client_params =****@param*****(:requests => requests_queue, + :result => @result) + @clients = @n_clients.times.collect do |index| + client = nil + case @params[:mode] + when :http + client = HttpClient.new(client_params) + when :http_droonga_search + client = HttpDroongaSearchClient.new(client_params) end + client.run + client + end - start_time = Time.now - while Time.now - start_time < @duration - if requests_queue.empty? - @requests.each do |request| - requests_queue.push(request) - end + start_time = Time.now + while Time.now - start_time < @duration + if requests_queue.empty? + @requests.each do |request| + requests_queue.push(request) end - sleep 1 - end - - @clients.each do |client| - client.stop end + sleep 1 + end - @result + @clients.each do |client| + client.stop end - def populate_requests - @requests = [] + @result + end + + def populate_requests + @requests = [] - if @request_patterns.is_a?(Array) - @request_patterns.each do |request_pattern| - populate_request_pattern(request_pattern) - end - else - @request_patterns.each do |key, request_pattern| - populate_request_pattern(request_pattern) - end + if @request_patterns.is_a?(Array) + @request_patterns.each do |request_pattern| + populate_request_pattern(request_pattern) + end + else + @request_patterns.each do |key, request_pattern| + populate_request_pattern(request_pattern) end - - @requests.shuffle! end - def populate_request_pattern(request_pattern) - frequency = request_pattern[:frequency].to_f - n_requests = @n_requests * frequency + @requests.shuffle! + end - base_patterns = nil - if request_pattern[:pattern] - base_patterns = [request_pattern[:pattern]] - else - base_patterns = request_pattern[:patterns] - end - base_patterns = base_patterns.shuffle + def populate_request_pattern(request_pattern) + frequency = request_pattern[:frequency].to_f + n_requests = @n_requests * frequency - n_requests.round.times do |count| - @requests << base_patterns[count % base_patterns.size] - end + base_patterns = nil + if request_pattern[:pattern] + base_patterns = [request_pattern[:pattern]] + else + base_patterns = request_pattern[:patterns] + end + base_patterns = base_patterns.shuffle + + n_requests.round.times do |count| + @requests << base_patterns[count % base_patterns.size] end end + end end -------------- next part -------------- HTML����������������������������...Download