roadrunner 4.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +3 -0
- data/README +3 -0
- data/Rakefile +41 -0
- data/bin/controller.rb +76 -0
- data/bin/hostmgr.rb +69 -0
- data/bin/nbd_prepare.sh +88 -0
- data/conf/servers.yaml +29 -0
- data/controller/dd.sh +92 -0
- data/controller/ioperf.rb +108 -0
- data/controller/mysql.rb +74 -0
- data/controller/mysql.sh +9 -0
- data/controller/svn.sh +49 -0
- data/controller/wrap.rb +23 -0
- data/lib/action.rb +14 -0
- data/lib/db.rb +51 -0
- data/lib/ended.rb +14 -0
- data/lib/init.rb +14 -0
- data/lib/model.rb +10 -0
- data/lib/report.rb +100 -0
- data/lib/roadrunner.rb +122 -0
- data/lib/rrhelper.rb +25 -0
- data/lib/rrmonitor.rb +174 -0
- data/lib/run.rb +113 -0
- data/log/dd.log +129 -0
- data/log/log.rb +17 -0
- data/log/stdout.log +4 -0
- data/log/stdout.log.20100421 +0 -0
- data/log/svn.log +502 -0
- data/test/baidu.rb +100 -0
- data/test/blog.rb +100 -0
- data/test/db/development.sqlite3 +0 -0
- data/test/download_processes.rb +38 -0
- data/test/fibonacci.rb +27 -0
- data/test/get163.rb +38 -0
- data/test/get19Lou.rb +39 -0
- data/test/getHawaii.rb +95 -0
- data/test/httpclient-rfuzz-vs-httparty.rb +31 -0
- data/test/mysql_processes.rb +66 -0
- data/test/pi.rb +37 -0
- data/test/pi_db.rb +41 -0
- data/test/pi_monitor.rb +45 -0
- data/test/prime.rb +33 -0
- data/test/prime_p.rb +36 -0
- data/test/test_db.rb +29 -0
- data/test/vbd_kv.rb +123 -0
- metadata +100 -0
data/test/baidu.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'roadrunner'
|
4
|
+
# => I'll use the Httparty lib to make http request
|
5
|
+
# => as the LR method LoadRunner#web_url() and
|
6
|
+
# => LoadRunner#web_submit_data() and LoadRunner#web_custom_request()
|
7
|
+
require 'httparty'
|
8
|
+
|
9
|
+
# => if one of RoadRunner.new's argument is block
|
10
|
+
# => then the database connection will be established
|
11
|
+
# => and the below method could be used:
|
12
|
+
# => RoadRunner#save_report()
|
13
|
+
|
14
|
+
# => IMPORTANT:
|
15
|
+
# => if a block is given to RoadRunner#new
|
16
|
+
# => make sure there is exist the below three tables in the target DATABASE:
|
17
|
+
# => scenarios transactions records
|
18
|
+
# => and the three tables is defined in db.rb,
|
19
|
+
# => otherwise if the three tables does not exist in the target DATABASE,
|
20
|
+
# => Roadrunner will auto create the three tables.
|
21
|
+
|
22
|
+
baidu=RoadRunner.new do |session|
|
23
|
+
{:adapter=>"mysql",
|
24
|
+
:encoding=>"utf8",
|
25
|
+
:database=>"dpmp",
|
26
|
+
:username=>"root",
|
27
|
+
:password=>"alisoft",
|
28
|
+
:host=>"10.2.226.133"}
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
# => RoadRunner#mode could be set as such value:
|
33
|
+
# => 'thread'
|
34
|
+
# => 'sequence' or other string is same.
|
35
|
+
# => when thread mode is set,
|
36
|
+
# => the RoadRunner#action will run as thread,
|
37
|
+
# => and main thread will fork RoadRunner#users threads to run every action block
|
38
|
+
#baidu.mode = 'thread'
|
39
|
+
|
40
|
+
baidu.init do
|
41
|
+
# RoadRunner#users : the concurrency user do the action.
|
42
|
+
# RoadRunner#iterations : every user execute the action such times
|
43
|
+
baidu.users,baidu.iterations=4,25
|
44
|
+
end
|
45
|
+
|
46
|
+
# => RoadRunner#any_other_method()
|
47
|
+
# => if any_other_method() is not exsit in RoadRunner#methods
|
48
|
+
# => the RoadRunner#any_other_method(){} will be dealed as RoadRunner#transaction('any_other_method'){}
|
49
|
+
# => and the important is:
|
50
|
+
# => the block of RoadRunner#transaction('any_other_method'){}
|
51
|
+
# => the value of the last expression in the block
|
52
|
+
# => will determin this transaction's current action is pass or not!!!
|
53
|
+
# =>
|
54
|
+
# => status's value is:
|
55
|
+
# => 0=>success
|
56
|
+
# => -1=>faile
|
57
|
+
# => ruby code as below:
|
58
|
+
# => case status
|
59
|
+
# => when false,'false','-1',-1 then status = -1
|
60
|
+
# => else status = 0
|
61
|
+
# => end
|
62
|
+
baidu.action do
|
63
|
+
baidu.query do
|
64
|
+
resp = HTTParty.get('http://www.baidu.com/s?wd=charlescui')
|
65
|
+
# => check request header if contain the certain key words
|
66
|
+
# => same as the LR method LoadRunner#web_reg_find("Search=Headers")
|
67
|
+
#resp.headers.inspect.include? 'Apache'
|
68
|
+
end
|
69
|
+
# => Log4r is integrade in the RoadRunner and you could use it as below.
|
70
|
+
# => RoadRunner#log.debug
|
71
|
+
# => RoadRunner#log.info
|
72
|
+
# => RoadRunner#log.warn
|
73
|
+
# => RoadRunner#log.error
|
74
|
+
# => RoadRunner#log.fatal
|
75
|
+
baidu.image do
|
76
|
+
resp = HTTParty.get('http://image.baidu.com/i?tn=baiduimage&ct=201326592&cl=2&lm=-1&pv=&word=girl&z=0')
|
77
|
+
# => check request body
|
78
|
+
# => same as the LR method LoadRunner#web_reg_find()
|
79
|
+
#resp.body.include? 'CalendarPopup'
|
80
|
+
end
|
81
|
+
baidu.mp3 do
|
82
|
+
resp = HTTParty.get('http://mp3.baidu.com/m?f=ms&rn=&tn=baidump3&ct=134217728&word=anny&lm=-1')
|
83
|
+
# => check request body
|
84
|
+
# => same as the LR method LoadRunner#web_reg_find()
|
85
|
+
#resp.body.include? 'CalendarPopup'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# => RoadRunner#run
|
90
|
+
# => this method will execute the RoadRunner script
|
91
|
+
# => the performance will start.
|
92
|
+
baidu.run
|
93
|
+
# => RoadRunner#report
|
94
|
+
# => this method will output the report to the STDOUT
|
95
|
+
baidu.report
|
96
|
+
# => RoadRunner#save_report
|
97
|
+
# => this method will save the report to database if the database connection is established
|
98
|
+
# => :script is one of the arguments
|
99
|
+
# => if the :script is set and the value of :script is a path,the file's content of the path will be saved in database.
|
100
|
+
baidu.save_report(:name=>"baiduQueryImageMP3",:script=>__FILE__)
|
data/test/blog.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'roadrunner'
|
4
|
+
# => I'll use the Httparty lib to make http request
|
5
|
+
# => as the LR method LoadRunner#web_url() and
|
6
|
+
# => LoadRunner#web_submit_data() and LoadRunner#web_custom_request()
|
7
|
+
require 'httparty'
|
8
|
+
|
9
|
+
# => if one of RoadRunner.new's argument is block
|
10
|
+
# => then the database connection will be established
|
11
|
+
# => and the below method could be used:
|
12
|
+
# => RoadRunner#save_report()
|
13
|
+
|
14
|
+
# => IMPORTANT:
|
15
|
+
# => if a block is given to RoadRunner#new
|
16
|
+
# => make sure there is exist the below three tables in the target DATABASE:
|
17
|
+
# => scenarios transactions records
|
18
|
+
# => and the three tables is defined in db.rb,
|
19
|
+
# => otherwise if the three tables does not exist in the target DATABASE,
|
20
|
+
# => Roadrunner will auto create the three tables.
|
21
|
+
|
22
|
+
blog=RoadRunner.new do |session|
|
23
|
+
{:adapter=>"mysql",
|
24
|
+
:encoding=>"utf8",
|
25
|
+
:database=>"dpmp",
|
26
|
+
:username=>"root",
|
27
|
+
:password=>"alisoft",
|
28
|
+
:host=>"10.2.226.133"}
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
# => RoadRunner#mode could be set as such value:
|
33
|
+
# => 'thread'
|
34
|
+
# => 'sequence' or other string is same.
|
35
|
+
# => when thread mode is set,
|
36
|
+
# => the RoadRunner#action will run as thread,
|
37
|
+
# => and main thread will fork RoadRunner#users threads to run every action block
|
38
|
+
#blog.mode = 'thread'
|
39
|
+
|
40
|
+
blog.init do
|
41
|
+
# RoadRunner#users : the concurrency user do the action.
|
42
|
+
# RoadRunner#iterations : every user execute the action such times
|
43
|
+
blog.users,blog.iterations=2,25
|
44
|
+
end
|
45
|
+
|
46
|
+
# => RoadRunner#any_other_method()
|
47
|
+
# => if any_other_method() is not exsit in RoadRunner#methods
|
48
|
+
# => the RoadRunner#any_other_method(){} will be dealed as RoadRunner#transaction('any_other_method'){}
|
49
|
+
# => and the important is:
|
50
|
+
# => the block of RoadRunner#transaction('any_other_method'){}
|
51
|
+
# => the value of the last expression in the block
|
52
|
+
# => will determin this transaction's current action is pass or not!!!
|
53
|
+
# =>
|
54
|
+
# => status's value is:
|
55
|
+
# => 0=>success
|
56
|
+
# => -1=>faile
|
57
|
+
# => ruby code as below:
|
58
|
+
# => case status
|
59
|
+
# => when false,'false','-1',-1 then status = -1
|
60
|
+
# => else status = 0
|
61
|
+
# => end
|
62
|
+
blog.action do
|
63
|
+
blog.homepage do
|
64
|
+
resp = HTTParty.get('http://charlescui.javaeye.com')
|
65
|
+
# => check request header if contain the certain key words
|
66
|
+
# => same as the LR method LoadRunner#web_reg_find("Search=Headers")
|
67
|
+
#resp.headers.inspect.include? 'Apache'
|
68
|
+
end
|
69
|
+
# => Log4r is integrade in the RoadRunner and you could use it as below.
|
70
|
+
# => RoadRunner#log.debug
|
71
|
+
# => RoadRunner#log.info
|
72
|
+
# => RoadRunner#log.warn
|
73
|
+
# => RoadRunner#log.error
|
74
|
+
# => RoadRunner#log.fatal
|
75
|
+
blog.guest_book do
|
76
|
+
resp = HTTParty.get('http://charlescui.javaeye.com/blog/guest_book')
|
77
|
+
# => check request body
|
78
|
+
# => same as the LR method LoadRunner#web_reg_find()
|
79
|
+
#resp.body.include? 'CalendarPopup'
|
80
|
+
end
|
81
|
+
blog.album do
|
82
|
+
resp = HTTParty.get('http://charlescui.javaeye.com/blog/album')
|
83
|
+
# => check request body
|
84
|
+
# => same as the LR method LoadRunner#web_reg_find()
|
85
|
+
#resp.body.include? 'CalendarPopup'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# => RoadRunner#run
|
90
|
+
# => this method will execute the RoadRunner script
|
91
|
+
# => the performance will start.
|
92
|
+
blog.run
|
93
|
+
# => RoadRunner#report
|
94
|
+
# => this method will output the report to the STDOUT
|
95
|
+
blog.report
|
96
|
+
# => RoadRunner#save_report
|
97
|
+
# => this method will save the report to database if the database connection is established
|
98
|
+
# => :script is one of the arguments
|
99
|
+
# => if the :script is set and the value of :script is a path,the file's content of the path will be saved in database.
|
100
|
+
blog.save_report(:name=>"blogHomeGuestBookAlbum",:script=>__FILE__)
|
Binary file
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
4
|
+
|
5
|
+
require 'roadrunner'
|
6
|
+
|
7
|
+
dl=RoadRunner.new
|
8
|
+
|
9
|
+
=begin
|
10
|
+
RoadRunner::mode =>
|
11
|
+
/thread/,/t/
|
12
|
+
/process/,/p/
|
13
|
+
else.
|
14
|
+
Defined in run.rb
|
15
|
+
当mode为进程的时候,RoadRunner将产生最真实的压力
|
16
|
+
=end
|
17
|
+
|
18
|
+
dl.mode='p'
|
19
|
+
|
20
|
+
dl.init do
|
21
|
+
# users决定同时有多少并发用户一起执行action
|
22
|
+
# iterations决定每个用户执行多少次
|
23
|
+
dl.users,dl.iterations=5,10
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
dl.action do
|
28
|
+
sleep 10
|
29
|
+
%x{wget "http://dl_dir.qq.com/qqfile/qq/QQforMac/QQ_B1_606.dmg" 1>/dev/null 2>&1}
|
30
|
+
end
|
31
|
+
|
32
|
+
dl.ended do
|
33
|
+
end
|
34
|
+
|
35
|
+
dl.run
|
36
|
+
dl.report
|
37
|
+
|
38
|
+
p "Tps could get : RoadRunner::tps => #{dl.tps}"
|
data/test/fibonacci.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# 计算斐波那契数列
|
2
|
+
# Array.new(200)数组长度决定数列长度
|
3
|
+
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
5
|
+
|
6
|
+
require 'roadrunner'
|
7
|
+
|
8
|
+
rrfib=RoadRunner.new
|
9
|
+
|
10
|
+
rrfib.init do
|
11
|
+
rrfib.global[:x],rrfib.global[:y]=0,1
|
12
|
+
|
13
|
+
# users决定同时有多少并发用户一起执行action
|
14
|
+
# iterations决定每个用户执行多少次
|
15
|
+
rrfib.users,rrfib.iterations=10,100
|
16
|
+
end
|
17
|
+
|
18
|
+
rrfib.action do
|
19
|
+
rrfib.global[:fib]=Array.new(200) {|i| [0,1].include?(i) ? 1 : (rrfib.global[:x],rrfib.global[:y] = rrfib.global[:y],rrfib.global[:x]+rrfib.global[:y])&&(rrfib.global[:x]+rrfib.global[:y]) }
|
20
|
+
end
|
21
|
+
|
22
|
+
rrfib.ended do
|
23
|
+
#rrfib.global={}
|
24
|
+
end
|
25
|
+
|
26
|
+
rrfib.run
|
27
|
+
rrfib.report
|
data/test/get163.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'roadrunner'
|
4
|
+
require 'httparty'
|
5
|
+
|
6
|
+
get163=RoadRunner.new do |session|
|
7
|
+
session=
|
8
|
+
{:adapter=>"mysql",
|
9
|
+
:encoding=>"utf8",
|
10
|
+
:database=>"dpmp",
|
11
|
+
:username=>"root",
|
12
|
+
:password=>"alisoft",
|
13
|
+
:host=>"10.2.226.133"}
|
14
|
+
end
|
15
|
+
get163.mode = 'thread'
|
16
|
+
|
17
|
+
get163.init do
|
18
|
+
# users决定同时有多少并发用户一起执行action
|
19
|
+
# iterations决定每个用户执行多少次
|
20
|
+
get163.users,get163.iterations=10,100
|
21
|
+
end
|
22
|
+
|
23
|
+
get163.action do
|
24
|
+
get163.homepage do
|
25
|
+
resp = HTTParty.get('http://www.163.com')
|
26
|
+
# p resp.headers.inspect
|
27
|
+
true
|
28
|
+
end
|
29
|
+
get163.sports do
|
30
|
+
resp = HTTParty.get('http://sports.163.com/')
|
31
|
+
true
|
32
|
+
end
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
get163.run
|
37
|
+
get163.report
|
38
|
+
#get163.save_report(:name=>"Get163HomeAndSports")
|
data/test/get19Lou.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'roadrunner'
|
4
|
+
require 'httparty'
|
5
|
+
|
6
|
+
get19Lou=RoadRunner.new do |session|
|
7
|
+
session=
|
8
|
+
{:adapter=>"mysql",
|
9
|
+
:encoding=>"utf8",
|
10
|
+
:database=>"dpmp",
|
11
|
+
:username=>"root",
|
12
|
+
:password=>"alisoft",
|
13
|
+
:host=>"10.2.226.133"}
|
14
|
+
end
|
15
|
+
#get19Lou.mode = 'thread'
|
16
|
+
|
17
|
+
get19Lou.init do
|
18
|
+
# users决定同时有多少并发用户一起执行action
|
19
|
+
# iterations决定每个用户执行多少次
|
20
|
+
get19Lou.users,get19Lou.iterations=10,10
|
21
|
+
end
|
22
|
+
|
23
|
+
get19Lou.action do
|
24
|
+
get19Lou.homepage do
|
25
|
+
resp = HTTParty.get('http://19lou.com')
|
26
|
+
# => check request header if contain the certain key words
|
27
|
+
# (resp.headers.inspect.include? 'Apache')
|
28
|
+
end
|
29
|
+
get19Lou.auto do
|
30
|
+
resp = HTTParty.get('http://auto.19lou.com/')
|
31
|
+
# => check request body
|
32
|
+
# resp.body.include? '19lou'
|
33
|
+
end
|
34
|
+
true
|
35
|
+
end
|
36
|
+
|
37
|
+
get19Lou.run
|
38
|
+
get19Lou.report
|
39
|
+
get19Lou.save_report(:name=>"get19LouHomeAndSports2")
|
data/test/getHawaii.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'roadrunner'
|
4
|
+
# => I'll use the Httparty lib to make http request
|
5
|
+
# => as the LR method LoadRunner#web_url() and
|
6
|
+
# => LoadRunner#web_submit_data() and LoadRunner#web_custom_request()
|
7
|
+
require 'httparty'
|
8
|
+
|
9
|
+
# => if one of RoadRunner.new's argument is block
|
10
|
+
# => then the database connection will be established
|
11
|
+
# => and the below method could be used:
|
12
|
+
# => RoadRunner#save_report()
|
13
|
+
|
14
|
+
# => IMPORTANT:
|
15
|
+
# => if a block is given to RoadRunner#new
|
16
|
+
# => make sure there is exist the below three tables in the target DATABASE:
|
17
|
+
# => scenarios transactions records
|
18
|
+
# => and the three tables is defined in db.rb,
|
19
|
+
# => otherwise if the three tables does not exist in the target DATABASE,
|
20
|
+
# => Roadrunner will auto create the three tables.
|
21
|
+
|
22
|
+
getHawaii=RoadRunner.new
|
23
|
+
#do |session|
|
24
|
+
# {:adapter=>"mysql",
|
25
|
+
# :encoding=>"utf8",
|
26
|
+
# :database=>"dpmp",
|
27
|
+
# :username=>"root",
|
28
|
+
# :password=>"alisoft",
|
29
|
+
# :host=>"10.2.226.133"}
|
30
|
+
#end
|
31
|
+
|
32
|
+
# => RoadRunner#mode could be set as such value:
|
33
|
+
# => 'thread'
|
34
|
+
# => 'sequence' or other string is same.
|
35
|
+
# => when thread mode is set,
|
36
|
+
# => the RoadRunner#action will run as thread,
|
37
|
+
# => and main thread will fork RoadRunner#users threads to run every action block
|
38
|
+
#getHawaii.mode = 'thread'
|
39
|
+
|
40
|
+
getHawaii.init do
|
41
|
+
# users决定同时有多少并发用户一起执行action
|
42
|
+
# iterations决定每个用户执行多少次
|
43
|
+
getHawaii.users,getHawaii.iterations=2,1
|
44
|
+
end
|
45
|
+
|
46
|
+
# => RoadRunner#any_other_method()
|
47
|
+
# => if any_other_method() is not exsit in RoadRunner#methods
|
48
|
+
# => the RoadRunner#any_other_method(){} will be dealed as RoadRunner#transaction('any_other_method'){}
|
49
|
+
# => and the important is:
|
50
|
+
# => the block of RoadRunner#transaction('any_other_method'){}
|
51
|
+
# => the value of the last expression in the block
|
52
|
+
# => will determin this transaction's current action is pass or not!!!
|
53
|
+
# =>
|
54
|
+
# => status's value is:
|
55
|
+
# => 0=>success
|
56
|
+
# => -1=>faile
|
57
|
+
# => ruby code as below:
|
58
|
+
# => case status
|
59
|
+
# => when false,'false','-1',-1 then status = -1
|
60
|
+
# => else status = 0
|
61
|
+
# => end
|
62
|
+
getHawaii.action do
|
63
|
+
getHawaii.homepage do
|
64
|
+
resp = HTTParty.get('http://www.hawaii.com/')
|
65
|
+
# => check request header if contain the certain key words
|
66
|
+
# => same as the LR method LoadRunner#web_reg_find("Search=Headers")
|
67
|
+
resp.headers.inspect.include? 'Apache'
|
68
|
+
end
|
69
|
+
# => Log4r is integrade in the RoadRunner and you could use it as below.
|
70
|
+
# => RoadRunner#log.debug
|
71
|
+
# => RoadRunner#log.info
|
72
|
+
# => RoadRunner#log.warn
|
73
|
+
# => RoadRunner#log.error
|
74
|
+
# => RoadRunner#log.fatal
|
75
|
+
getHawaii.homepage2 do
|
76
|
+
resp = HTTParty.get('http://www.hawaii.com/')
|
77
|
+
# => check request body
|
78
|
+
# => same as the LR method LoadRunner#web_reg_find()
|
79
|
+
resp.body.include? 'CalendarPopup'
|
80
|
+
end
|
81
|
+
true
|
82
|
+
end
|
83
|
+
|
84
|
+
# => RoadRunner#run
|
85
|
+
# => this method will execute the RoadRunner script
|
86
|
+
# => the performance will start.
|
87
|
+
getHawaii.run
|
88
|
+
# => RoadRunner#report
|
89
|
+
# => this method will output the report to the STDOUT
|
90
|
+
getHawaii.report
|
91
|
+
# => RoadRunner#save_report
|
92
|
+
# => this method will save the report to database if the database connection is established
|
93
|
+
# => :script is one of the arguments
|
94
|
+
# => if the :script is set and the value of :script is a path,the file's content of the path will be saved in database.
|
95
|
+
getHawaii.save_report(:name=>"getHawaiiHomepage",:script=>__FILE__)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'roadrunner'
|
5
|
+
require 'rfuzz/client'
|
6
|
+
require 'httparty'
|
7
|
+
|
8
|
+
rclient=RoadRunner.new
|
9
|
+
#client.mode = 'thread'
|
10
|
+
|
11
|
+
rclient.init do
|
12
|
+
# users决定同时有多少并发用户一起执行action
|
13
|
+
# iterations决定每个用户执行多少次
|
14
|
+
@rc = RFuzz::HttpClient.new('10.2.226.132', 6080)
|
15
|
+
rclient.users,rclient.iterations=10,100
|
16
|
+
end
|
17
|
+
|
18
|
+
rclient.action do
|
19
|
+
@rc.get('/').http_body
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
rclient.run
|
24
|
+
rclient.report
|
25
|
+
client.save_report(:name=>"clientHomeAndSports")
|
26
|
+
|
27
|
+
hclient=RoadRunner.new
|
28
|
+
hclient.users,hclient.iterations=10,100
|
29
|
+
hclient.action{resp = HTTParty.get('http://10.2.226.132:6080')}
|
30
|
+
hclient.run
|
31
|
+
hclient.report
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
4
|
+
|
5
|
+
require 'roadrunner'
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'activerecord'
|
9
|
+
require 'benchmark'
|
10
|
+
require 'logger'
|
11
|
+
require 'pp'
|
12
|
+
|
13
|
+
mysql=RoadRunner.new
|
14
|
+
|
15
|
+
=begin
|
16
|
+
RoadRunner::mode =>
|
17
|
+
/thread/,/t/
|
18
|
+
/process/,/p/
|
19
|
+
else.
|
20
|
+
Defined in run.rb
|
21
|
+
当mode为进程的时候,RoadRunner将产生最真实的压力
|
22
|
+
=end
|
23
|
+
|
24
|
+
mysql.mode='p'
|
25
|
+
|
26
|
+
begin
|
27
|
+
ActiveRecord::Base.establish_connection(
|
28
|
+
:adapter =>"mysql",
|
29
|
+
:username => "houyi",
|
30
|
+
:password =>"111111",
|
31
|
+
:database => "SNS",
|
32
|
+
:host =>"10.250.6.30"
|
33
|
+
)
|
34
|
+
$log.info "mysql Connect Success."
|
35
|
+
rescue => e
|
36
|
+
$log.error "mysql Connect Failed!"
|
37
|
+
$log.error e.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
class RRData < ActiveRecord::Base
|
41
|
+
set_table_name "qa_posts"
|
42
|
+
# set_primary_key "ID"
|
43
|
+
end
|
44
|
+
|
45
|
+
mysql.init do
|
46
|
+
# users决定同时有多少并发用户一起执行action
|
47
|
+
# iterations决定每个用户执行多少次
|
48
|
+
mysql.users,mysql.iterations=100,10000
|
49
|
+
end
|
50
|
+
|
51
|
+
SQL=""
|
52
|
+
|
53
|
+
mysql.action do
|
54
|
+
# ts = Benchmark.measure{
|
55
|
+
RRData.find_by_sql(SQL)
|
56
|
+
# }
|
57
|
+
# mysql.log.error "RRData.find_by_sql #{SQL} ts => #{ts}"
|
58
|
+
end
|
59
|
+
|
60
|
+
mysql.ended do
|
61
|
+
end
|
62
|
+
|
63
|
+
mysql.run
|
64
|
+
mysql.report
|
65
|
+
|
66
|
+
p "Tps could get : RoadRunner::tps => #{mysql.tps}"
|
data/test/pi.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# 莱布尼兹公式计算圆周率
|
2
|
+
#rrpi.global[:deep]代表计算的深度
|
3
|
+
#深度越深,计算越精确,当然也越耗时
|
4
|
+
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
6
|
+
|
7
|
+
require 'roadrunner'
|
8
|
+
|
9
|
+
rrpi=RoadRunner.new
|
10
|
+
|
11
|
+
rrpi.init do
|
12
|
+
rrpi.global[:pi],rrpi.global[:deep]=0,100
|
13
|
+
|
14
|
+
# users决定同时有多少并发用户一起执行action
|
15
|
+
# iterations决定每个用户执行多少次
|
16
|
+
rrpi.users,rrpi.iterations=10,1000
|
17
|
+
end
|
18
|
+
|
19
|
+
rrpi.action do
|
20
|
+
|
21
|
+
# 新增加了iterationId和userId两个接口方法,
|
22
|
+
# 可以通过iterationId获得当前action执行到第一次
|
23
|
+
# 可以通过userId获得当前action执行用户的id
|
24
|
+
# puts rrpi.iterationId
|
25
|
+
# puts rrpi.userId
|
26
|
+
1.upto(rrpi.global[:deep]){|x|rrpi.global[:pi]+=((-1)**(x+1)*1.0/(x*2-1))}
|
27
|
+
end
|
28
|
+
|
29
|
+
rrpi.ended do
|
30
|
+
rrpi.global[:pi]*=4
|
31
|
+
#rrpi.global={}
|
32
|
+
end
|
33
|
+
|
34
|
+
rrpi.run
|
35
|
+
rrpi.report
|
36
|
+
|
37
|
+
p "Tps could get : RoadRunner::tps => #{rrpi.tps}"
|
data/test/pi_db.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# 莱布尼兹公式计算圆周率
|
2
|
+
#rrpi.global[:deep]代表计算的深度
|
3
|
+
#深度越深,计算越精确,当然也越耗时
|
4
|
+
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
6
|
+
|
7
|
+
require 'roadrunner'
|
8
|
+
|
9
|
+
#rrpi=RoadRunner.new(:out=>"#{File.join(File.dirname(__FILE__),'roadrunner_stdout.log')}")
|
10
|
+
|
11
|
+
rrpi=RoadRunner.new(:out=>"#{File.join(File.dirname(__FILE__),'roadrunner_stdout.log')}") do |session|
|
12
|
+
session[:adapter] = 'sqlite3'
|
13
|
+
session[:database] = File.join(File.dirname(__FILE__),'db','development.sqlite3')
|
14
|
+
end
|
15
|
+
|
16
|
+
rrpi.init do
|
17
|
+
rrpi.global[:pi],rrpi.global[:deep]=0,1000
|
18
|
+
|
19
|
+
# users决定同时有多少并发用户一起执行action
|
20
|
+
# iterations决定每个用户执行多少次
|
21
|
+
rrpi.users,rrpi.iterations=10,10
|
22
|
+
end
|
23
|
+
|
24
|
+
rrpi.action do
|
25
|
+
|
26
|
+
# 新增加了iterationId和userId两个接口方法,
|
27
|
+
# 可以通过iterationId获得当前action执行到第一次
|
28
|
+
# 可以通过userId获得当前action执行用户的id
|
29
|
+
# puts rrpi.iterationId
|
30
|
+
# puts rrpi.userId
|
31
|
+
1.upto(rrpi.global[:deep]){|x|rrpi.global[:pi]+=((-1)**(x+1)*1.0/(x*2-1))}
|
32
|
+
end
|
33
|
+
|
34
|
+
rrpi.ended do
|
35
|
+
rrpi.global[:pi]*=4
|
36
|
+
#rrpi.global={}
|
37
|
+
end
|
38
|
+
|
39
|
+
rrpi.run
|
40
|
+
rrpi.report
|
41
|
+
rrpi.save_report("pi_conputiong_perf_01")
|
data/test/pi_monitor.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# 莱布尼兹公式计算圆周率
|
4
|
+
#rrpi.global[:deep]代表计算的深度
|
5
|
+
#深度越深,计算越精确,当然也越耗时
|
6
|
+
|
7
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
8
|
+
|
9
|
+
require 'roadrunner'
|
10
|
+
|
11
|
+
rrpi=RoadRunner.new
|
12
|
+
|
13
|
+
rrpi.init do
|
14
|
+
rrpi.global[:pi],rrpi.global[:deep]=0,100
|
15
|
+
|
16
|
+
# users决定同时有多少并发用户一起执行action
|
17
|
+
# iterations决定每个用户执行多少次
|
18
|
+
rrpi.users,rrpi.iterations=10,1000
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
rrpi.action do
|
23
|
+
|
24
|
+
# 新增加了iterationId和userId两个接口方法,
|
25
|
+
# 可以通过iterationId获得当前action执行到第一次
|
26
|
+
# 可以通过userId获得当前action执行用户的id
|
27
|
+
# puts rrpi.iterationId
|
28
|
+
# puts rrpi.userId
|
29
|
+
1.upto(rrpi.global[:deep]){|x|rrpi.global[:pi]+=((-1)**(x+1)*1.0/(x*2-1))}
|
30
|
+
end
|
31
|
+
|
32
|
+
rrpi.ended do
|
33
|
+
rrpi.global[:pi]*=4
|
34
|
+
#rrpi.global={}
|
35
|
+
end
|
36
|
+
|
37
|
+
cmd=['ifstat','iostat 3','while((1>0));do sar -u -d 3 10; done','vmstat 3','while((1>0));do sar -u -n DEV 3 10; done']
|
38
|
+
|
39
|
+
RoadRunnerModule::RRMonitor.monit(File.join(File.dirname(__FILE__),'..','conf','servers.yaml'),rrpi.log,cmd,"Pi-Monitor-Performance"){
|
40
|
+
rrpi.run
|
41
|
+
}
|
42
|
+
|
43
|
+
rrpi.report
|
44
|
+
|
45
|
+
p "Tps could get : RoadRunner::tps => #{rrpi.tps}"
|