Class: WebTsunami::Scenario
- Inherits:
-
Object
- Object
- WebTsunami::Scenario
- Defined in:
- lib/web_tsunami/scenario.rb
Overview
Scenario is the class that handle all the parallel requests.
Instance Attribute Summary collapse
-
#concurrency ⇒ Object
readonly
Returns the value of attribute concurrency.
Class Method Summary collapse
Instance Method Summary collapse
- #delete(url, options = {}, &block) ⇒ Object
- #get(url, options = {}, &block) ⇒ Object
-
#initialize(concurrency) ⇒ Scenario
constructor
A new instance of Scenario.
- #patch(url, options = {}, &block) ⇒ Object
- #post(url, options = {}, &block) ⇒ Object
- #put(url, options = {}, &block) ⇒ Object
- #request(method, url, options, &block) ⇒ Object
- #requests ⇒ Object
- #run ⇒ Object
- #start ⇒ Object
Constructor Details
#initialize(concurrency) ⇒ Scenario
Returns a new instance of Scenario.
13 14 15 |
# File 'lib/web_tsunami/scenario.rb', line 13 def initialize(concurrency) @concurrency = concurrency end |
Instance Attribute Details
#concurrency ⇒ Object (readonly)
Returns the value of attribute concurrency.
6 7 8 |
# File 'lib/web_tsunami/scenario.rb', line 6 def concurrency @concurrency end |
Class Method Details
.start(options) ⇒ Object
8 9 10 11 |
# File 'lib/web_tsunami/scenario.rb', line 8 def self.start() [:duration].times { fork { new([:concurrency]).start } and sleep(1) } Process.wait end |
Instance Method Details
#delete(url, options = {}, &block) ⇒ Object
37 38 39 |
# File 'lib/web_tsunami/scenario.rb', line 37 def delete(url, = {}, &block) request(:delete, url, , &block) end |
#get(url, options = {}, &block) ⇒ Object
21 22 23 |
# File 'lib/web_tsunami/scenario.rb', line 21 def get(url, = {}, &block) request(:get, url, , &block) end |
#patch(url, options = {}, &block) ⇒ Object
33 34 35 |
# File 'lib/web_tsunami/scenario.rb', line 33 def patch(url, = {}, &block) request(:patch, url, , &block) end |
#post(url, options = {}, &block) ⇒ Object
25 26 27 |
# File 'lib/web_tsunami/scenario.rb', line 25 def post(url, = {}, &block) request(:post, url, , &block) end |
#put(url, options = {}, &block) ⇒ Object
29 30 31 |
# File 'lib/web_tsunami/scenario.rb', line 29 def put(url, = {}, &block) request(:put, url, , &block) end |
#request(method, url, options, &block) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/web_tsunami/scenario.rb', line 41 def request(method, url, , &block) req = Typhoeus::Request.new(url, {method: method}.merge()) requests.queue(req) req.on_complete do |response| if response.timed_out? puts "Timeout #{url}" elsif response.code == 0 puts "#{response.} #{response.request.[:method]} #{url}" elsif !response.success? && ![302, 303].include?(response.code) puts "#{response.code} #{response.request.[:method]} #{url}" end block.call(response) if block end end |
#requests ⇒ Object
17 18 19 |
# File 'lib/web_tsunami/scenario.rb', line 17 def requests @requests ||= Typhoeus::Hydra.new end |
#run ⇒ Object
61 62 63 |
# File 'lib/web_tsunami/scenario.rb', line 61 def run raise NotImplementedError end |
#start ⇒ Object
56 57 58 59 |
# File 'lib/web_tsunami/scenario.rb', line 56 def start concurrency.times { run } requests.run end |