hulk_smash 0.1.0
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/lib/hulk_smash/result.rb +44 -0
- data/lib/hulk_smash/smasher.rb +42 -0
- data/lib/hulk_smash/validator.rb +26 -0
- data/lib/hulk_smash/version.rb +19 -0
- data/lib/hulk_smash.rb +2 -0
- data/log/.gitkeep +0 -0
- metadata +116 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative 'validator'
|
2
|
+
|
3
|
+
module HulkSmash
|
4
|
+
class Result
|
5
|
+
attr_reader :avg_response_time, :requests_per_second, :validator
|
6
|
+
|
7
|
+
def initialize(siege_result)
|
8
|
+
@siege_result = siege_result
|
9
|
+
@validator = Validator.new siege_result
|
10
|
+
parse_result
|
11
|
+
end
|
12
|
+
|
13
|
+
def valid?
|
14
|
+
validator.valid?
|
15
|
+
end
|
16
|
+
|
17
|
+
def reasons_for_failure
|
18
|
+
validator.reasons_for_failure
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def siege_result
|
24
|
+
@siege_result
|
25
|
+
end
|
26
|
+
|
27
|
+
def parse_result
|
28
|
+
if valid?
|
29
|
+
parse_avg_response_time
|
30
|
+
parse_requests_per_second
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse_avg_response_time
|
35
|
+
regex = /Response time:\s*([\d\.]*) secs/
|
36
|
+
@avg_response_time = regex.match(siege_result)[1].to_f*1000
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse_requests_per_second
|
40
|
+
regex = /Transaction rate:\s*([\d\.]*) trans\/sec/
|
41
|
+
@requests_per_second = regex.match(siege_result)[1].to_f
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative 'result'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
module HulkSmash
|
5
|
+
class Smasher
|
6
|
+
attr_reader :url, :duration, :concurrent_users
|
7
|
+
|
8
|
+
def initialize(url='http://localhost', options={})
|
9
|
+
@duration = options[:duration] || self.class.default_duration
|
10
|
+
@concurrent_users = options[:concurrent_users] || self.class.default_concurrent_users
|
11
|
+
@url = url
|
12
|
+
end
|
13
|
+
|
14
|
+
def run_load_test
|
15
|
+
execute_siege_command "siege -b -t#{duration} -c#{concurrent_users} #{url}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_scalability_test
|
19
|
+
execute_siege_command "siege -t#{duration} -c#{concurrent_users} #{url}"
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def execute_siege_command(command)
|
25
|
+
`#{command} > #{results_file} 2>&1`
|
26
|
+
results = File.read(results_file)
|
27
|
+
HulkSmash::Result.new(results)
|
28
|
+
end
|
29
|
+
|
30
|
+
def results_file
|
31
|
+
@results_file ||= File.expand_path('../../../log/results.log', __FILE__)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.default_duration
|
35
|
+
'5s'
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.default_concurrent_users
|
39
|
+
15
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module HulkSmash
|
2
|
+
class Validator
|
3
|
+
attr_reader :reasons_for_failure, :siege_result
|
4
|
+
|
5
|
+
def initialize(siege_result)
|
6
|
+
@siege_result = siege_result
|
7
|
+
@reasons_for_failure = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid?
|
11
|
+
validate_version_is_supported
|
12
|
+
reasons_for_failure.empty?
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def version
|
18
|
+
regex = /\*\* SIEGE \s*([\d\.]*)$/
|
19
|
+
@version ||= regex.match(siege_result)[1].to_f
|
20
|
+
end
|
21
|
+
|
22
|
+
def validate_version_is_supported
|
23
|
+
@reasons_for_failure << "Siege version must be 2.x" if version < 2 || version >= 3
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/hulk_smash.rb
ADDED
data/log/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hulk_smash
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matt Simpson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.2
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.8.0
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.8.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: yard
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.7.5
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.7.5
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.6.0
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.6.0
|
78
|
+
description:
|
79
|
+
email: matt.simpson@asolutions.com
|
80
|
+
executables: []
|
81
|
+
extensions: []
|
82
|
+
extra_rdoc_files: []
|
83
|
+
files:
|
84
|
+
- lib/hulk_smash/version.rb
|
85
|
+
- lib/hulk_smash.rb
|
86
|
+
- lib/hulk_smash/smasher.rb
|
87
|
+
- lib/hulk_smash/result.rb
|
88
|
+
- lib/hulk_smash/validator.rb
|
89
|
+
- log/.gitkeep
|
90
|
+
homepage: http://asynchrony.com
|
91
|
+
licenses: []
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.8.24
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Hulking is the act of testing the scalability of your app
|
115
|
+
test_files: []
|
116
|
+
has_rdoc:
|