hippoload 0.0.1 → 0.0.2
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/README.md +25 -2
- data/lib/hippoload/hippo.rb +34 -11
- data/lib/hippoload/hippo_parser.rb +2 -0
- data/lib/hippoload/version.rb +1 -1
- data/spec/hippo_spec.rb +9 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -2,8 +2,10 @@
|
|
2
2
|
|
3
3
|
Basic Ruby wrapper/parser for Httperf
|
4
4
|
|
5
|
-
Currently it supports 'get' method of httperf.
|
6
5
|
|
6
|
+
> Httperf is a tool for measuring web server performance. It provides a flexible facility for generating various HTTP workloads and for measuring server performance.
|
7
|
+
|
8
|
+
Currently it supports 'get' method of httperf.
|
7
9
|
|
8
10
|
## Installation
|
9
11
|
|
@@ -26,6 +28,19 @@ require "hippoload"
|
|
26
28
|
|
27
29
|
# for single connections and rate
|
28
30
|
|
31
|
+
# Conf arguments: (Note: Currently it supports only these arguments. New arguments are coming soon...)
|
32
|
+
|
33
|
+
# conf = {
|
34
|
+
# :connections => '300',
|
35
|
+
# :rate => '30',
|
36
|
+
# :server => 'mysite.com' # by default it's 'localhost',
|
37
|
+
# :port => '8080' # by default it's '3000',
|
38
|
+
# :connections_and_rates => [{:connections => 1000, :rate => 10}, {:connections => 2000, :rate => 200}]
|
39
|
+
# :uri => '/posts'
|
40
|
+
# }
|
41
|
+
|
42
|
+
# Note: Please assign either (:connections and :rate) or (:connections_and_rates) at a time
|
43
|
+
|
29
44
|
conf = {:connections => 100, :rate => 10, :uri => "/api/v1/entities?app_token=ef6baaed0d294f8f54eef80aeb8a4ee1" }
|
30
45
|
|
31
46
|
hippo = Hippoload::Hippo.new(conf)
|
@@ -40,13 +55,14 @@ hippo_parser.parse(raw_output)
|
|
40
55
|
|
41
56
|
# for connections and rates list
|
42
57
|
|
43
|
-
conf = {:connections_and_rates => [{:connections => 100, :rate => 10}, {:connections => 200, :rate => 20}], :uri => "/api/v1/entities?app_token=
|
58
|
+
conf = {:connections_and_rates => [{:connections => 100, :rate => 10}, {:connections => 200, :rate => 20}], :uri => "/api/v1/entities?app_token=ef6baaed0d294f8f54eef80aeb8a4ee1"}
|
44
59
|
|
45
60
|
hippo = Hippoload::Hippo.new(conf)
|
46
61
|
|
47
62
|
hippo.becomes_crazy
|
48
63
|
|
49
64
|
# connections list wise => {"100-10-/api/v1/entities?app_token=ef6baaed0d294f8f54eef80aeb8a4ee1"=>"httperf --client=0/1 --server=localhost --port=3000 --uri=/api/v1/entities?app_token=ef6baaed0d294f8f54eef80aeb8a4ee1 --rate=10 --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=1\nMaximum connect burst length: 1\n\nTotal: connections 100 requests 100 replies 100 test-duration 9.951 s\n\nConnection rate: 10.0 conn/s (99.5 ms/conn, <=5 concurrent connections)\nConnection time [ms]: min 34.3 avg 69.5 max 400.1 median 50.5 stddev 57.6\nConnection time [ms]: connect 0.1\nConnection length [replies/conn]: 1.000\n\nRequest rate: 10.0 req/s (99.5 ms/req)\nRequest size [B]: 120.0\n\nReply rate [replies/s]: min 10.0 avg 10.0 max 10.0 stddev 0.0 (1 samples)\nReply time [ms]: response 68.9 transfer 0.5\nReply size [B]: header 642.0 content 4901.0 footer 0.0 (total 5543.0)\nReply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0\n\nCPU time [s]: user 2.14 system 7.81 (user 21.5% system 78.5% total 99.9%)\nNet I/O: 55.6 KB/s (0.5*10^6 bps)\n\nErrors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0\nErrors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0\n", "150-15-/api/v1/entities?app_token=ef6baaed0d294f8f54eef80aeb8a4ee1"=>"httperf --client=0/1 --server=localhost --port=3000 --uri=/api/v1/entities?app_token=ef6baaed0d294f8f54eef80aeb8a4ee1 --rate=15 --send-buffer=4096 --recv-buffer=16384 --num-conns=150 --num-calls=1\nMaximum connect burst length: 1\n\nTotal: connections 150 requests 150 replies 150 test-duration 9.988 s\n\nConnection rate: 15.0 conn/s (66.6 ms/conn, <=7 concurrent connections)\nConnection time [ms]: min 34.3 avg 92.1 max 415.4 median 71.5 stddev 68.8\nConnection time [ms]: connect 0.1\nConnection length [replies/conn]: 1.000\n\nRequest rate: 15.0 req/s (66.6 ms/req)\nRequest size [B]: 120.0\n\nReply rate [replies/s]: min 15.0 avg 15.0 max 15.0 stddev 0.0 (1 samples)\nReply time [ms]: response 91.9 transfer 0.0\nReply size [B]: header 642.0 content 4901.0 footer 0.0 (total 5543.0)\nReply status: 1xx=0 2xx=150 3xx=0 4xx=0 5xx=0\n\nCPU time [s]: user 1.76 system 8.21 (user 17.6% system 82.2% total 99.9%)\nNet I/O: 83.1 KB/s (0.7*10^6 bps)\n\nErrors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0\nErrors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0\n"}
|
65
|
+
|
50
66
|
```
|
51
67
|
## Contributing
|
52
68
|
|
@@ -55,3 +71,10 @@ hippo.becomes_crazy
|
|
55
71
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
56
72
|
4. Push to the branch (`git push origin my-new-feature`)
|
57
73
|
5. Create new Pull Request
|
74
|
+
|
75
|
+
## Other similar Ruby gems/libraries
|
76
|
+
|
77
|
+
1. [httperfrb](https://github.com/rubyops/httperfrb)
|
78
|
+
2. [stresser](https://github.com/moviepilot/stresser)
|
79
|
+
3. [httperf-output-parser](https://github.com/wjessop/httperf-output-parser)
|
80
|
+
|
data/lib/hippoload/hippo.rb
CHANGED
@@ -12,19 +12,27 @@ module Hippoload
|
|
12
12
|
attr_reader :connections, :rate, :server, :port, :uri, :connections_and_rates
|
13
13
|
|
14
14
|
def initialize(conf)
|
15
|
+
|
16
|
+
raise ArgumentError, 'Argument is not hash' unless conf.is_a? Hash
|
17
|
+
|
15
18
|
@connections = conf[:connections]
|
16
19
|
@rate = conf[:rate]
|
17
20
|
@server = conf[:server] || 'localhost'
|
18
21
|
@port = conf[:port] || '3000'
|
19
22
|
@uri = conf[:uri]
|
20
|
-
@connections_and_rates = conf[:connections_and_rates]
|
23
|
+
@connections_and_rates = if !conf[:connections_and_rates].nil?
|
24
|
+
conf[:connections_and_rates]
|
25
|
+
elsif @connections.nil? && @rate.nil?
|
26
|
+
default_connections_and_rates
|
27
|
+
end
|
21
28
|
|
22
|
-
|
29
|
+
raise Hippo.wrong_conf_message if wrong_configuration
|
23
30
|
end
|
24
31
|
|
25
32
|
def attack
|
26
|
-
|
27
|
-
|
33
|
+
raise "Httperf is not installed on your machine" unless httperf_installed?
|
34
|
+
set_connections if @connections.nil?
|
35
|
+
set_rate if @rate.nil?
|
28
36
|
%x(httperf --num-conns=#{@connections} --rate=#{@rate} --server=#{@server} --port=#{@port} --uri="#{@uri}")
|
29
37
|
end
|
30
38
|
|
@@ -40,6 +48,13 @@ module Hippoload
|
|
40
48
|
raw_outputs
|
41
49
|
end
|
42
50
|
|
51
|
+
class << self
|
52
|
+
def wrong_conf_message
|
53
|
+
"You are missing :connections or :rate arrtibute or may be,
|
54
|
+
either assign (:connections, :rate) or assign :connections_and_rates attribute"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
43
58
|
private
|
44
59
|
|
45
60
|
def default_connections_and_rates
|
@@ -50,21 +65,29 @@ module Hippoload
|
|
50
65
|
{ :connections => 500, :rate => 50 },
|
51
66
|
{ :connections => 700, :rate => 70 },
|
52
67
|
{ :connections => 1000, :rate => 100 }
|
53
|
-
]
|
68
|
+
]
|
54
69
|
end
|
55
70
|
|
56
71
|
def set_connections
|
57
|
-
@connections
|
72
|
+
@connections ||= default_connections_and_rates[0][:connections]
|
73
|
+
puts "--" * 50
|
74
|
+
puts "NOTE: You haven't passed the no of connections, so setting default value (#{@connections}) for the connections."
|
75
|
+
puts "--" * 50
|
58
76
|
end
|
59
77
|
|
60
78
|
def set_rate
|
61
|
-
@rate
|
79
|
+
@rate ||= default_connections_and_rates[0][:rate]
|
80
|
+
puts "--" * 50
|
81
|
+
puts "NOTE: You haven't passed the value for rate, so setting default value (#{@rate}) for the rate."
|
82
|
+
puts "--" * 50
|
62
83
|
end
|
63
84
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
67
|
-
|
85
|
+
def wrong_configuration
|
86
|
+
(!@connections.nil? || !@rate.nil?) && !@connections_and_rates.nil?
|
87
|
+
end
|
88
|
+
|
89
|
+
def httperf_installed?
|
90
|
+
system("which httperf > /dev/null 2>&1")
|
68
91
|
end
|
69
92
|
end
|
70
93
|
end
|
data/lib/hippoload/version.rb
CHANGED
data/spec/hippo_spec.rb
CHANGED
@@ -11,10 +11,15 @@ describe Hippoload::Hippo do
|
|
11
11
|
:uri => "/posts",
|
12
12
|
:connections_and_rates => [{ :connections => 100, :rate => 10 }]
|
13
13
|
}
|
14
|
+
|
14
15
|
end
|
15
16
|
|
17
|
+
let(:wrong_arg) {['worng_arg']}
|
18
|
+
|
16
19
|
describe "Hippo#attributes_methods" do
|
17
20
|
|
21
|
+
# These tests are tested using real database with the httperf tool
|
22
|
+
|
18
23
|
it "should have attributes reader" do
|
19
24
|
hippo = Hippoload::Hippo.new(basic_conf)
|
20
25
|
hippo.connections.should eql(100)
|
@@ -29,6 +34,10 @@ describe Hippoload::Hippo do
|
|
29
34
|
expect { Hippoload::Hippo.new(wrong_conf) }.to raise_error
|
30
35
|
end
|
31
36
|
|
37
|
+
it "should raise error if wrong argument passed" do
|
38
|
+
expect { Hippoload::Hippo.new(wrong_arg) }.to raise_error
|
39
|
+
end
|
40
|
+
|
32
41
|
it "should not raise error if correct conf passed" do
|
33
42
|
expect { Hippoload::Hippo.new(basic_conf) }.to_not raise_error
|
34
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hippoload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|