Class: WebTsunami::Scenario

Inherits:
Object
  • Object
show all
Defined in:
lib/web_tsunami/scenario.rb

Overview

Scenario is the class that handle all the parallel requests.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#concurrencyObject (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(options)
  options[:duration].times { fork { new(options[: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, options = {}, &block)
  request(:delete, url, options, &block)
end

#get(url, options = {}, &block) ⇒ Object



21
22
23
# File 'lib/web_tsunami/scenario.rb', line 21

def get(url, options = {}, &block)
  request(:get, url, options, &block)
end

#patch(url, options = {}, &block) ⇒ Object



33
34
35
# File 'lib/web_tsunami/scenario.rb', line 33

def patch(url, options = {}, &block)
  request(:patch, url, options, &block)
end

#post(url, options = {}, &block) ⇒ Object



25
26
27
# File 'lib/web_tsunami/scenario.rb', line 25

def post(url, options = {}, &block)
  request(:post, url, options, &block)
end

#put(url, options = {}, &block) ⇒ Object



29
30
31
# File 'lib/web_tsunami/scenario.rb', line 29

def put(url, options = {}, &block)
  request(:put, url, options, &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, options, &block)
  req = Typhoeus::Request.new(url, {method: method}.merge(options))
  requests.queue(req)
  req.on_complete do |response|
    if response.timed_out?
      puts "Timeout #{url}"
    elsif response.code == 0
      puts "#{response.return_message} #{response.request.options[:method]} #{url}"
    elsif !response.success? && ![302, 303].include?(response.code)
      puts "#{response.code} #{response.request.options[:method]} #{url}"
    end
    block.call(response) if block
  end
end

#requestsObject



17
18
19
# File 'lib/web_tsunami/scenario.rb', line 17

def requests
  @requests ||= Typhoeus::Hydra.new
end

#runObject

Raises:

  • (NotImplementedError)


61
62
63
# File 'lib/web_tsunami/scenario.rb', line 61

def run
  raise NotImplementedError
end

#startObject



56
57
58
59
# File 'lib/web_tsunami/scenario.rb', line 56

def start
  concurrency.times { run }
  requests.run
end