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����������������������������... ダウンロード