internethakai 0.2.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.
Files changed (36) hide show
  1. data/CHANGES +53 -0
  2. data/README +177 -0
  3. data/bin/hakaigen +10 -0
  4. data/bin/internethakai +9 -0
  5. data/internethakai.gemspec +27 -0
  6. data/lib/internethakai.rb +26 -0
  7. data/lib/internethakai.rb.~1~ +25 -0
  8. data/lib/internethakai/action.rb +403 -0
  9. data/lib/internethakai/client_handler.rb +175 -0
  10. data/lib/internethakai/client_queue.rb +27 -0
  11. data/lib/internethakai/concurrency_manager.rb +333 -0
  12. data/lib/internethakai/concurrency_manager.rb.~1~ +331 -0
  13. data/lib/internethakai/core.rb +146 -0
  14. data/lib/internethakai/executor.rb +129 -0
  15. data/lib/internethakai/generator.rb +32 -0
  16. data/lib/internethakai/hakairev.rb +119 -0
  17. data/lib/internethakai/hakairev/executor.rb +43 -0
  18. data/lib/internethakai/hakairev/http_client.rb +362 -0
  19. data/lib/internethakai/hakairev/http_client.rb.~1~ +371 -0
  20. data/lib/internethakai/hakairev/monkey.rb +70 -0
  21. data/lib/internethakai/hakairev/revpipe.rb +39 -0
  22. data/lib/internethakai/hakairev/task.rb +39 -0
  23. data/lib/internethakai/hakairev/time_register.rb +116 -0
  24. data/lib/internethakai/hakairev/timer_factory.rb +38 -0
  25. data/lib/internethakai/http_client.rb +120 -0
  26. data/lib/internethakai/logger.rb +52 -0
  27. data/lib/internethakai/main.rb +90 -0
  28. data/lib/internethakai/reporter.rb +143 -0
  29. data/lib/internethakai/response.rb +65 -0
  30. data/lib/internethakai/scenario.rb +98 -0
  31. data/lib/internethakai/scenario.tmpl +58 -0
  32. data/lib/internethakai/scenario_builder.rb +183 -0
  33. data/lib/internethakai/scenario_handler.rb +91 -0
  34. data/lib/internethakai/time_register.rb +53 -0
  35. data/lib/internethakai/util.rb +130 -0
  36. metadata +134 -0
@@ -0,0 +1,91 @@
1
+ module InternetHakai
2
+ # = シナリオを扱うクラス
3
+ class ScenarioHandler < BaseHandler
4
+ #require 'resolv'
5
+ UNIQUE_BY_THREAD = false
6
+ attr_accessor :config
7
+ def init config
8
+ @config = config
9
+ @size = 0
10
+ @closed = false
11
+ @max_request = @config['max_scenario']
12
+ @max_request_counter = @max_request
13
+ @act_sum = 0
14
+ @scenarios = Hash::new
15
+ @logger = BaseHandler::get_handler(@config["logger"])
16
+ end
17
+ def create_scenario process_id=''
18
+ o = Scenario::new(@config)
19
+ @size += 1
20
+ o.scenario_id = (@size.to_s + process_id).to_i
21
+ o.create_scenario
22
+ #シナリオのサイズ
23
+ @scenarios[o.object_id] = o.size
24
+ @act_sum += o.size
25
+ o
26
+ end
27
+ #すべてのシナリオがつくられた
28
+ def on_scenarios_created
29
+ @loop_counter, @mod_counter = @act_sum.divmod(@max_request)
30
+ @queue = BaseHandler::get_handler(@config['queue'])
31
+ end
32
+ def set_on_complete &block
33
+ @on_complete_callback = block
34
+ end
35
+ def on_complete
36
+ @on_complete_callback.call() if @on_complete_callback
37
+ end
38
+ def set_on_turn_complete &block
39
+ @on_turn_complete_callback = block
40
+ end
41
+ def on_turn_complete
42
+ @queue.add([@on_turn_complete_callback,[]]) if @on_turn_complete_callback
43
+ @logger.run('o', 2)
44
+ end
45
+ def silence
46
+ def on_turn_complete
47
+ @queue.add([@on_turn_complete_callback,[]]) if @on_turn_complete_callback
48
+ end
49
+ end
50
+ # = ひとつのアクションが終了時に呼ばれる
51
+ def quit_action scenario_id
52
+ #ひとつのアクションが終了
53
+ @scenarios[scenario_id] -= 1
54
+ @max_request_counter -= 1
55
+ #puts "req_counter: #{@max_request_counter}"
56
+ if @max_request_counter == 0
57
+ #ひとつのアクション×リクエスト並列数が終了
58
+ on_turn_complete
59
+ @max_request_counter = @max_request
60
+ @loop_counter -= 1
61
+ end
62
+ #シナリオ並列数と、リクエスト並列数がちがうので、あまりの処理が必要
63
+ #puts "loop: #{@loop_counter}"
64
+ #if @loop_counter == 0
65
+ # @mod_counter -= 1
66
+ # if @mod_counter==0
67
+ # on_turn_complete
68
+ # on_complete
69
+ # end
70
+ #end
71
+ if(@scenarios[scenario_id]==0)
72
+ #ひとつのシナリオが終了
73
+ @size -= 1
74
+ #@logger.run("size:#{@size}\n", 2)
75
+ if @size==0
76
+ @logger.run("O", 2)
77
+ on_complete
78
+ end
79
+ end
80
+ end
81
+ def closed?
82
+ @closed
83
+ end
84
+ def close
85
+ @closed = true
86
+ end
87
+ def complete?
88
+ @size <= 0
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,53 @@
1
+ module InternetHakai
2
+ # = 時間記録
3
+ class TimeRegister < BaseHandler
4
+ UNIQUE_BY_THREAD = false
5
+ def on_create
6
+ @report = ResponseRecord::new
7
+ @stack = []
8
+ end
9
+ def get_record
10
+ exec unless @stack.empty?
11
+ @report
12
+ end
13
+ def exec
14
+ for arg in @stack
15
+ do_regist(*arg)
16
+ end
17
+ @stack = []
18
+ end
19
+ def regist name, time, response, error
20
+ @stack << [name, time, response, error]
21
+ end
22
+ def do_regist name, time, response, error
23
+ time = time.to_f
24
+ v = @report[name]
25
+ if response.nil?
26
+ status = 0
27
+ else
28
+ status = response.status
29
+ v[:size] += response.body.size
30
+ end
31
+
32
+ #if (response.nil? || (status != 200 && (status / 100 != 3)))
33
+ # v[:errorcount] += 1 ## エラーカウント
34
+ #end
35
+ if v[:min].nil? and time != 0
36
+ v[:min] = time
37
+ v[:max] = time
38
+ elsif time != 0
39
+ v[:min] = v[:min] < time ? v[:min] : time
40
+ end
41
+ if time != 0
42
+ v[:max] = v[:max] > time ? v[:max] : time
43
+ end
44
+ v[:totaltime] += time ## 総合時間
45
+ v[:accesscount] += 1 if time > 0
46
+ v[:errorcount] += error
47
+ v["status:#{status}"] = v["status:#{status}"].to_i + 1 unless response.nil?
48
+ v["time:#{((time*1000).to_i/100)*100}"] = v["time:#{((time*1000).to_i/100)*100}"].to_i + 1
49
+ #detail は 一度だけ上書き
50
+ #v[:detail] += detail if(detail != "" && v[:detail]=="")
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,130 @@
1
+ module InternetHakai
2
+ class Util
3
+ require 'uri'
4
+ require 'kconv'
5
+ require 'nkf'
6
+ def self::encode_method(meth)
7
+ case meth
8
+ when 'GET'
9
+ GET
10
+ when 'POST'
11
+ POST
12
+ when 'PUT'
13
+ PUT
14
+ when 'DELETE'
15
+ DELETE
16
+ end
17
+ end
18
+ def self::time(msg, &b)
19
+ t = Time::now
20
+ b.call
21
+ d = (Time::now - t)*1000
22
+ puts "#{msg}: #{d}"
23
+ end
24
+ def self::hash2poststring(body)
25
+ body.map do |key,value|
26
+ "#{URI.encode(key)}=#{URI.encode(value.to_s)}"
27
+ end.join("&")
28
+ end
29
+ def self::set_params(url, params)
30
+ unless url.include? "?"
31
+ url += "?"
32
+ else
33
+ url[url.size-1] != "&"
34
+ url += "&"
35
+ end
36
+ q = []
37
+ params.each do |k,v|
38
+ one = URI::encode(k.to_s)
39
+ one += "="
40
+ one += URI::encode(v.to_s)
41
+ q << one
42
+ end
43
+ url + q.join("&")
44
+ end
45
+ def self::parse_url url
46
+ hostpath = url.slice(url.index('://')+3, url.size)
47
+ if pathstart = hostpath.index('/')
48
+ host = hostpath.slice(0, pathstart)
49
+ path = hostpath.slice(pathstart, hostpath.size)
50
+ else
51
+ host = hostpath
52
+ path = '/'
53
+ end
54
+ if portstart = host.index(':')
55
+ host, port = host.split(':')
56
+ port = port.to_i
57
+ else
58
+ port = 80
59
+ end
60
+ [host, port, path]
61
+ end
62
+ def self::parse_post_string ar
63
+ ar.map do |key,value|
64
+ "#{URI.encode(key)}=#{URI.encode(value.to_s)}"
65
+ end.join("&")
66
+ end
67
+ def self::get_query path
68
+ #ワンライナーで書けた!
69
+ Hash[ *path[/\?(.*)/, 1].to_s.split("&").map{|kv| ((v = kv.split("=")).size==2 ? v : []).map(&URI::method(:decode))}.flatten ]
70
+ end
71
+ def self::convert_encoding(str, params)
72
+ return if str.nil?
73
+ encoding = params["encoding"].upcase
74
+ opt = "-x#{self::get_encode_nkf(encoding)}W"
75
+ NKF::nkf(opt, str)
76
+ #Kconv::kconv(str, self::get_encode(encoding), Kconv::UTF8)
77
+ end
78
+ def self::recover_encoding(str, params)
79
+ return if str.nil?
80
+ encoding = params["encoding"].upcase
81
+ opt = "-xw#{self::get_encode_nkf_input(encoding)}"
82
+ NKF::nkf(opt, str)
83
+ #Kconv::kconv(str, Kconv::UTF8, self::get_encode(encoding))
84
+ end
85
+ def self::get_encode encode
86
+ case encode
87
+ when "SHIFT_JIS", "SJIS-WIN", "SHIFTJIS"
88
+ Kconv::SJIS
89
+ when "UTF-8"
90
+ Kconv::UTF8
91
+ when "JIS"
92
+ Kconv::JIS
93
+ when "EUC-JP"
94
+ Kconv::EUC
95
+ else
96
+ Kconv::UNKNOWN
97
+ end
98
+ end
99
+ def self::get_encode_nkf encode
100
+ case encode
101
+ when "SHIFT_JIS", "SJIS-WIN", "SHIFTJIS"
102
+ 's'
103
+ when "UTF-8"
104
+ 'w'
105
+ when "JIS"
106
+ 'j'
107
+ when "EUC-JP"
108
+ 'e'
109
+ else
110
+ nil
111
+ end
112
+ end
113
+ def self::get_encode_nkf_input encode
114
+ case encode
115
+ when "SHIFT_JIS", "SJIS-WIN", "SHIFTJIS"
116
+ 'S'
117
+ when "UTF-8"
118
+ 'W'
119
+ when "JIS"
120
+ 'J'
121
+ when "EUC-JP"
122
+ 'E'
123
+ else
124
+ nil
125
+ end
126
+ end
127
+ end
128
+
129
+
130
+ end
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: internethakai
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
+ platform: ruby
11
+ authors:
12
+ - takada-at
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-26 00:00:00 +09:00
18
+ default_executable: internethakai
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rev
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 3
30
+ - 2
31
+ version: 0.3.2
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: iobuffer
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 1
44
+ - 3
45
+ version: 0.1.3
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ description: " scenario test tool for web application.\n"
49
+ email: takada-at@klab.jp
50
+ executables:
51
+ - hakaigen
52
+ - internethakai
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README
57
+ - CHANGES
58
+ files:
59
+ - lib/internethakai/logger.rb
60
+ - lib/internethakai/executor.rb
61
+ - lib/internethakai/hakairev.rb
62
+ - lib/internethakai/scenario_handler.rb
63
+ - lib/internethakai/main.rb
64
+ - lib/internethakai/scenario_builder.rb
65
+ - lib/internethakai/reporter.rb
66
+ - lib/internethakai/scenario.tmpl
67
+ - lib/internethakai/hakairev/http_client.rb.~1~
68
+ - lib/internethakai/hakairev/executor.rb
69
+ - lib/internethakai/hakairev/revpipe.rb
70
+ - lib/internethakai/hakairev/monkey.rb
71
+ - lib/internethakai/hakairev/http_client.rb
72
+ - lib/internethakai/hakairev/time_register.rb
73
+ - lib/internethakai/hakairev/task.rb
74
+ - lib/internethakai/hakairev/timer_factory.rb
75
+ - lib/internethakai/http_client.rb
76
+ - lib/internethakai/client_handler.rb
77
+ - lib/internethakai/action.rb
78
+ - lib/internethakai/core.rb
79
+ - lib/internethakai/time_register.rb
80
+ - lib/internethakai/generator.rb
81
+ - lib/internethakai/util.rb
82
+ - lib/internethakai/concurrency_manager.rb
83
+ - lib/internethakai/concurrency_manager.rb.~1~
84
+ - lib/internethakai/response.rb
85
+ - lib/internethakai/client_queue.rb
86
+ - lib/internethakai/scenario.rb
87
+ - lib/internethakai.rb.~1~
88
+ - lib/internethakai.rb
89
+ - bin/hakaigen
90
+ - bin/internethakai
91
+ - internethakai.gemspec
92
+ - README
93
+ - CHANGES
94
+ has_rdoc: true
95
+ homepage: ""
96
+ licenses: []
97
+
98
+ post_install_message:
99
+ rdoc_options:
100
+ - -U
101
+ - -c
102
+ - UTF-8
103
+ - -t
104
+ - !binary |
105
+ IuOCpOODs+OCv+ODvOODjeODg+ODiOegtOWjiiI=
106
+
107
+ - --main=README
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ segments:
115
+ - 1
116
+ - 8
117
+ - 6
118
+ version: 1.8.6
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirements: []
127
+
128
+ rubyforge_project: internethakai
129
+ rubygems_version: 1.3.6
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: scenario test tool for web application
133
+ test_files: []
134
+