Kouhei Sutou
kou****@clear*****
Fri Jan 17 10:18:07 JST 2014
> + class GradualRunner > + def initialize(params) > + @params = params > + @runner = Runner.new(:start_n_subscribers => @params[:start_n_subscribers], > + :n_publishings => @params[:n_publishings], > + :timeout => @params[:timeout], > + :subscribe_request => @params[:subscribe_request], > + :feed => @params[:feed], > + :engine_config => @params[:engine_config], > + :protocol_adapter_config => @params[:protocol_adapter_config]) > + end > + このparamってConfigurationオブジェクトを渡すとすっきりしませ ん。bin/drnbench-publishでHashにいろいろ値を設定していますが、 それをConfigurationオブジェクトに設定するように変えるとその まま渡せると思います。 In <e9546d5ec0d943ef27bbd83955736ed3a8eb83e2 �� jenkins.clear-code.com> "[Groonga-commit] droonga/drnbench �� e9546d5 [master] Add partial implementation of runners for drnbench-publish" on Fri, 17 Jan 2014 09:56:27 +0900, YUKI Hiroshi <null+groonga �� clear-code.com> wrote: > YUKI Hiroshi 2014-01-17 09:56:27 +0900 (Fri, 17 Jan 2014) > > New Revision: e9546d5ec0d943ef27bbd83955736ed3a8eb83e2 > https://github.com/droonga/drnbench/commit/e9546d5ec0d943ef27bbd83955736ed3a8eb83e2 > > Message: > Add partial implementation of runners for drnbench-publish > > Added files: > lib/drnbench/publish/gradual-runner.rb > lib/drnbench/publish/runner.rb > lib/drnbench/publish/watch.rb > > Added: lib/drnbench/publish/gradual-runner.rb (+54 -0) 100644 > =================================================================== > --- /dev/null > +++ lib/drnbench/publish/gradual-runner.rb 2014-01-17 09:56:27 +0900 (9b8bd28) > @@ -0,0 +1,54 @@ > +# -*- coding: utf-8 -*- > + > +require "benchmark" > +require "csv" > + > +module Drnbench > + module Publish > + class GradualRunner > + def initialize(params) > + @params = params > + @runner = Runner.new(:start_n_subscribers => @params[:start_n_subscribers], > + :n_publishings => @params[:n_publishings], > + :timeout => @params[:timeout], > + :subscribe_request => @params[:subscribe_request], > + :feed => @params[:feed], > + :engine_config => @params[:engine_config], > + :protocol_adapter_config => @params[:protocol_adapter_config]) > + end > + > + def run > + results = [] > + @params[:n_steps].times do |try_count| > + @runner.add_subscribers(@runner.n_subscribers) if try_count > 0 > + label = "#{@runner.n_subscribers} subscribers" > + percentage = nil > + result = Benchmark.bm do |benchmark| > + benchmark.report(label) do > + published_messages =****@runne***** > + percentage = published_messages.size.to_f / @params[:n_publishings] * 100 > + end > + end > + puts "=> #{percentage} % feeds are notified" > + result = result.join("").strip.gsub(/[()]/, "").split(/\s+/) > + qps = @params[:n_publishings].to_f / result.last.to_f > + puts " (#{qps} queries per second)" > + results << [label, qps] > + end > + total_results = [ > + ["case", "qps"], > + ] > + total_results += results > + > + puts "" > + puts "Results (saved to #{@params[:output_path]}):" > + File.open(@params[:output_path], "w") do |file| > + total_results.each do |row| > + file.puts(CSV.generate_line(row)) > + puts row.join(",") > + end > + end > + end > + end > + end > +end > > Added: lib/drnbench/publish/runner.rb (+88 -0) 100644 > =================================================================== > --- /dev/null > +++ lib/drnbench/publish/runner.rb 2014-01-17 09:56:27 +0900 (a6a6d42) > @@ -0,0 +1,88 @@ > +# -*- coding: utf-8 -*- > + > +require "json" > +require "yajl" > +require "pathname" > +require "droonga/client" > +require "drnbench/server/engine" > +require "drnbench/server/protocol-adapter" > + > +module Drnbench > + module Publish > + class Runner > + attr_reader :n_subscribers > + > + def initialize(params) > + @params = params || {} > + > + @n_publishings = params[:n_publishings] || 0 > + @timeout = params[:timeout] || 0 > + > + subscribe_request_file = @params[:subscribe_request] > + subscribe_request_file = Pathname(subscribe_request_file).expand_path(Dir.pwd) > + @subscribe_request = JSON.parse(subscribe_request_file.read, :symbolize_names => true) > + > + feed_file = @params[:feed] > + feed_file = Pathname(feed_file).expand_path(Dir.pwd) > + @feed = JSON.parse(feed_file.read, :symbolize_names => true) > + > + @n_subscribers = 0 > + > + @feeder = Droonga::Client.new(tag: "droonga", port: 23003) > + > + @server_config = @params[:server_config] > + setup_server > + setup_initial_subscribers > + end > + > + def setup_server > + @engine = Engine.new(@config.engine_config) > + @engine.start > + > + @protocol_adapter = ProtocolAdapter.new(@config.protocol_adapter_config) > + @protocol_adapter.start > + end > + > + def teardown_server > + @protocol_adapter.stop > + @engine.stop > + end > + > + def setup_initial_subscribers > + add_subscribers(@params[:start_n_subscribers]) > + end > + > + def run > + @n_publishings.times do |index| > + do_feed > + end > + > + published_messages = [] > + while published_messages.size != @n_publishings > + published_messages << @receiver.new_message > + end > + > + teardown_server > + published_messages > + end > + > + def add_subscribers(n_subscribers) > + n_subscribers.times do |index| > + @request[:path] > + @request[:method] > + @request[:body] > + @client.connection.send(message, :response => :one) > + end > + @n_subscribers += n_subscribers > + end > + > + def do_feed > + message = Marshal.load(Marshal.dump(@feed)) > + message[:id] = Time.now.to_f.to_s, > + message[:date] = Time.now > + message[:statusCode] = 200 > + @feeder.connection.send(message, :response => :none) > + end > + end > + end > +end > > Added: lib/drnbench/publish/watch.rb (+28 -0) 100644 > =================================================================== > --- /dev/null > +++ lib/drnbench/publish/watch.rb 2014-01-17 09:56:27 +0900 (bba39cd) > @@ -0,0 +1,28 @@ > +require "droonga/watch_schema" > + > +module Drnbench > + module Publish > + class Watch > + class << self > + def command > + "watch" > + end > + > + def subscribe(keyword) > + { > + "condition" => keyword, > + "subscriber" => "subscriber for #{keyword}", > + } > + end > + > + def feed(keyword) > + { > + "targets" => { > + "keyword" => keyword, > + }, > + } > + end > + end > + end > + end > +end