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

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Jan 17 09:56:27 JST 2014


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
-------------- next part --------------
HTML����������������������������...
Download 



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