[Groonga-commit] droonga/drnbench at e9546d5 [master] Add partial implementation of runners for drnbench-publish

Back to archive index

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




More information about the Groonga-commit mailing list
Back to archive index