web_tsunami 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +4 -0
- data/Gemfile.lock +12 -0
- data/README +9 -0
- data/example.rb +28 -0
- data/web_tsunami.rb +53 -0
- metadata +50 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
Benchmark your web application.
|
2
|
+
|
3
|
+
Why not using Apache Benchmark or any similar tool?
|
4
|
+
|
5
|
+
Because some times we need to send unique requests and AB doesn't fit for that need.
|
6
|
+
|
7
|
+
Check example.rb to see how it's working.
|
8
|
+
|
9
|
+
More documentation and gem is coming soon.
|
data/example.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'web_tsunami'
|
4
|
+
|
5
|
+
# Triggers the following requests concurently:
|
6
|
+
# http://www.google.com
|
7
|
+
# http://www.google.com/search?q=ruby
|
8
|
+
# http://www.google.com/search?q=ruby&start=10
|
9
|
+
|
10
|
+
class GoogleTsunami < WebTsunami::Scenario
|
11
|
+
def run
|
12
|
+
get('http://www.google.com') do
|
13
|
+
puts 'http://www.google.com'
|
14
|
+
get('http://www.google.com/search?q=ruby') do
|
15
|
+
puts 'http://www.google.com/search?q=ruby'
|
16
|
+
get("http://www.google.com/search?q=ruby&start=#{rand(100)*10}") do
|
17
|
+
puts 'http://www.google.com/search?q=ruby&start=10'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Set concurrency and duration in seconds and start your script.
|
25
|
+
# These numbers are voluntary low because I don't want any trouble with Google.
|
26
|
+
# But don't hesitate to set a higher concurrency and a duration of almost 5 minutes
|
27
|
+
# in order to get a reliable benchmark.
|
28
|
+
GoogleTsunami.start(concurrency: 2, duration: 10)
|
data/web_tsunami.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
|
3
|
+
require 'typhoeus'
|
4
|
+
|
5
|
+
module WebTsunami
|
6
|
+
class Scenario
|
7
|
+
|
8
|
+
attr_reader :concurrency
|
9
|
+
|
10
|
+
def self.start(options)
|
11
|
+
options[:duration].times { fork { new(options[:concurrency]).start } and sleep(1) }
|
12
|
+
Process.wait
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(concurrency)
|
16
|
+
@sleeps = {}
|
17
|
+
@concurrency = concurrency
|
18
|
+
end
|
19
|
+
|
20
|
+
def requests
|
21
|
+
(@requests = Typhoeus::Hydra.new).disable_memoization unless @requests
|
22
|
+
@requests
|
23
|
+
end
|
24
|
+
|
25
|
+
def get(url, &block)
|
26
|
+
requests.queue(req = Typhoeus::Request.new(url, request_options))
|
27
|
+
req.on_complete do |response|
|
28
|
+
if response.timed_out?
|
29
|
+
puts "Timeout #{url}"
|
30
|
+
elsif response.code == 0
|
31
|
+
puts "#{response.curl_error_message} #{url}"
|
32
|
+
elsif !response.success? && response.code != 302
|
33
|
+
puts "#{response.code} #{url}"
|
34
|
+
end
|
35
|
+
block.call(response) if block
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def start
|
40
|
+
concurrency.times { |i| run }
|
41
|
+
requests.run
|
42
|
+
end
|
43
|
+
|
44
|
+
def run
|
45
|
+
raise NotImplementedError
|
46
|
+
end
|
47
|
+
|
48
|
+
def request_options
|
49
|
+
{}
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: web_tsunami
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Alexis Bernard
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-13 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Benchmark your web application
|
15
|
+
email:
|
16
|
+
- alexis@official.fm
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- Gemfile
|
22
|
+
- Gemfile.lock
|
23
|
+
- README
|
24
|
+
- example.rb
|
25
|
+
- web_tsunami.rb
|
26
|
+
homepage: https://github.com/officialfm/web_tsunami
|
27
|
+
licenses: []
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 1.8.10
|
47
|
+
signing_key:
|
48
|
+
specification_version: 3
|
49
|
+
summary: Benchmark your web application
|
50
|
+
test_files: []
|