SHIMODA Piro Hiroshi
null+****@clear*****
Sat Oct 4 18:53:54 JST 2014
SHIMODA "Piro" Hiroshi 2014-10-04 18:53:54 +0900 (Sat, 04 Oct 2014) New Revision: 49e5c64edf53a6e413b760630befdd5f643e8861 https://github.com/droonga/drnbench/commit/49e5c64edf53a6e413b760630befdd5f643e8861 Message: Extract classes for request patterns Copied files: lib/drnbench/request-response/request-pattern.rb (from lib/drnbench/request-response/runner.rb) Modified files: lib/drnbench/request-response/runner.rb Copied: lib/drnbench/request-response/request-pattern.rb (+6 -72) 69% =================================================================== --- lib/drnbench/request-response/runner.rb 2014-10-04 18:44:38 +0900 (cf31394) +++ lib/drnbench/request-response/request-pattern.rb 2014-10-04 18:53:54 +0900 (4a23cbd) @@ -13,75 +13,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -require "drnbench/client/http" -require "drnbench/client/http-droonga" -require "drnbench/request-response/result" - module Drnbench module RequestResponse - class Runner - attr_reader :n_clients, :result - - def initialize(n_clients, config) - n_clients = 1 if n_clients.zero? - @n_clients = n_clients - @config = config - - abstract = Abstract.new(@config.request_patterns, @config) - @requests = abstract.requests.shuffle - end - - def run - process_requests - @result - end - - private - def process_requests - requests_queue = Queue.new - @requests.each do |request| - requests_queue.push(request) - end - - @result = Result.new(:n_clients => @n_clients, - :duration => @config.duration, - :n_slow_requests => @config.n_slow_requests) - - client_params = { - :requests => requests_queue, - :result => @result, - } - @clients = @n_clients.times.collect do |index| - client = nil - case****@confi***** - when :http - client = HttpClient.new(client_params, @config) - when :http_droonga - client = HttpDroongaClient.new(client_params, @config) - else - raise ArgumentError.new("Unknown mode: #{@config.mode}") - end - client.run - client - end - - start_time = Time.now - while Time.now - start_time < @config.duration - sleep 1 - if requests_queue.empty? - puts "WORNING: requests queue becomes empty! (#{Time.now - start_time} sec)" - @result.duration = Time.now - start_time - break - end - end - - @clients.each do |client| - client.stop - end - - @result - end - + module RequestPattern class Abstract def initialize(source, config) @source = source @@ -109,12 +43,12 @@ module Drnbench end if****@sourc*****_a?(Array) - if PatternsGroup.is_valid_source?(@source.first) + if PatternsGroup.valid_source?(@source.first) retur****@sourc***** do |group| PatternsGroup.new(group, self) end end - if PatternsGroup.is_valid_source?(@source) + if PatternsGroup.valid_source?(@source) return [ PatternsGroup.new(@source, self), ] @@ -139,9 +73,9 @@ module Drnbench class PatternsGroup class << self - def is_valid_source?(source) + def valid_source?(source) if source.is_a?(Array) - return Pattern.is_valid_source?(source.first) + return Pattern.valid_source?(source.first) end if source.is_a?(Hash) return source.has_key?("patterns") @@ -210,7 +144,7 @@ module Drnbench class Pattern class << self - def is_valid_source?(source) + def 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) Modified: lib/drnbench/request-response/runner.rb (+2 -163) =================================================================== --- lib/drnbench/request-response/runner.rb 2014-10-04 18:44:38 +0900 (cf31394) +++ lib/drnbench/request-response/runner.rb 2014-10-04 18:53:54 +0900 (e13aa7f) @@ -16,6 +16,7 @@ require "drnbench/client/http" require "drnbench/client/http-droonga" require "drnbench/request-response/result" +require "drnbench/request-response/request-pattern" module Drnbench module RequestResponse @@ -27,7 +28,7 @@ module Drnbench @n_clients = n_clients @config = config - abstract = Abstract.new(@config.request_patterns, @config) + abstract = RequestPattern::Abstract.new(@config.request_patterns, @config) @requests = abstract.requests.shuffle end @@ -81,168 +82,6 @@ module Drnbench @result end - - 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 - - private - def prepare_groups - if****@sourc*****_a?(Hash) - retur****@sourc***** do |group| - PatternsGroup.new(group, self) - end - end - - 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 - - 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 - - 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 - - def initialize(source, abstract) - @source = source - @abstract = abstract - end - - 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 - end - end - - 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 end -------------- next part -------------- HTML����������������������������...Download