class Drnbench::HttpClient

Constants

SUPPORTED_HTTP_METHODS

Attributes

results[R]
runner[R]
wait[R]

Public Class Methods

new(params) click to toggle source
# File lib/drnbench/client/http.rb, line 29
def initialize(params)
  @runner   = params[:runner]
  @config   = params[:config]
  @count    = 0
  @id       = @@count
  @@count += 1
  @thread = nil
end

Public Instance Methods

run() click to toggle source
# File lib/drnbench/client/http.rb, line 38
def run
  @thread = Thread.new do
    clients = {}
    start_time = Time.now
    loop do
      if @runner.empty?
        puts "WORNING: requests queue becomes empty! (#{Time.now - start_time} sec)"
        stop
        break
      end

      request = @runner.pop_request
      request = fixup_request(request)

      client_params = {
        :protocol => :http,
        :host     => request["host"],
        :port     => request["port"],
        :timeout  => request["timeout"],
      }
      client = clients[client_params.to_s] ||= Droonga::Client.new(client_params)

      request["headers"] ||= {}
      request["headers"]["user-agent"] = "Ruby/#{RUBY_VERSION} Droonga::Benchmark::Runner::HttpClient"
      start_time = Time.now
      begin
      response = client.request(request)
        @runner.push_result(
          :request => request,
          :status => response.code,
          :elapsed_time => Time.now - start_time,
          :client => @id,
          :index => @count,
        )
      rescue Timeout::Error
        @runner.push_result(
          :request => request,
          :status => "0",
          :elapsed_time => Time.now - start_time,
          :client => @id,
          :index => @count,
        )
      end
      @count += 1
      sleep @config.wait
    end
  end
  self
end
running?() click to toggle source
# File lib/drnbench/client/http.rb, line 95
def running?
  not @thread.nil?
end
stop() click to toggle source
# File lib/drnbench/client/http.rb, line 88
def stop
  return unless @thread

  @thread.exit
  @thread = nil
end

Private Instance Methods

fixup_request(request) click to toggle source
# File lib/drnbench/client/http.rb, line 100
def fixup_request(request)
  request["host"] ||= @config.default_host
  request["port"] ||= @config.default_port
  request["path"] ||= @config.default_path
  request["method"] ||= @config.default_method
  request["method"] = request["method"].upcase
  unless SUPPORTED_HTTP_METHODS.include?(request["method"])
    request["method"] = "GET"
  end
  request["timeout"] ||= @config.default_timeout
  request
end