[Groonga-commit] droonga/drnbench at a652243 [master] Detect format of patterns file automatically

アーカイブの一覧に戻る

SHIMODA Piro Hiroshi null+****@clear*****
Sat Oct 4 18:44:38 JST 2014


SHIMODA "Piro" Hiroshi	2014-10-04 18:44:38 +0900 (Sat, 04 Oct 2014)

  New Revision: a652243e1dd9e0601c4a3962008cad45e62fe8f0
  https://github.com/droonga/drnbench/commit/a652243e1dd9e0601c4a3962008cad45e62fe8f0

  Message:
    Detect format of patterns file automatically

  Modified files:
    lib/drnbench/request-response/runner.rb

  Modified: lib/drnbench/request-response/runner.rb (+149 -31)
===================================================================
--- lib/drnbench/request-response/runner.rb    2014-10-04 18:44:02 +0900 (54aab1e)
+++ lib/drnbench/request-response/runner.rb    2014-10-04 18:44:38 +0900 (cf31394)
@@ -26,7 +26,9 @@ module Drnbench
         n_clients = 1 if n_clients.zero?
         @n_clients = n_clients
         @config = config
-        populate_requests
+
+        abstract = Abstract.new(@config.request_patterns, @config)
+        @requests = abstract.requests.shuffle
       end
 
       def run
@@ -80,50 +82,166 @@ module Drnbench
         @result
       end
 
-      def populate_requests
-        @requests = []
+      class Abstract
+        def initialize(source, config)
+          @source = source
+          @config = config
+        end
+
+        def groups
+          @groups ||= prepare_groups
+        end
+
+        def default_group_frequency
+          1.0 / groups.size
+        end
+
+        def requests
+          @requests ||= populate_requests
+        end
 
-        if****@confi*****_patterns.is_a?(Array)
-          @config.request_patterns.each do |request_pattern|
-            populate_request_pattern(request_pattern)
+        private
+        def prepare_groups
+          if****@sourc*****_a?(Hash)
+            retur****@sourc***** do |group|
+              PatternsGroup.new(group, self)
+            end
           end
-        else
-          @config.request_patterns.each do |key, request_pattern|
-            populate_request_pattern(request_pattern)
+
+          if****@sourc*****_a?(Array)
+            if PatternsGroup.is_valid_source?(@source.first)
+              retur****@sourc***** do |group|
+                PatternsGroup.new(group, self)
+              end
+            end
+            if PatternsGroup.is_valid_source?(@source)
+              return [
+                PatternsGroup.new(@source, self),
+              ]
+            end
           end
+
+          []
         end
 
-        @requests.shuffle!
+        def populate_requests
+          requests = []
+          groups.each do |group|
+            n_requests =****@confi*****_requests * @config.end_n_clients * group.frequency
+            base_patterns = group.patterns.shuffle
+            n_requests.round.times do |count|
+              pattern = base_patterns[count % base_patterns.size]
+              requests << pattern.to_request
+            end
+          end
+        end
       end
 
-      def populate_request_pattern(request_pattern)
-        frequency = request_pattern["frequency"] || default_frequency
-        n_requests =****@confi*****_requests * @config.end_n_clients * frequency.to_f
+      class PatternsGroup
+        class << self
+          def is_valid_source?(source)
+            if source.is_a?(Array)
+              return Pattern.is_valid_source?(source.first)
+            end
+            if source.is_a?(Hash)
+              return source.has_key?("patterns")
+            end
+            raise "invalid group: #{JSON.stringify(source)}"
+          end
+        end
+
+        attr_reader :abstract
 
-        base_patterns = nil
-        if request_pattern["pattern"]
-          base_patterns = [request_pattern["pattern"]]
-        else
-          base_patterns = request_pattern["patterns"]
+        def initialize(source, abstract)
+          @source = source
+          @abstract = abstract
         end
-        base_patterns = base_patterns.shuffle
 
-        n_requests.round.times do |count|
-          pattern = base_patterns[count % base_patterns.size]
-          if pattern.is_a?(String)
-            pattern = { "path" => pattern }
+        def frequency
+          if****@sourc*****_a?(Hash) and****@sourc*****_key?("frequency")
+            return @source["frequency"].to_f
+          end
+          @abstract.default_group_frequency
+        end
+
+        def host
+          return nil unles****@sourc*****_a?(Hash)
+          @source["host"]
+        end
+
+        def port
+          return nil unles****@sourc*****_a?(Hash)
+          @source["port"]
+        end
+
+        def method
+          return nil unles****@sourc*****_a?(Hash)
+          @source["method"]
+        end
+
+        def timeout
+          return nil unles****@sourc*****_a?(Hash)
+          @source["timeout"]
+        end
+
+        def patterns
+          @patterns ||= prepare_patterns
+        end
+
+        private
+        def prepare_patterns
+          if****@sourc*****_a?(Hash)
+            if****@sourc*****_key?("pattern")
+              return [
+                Pattern.new(@source["pattern"], self),
+              ]
+            else
+              return @source["patterns"].collect do |pattern|
+                Pattern.new(pattern, self)
+              end
+            end
+          elsif****@sourc*****_a?(Array)
+            retur****@sourc***** do |pattern|
+              Pattern.new(pattern, self)
+            end
           end
-          pattern["host"] ||= request_pattern["host"]
-          pattern["port"] ||= request_pattern["port"]
-          pattern["method"] ||= request_pattern["method"]
-          pattern["timeout"] ||= request_pattern["timeout"]
-          @requests << pattern
         end
       end
 
-      def default_frequency
-        size =****@confi*****_patterns.size
-        1.0 / size
+      class Pattern
+        class << self
+          def is_valid_source?(source)
+            return true if source.is_a?(String)
+            return false if source.is_a?(Array)
+            return !source.has_key?("patterns") if source.is_a?(Hash)
+            raise "invalid pattern: #{JSON.stringify(source)}"
+          end
+        end
+
+        attr_reader :group
+
+        def initialize(source, group)
+          @source = source
+          @group = group
+        end
+
+        def to_request
+          @populated ||= populate
+        end
+
+        private
+        def populate
+          if****@sourc*****_a?(String)
+            request = { "path" => @source }
+          else
+            request = @source
+          end
+          request["host"] ||=****@group*****
+          request["port"] ||=****@group*****
+          request["method"] ||=****@group*****
+          request["timeout"] ||=****@group*****
+          request
+        end
       end
     end
   end
-------------- next part --------------
HTML����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る