ambidexter 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ambidexter +1 -1
  3. data/lib/client.rb +151 -73
  4. data/lib/server.rb +70 -1
  5. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 06dbdb6df68c40f8a98ee9a2782f157c14789265
4
- data.tar.gz: f8052c8fa4a28a3cc22ec0c3bd1114bccef6a918
3
+ metadata.gz: 5823985b4ba3efee7ad6a50729a78acfe14fc338
4
+ data.tar.gz: 336c463a66e592593055f5903cffb42897c02ab2
5
5
  SHA512:
6
- metadata.gz: 42a86160cee2a6b7ac60ca83e31be6ffc7569be52a18cc93a5e2e7ad8440a5d078ac2d6332dfc6695971935157ad6a7edd25c6f3828d290e56236efab1f63c61
7
- data.tar.gz: b9535f13a48db4d3e12182e0096d9e15ba262a3a1a339d8349666861ba6d5272a859c523e671ef17dc4d7fb47b84b264ec96436c11cd0fe3003e814ac1a6226b
6
+ metadata.gz: 7209ee97bfa810984cb3acfb38f4fa893d30567a288a30935531aebc94cc818867d01d3997864161e6feea52e474fc54545ae4da4ad6fe012c32679257a98abd
7
+ data.tar.gz: ca83b536b52b6363b3816eb13d2c814fb5c48e5ea368698036c05c5698db87894b33927b038fcaf8bcdb9aee378c281e2b2aed67d1a1ca46455eda8c5281c781
@@ -10,6 +10,6 @@ if ARGV.include?('server')
10
10
  elsif ARGV.include?('client')
11
11
  client = Client.new
12
12
  client.test
13
+ client.send_results
13
14
  puts
14
- puts client.result
15
15
  end
@@ -1,6 +1,7 @@
1
1
  require "application"
2
2
  require "curb"
3
3
  require "colorize"
4
+ require "pry"
4
5
 
5
6
  class Client < Application
6
7
  def initialize
@@ -24,12 +25,19 @@ class Client < Application
24
25
  @threads_count = $stdin.gets.chomp.to_i
25
26
  @threads_count = 1 if @threads_count.zero?
26
27
 
28
+ # Setting eterations count
29
+ print "Input timeout: ".green
30
+ @http_timeout = $stdin.gets.chomp.to_f
31
+ @http_timeout = 10 if @http_timeout.zero?
32
+
27
33
  # Building link
28
34
  @uri = "http://#{@ip}:#{@port}"
29
35
 
30
36
  # Thread and time arrays
31
37
  @req_times = []
32
38
  @threads = []
39
+ @package_loss = 0
40
+ @package_rec = 0
33
41
  end
34
42
 
35
43
  def test
@@ -37,102 +45,172 @@ class Client < Application
37
45
  @threads << Thread.new do
38
46
  @each_count.times do
39
47
  # Raw root GET
40
- t = Time.now
41
- response = Curl.get(@uri)
42
- @req_times << Time.now - t
43
- if response.status == '200 OK'
44
- print '.'.green
45
- else
46
- print '!'.red
48
+ begin
49
+ t = Time.now
50
+ response = Curl.get(@uri) do |http|
51
+ http.timeout = @http_timeout
52
+ end
53
+ @req_times << Time.now - t
54
+ if response.status == '200 OK'
55
+ print '.'.green
56
+ else
57
+ print '!'.red
58
+ end
59
+ @package_rec += 1
60
+ rescue Curl::Err::TimeoutError
61
+ print '#'.yellow
62
+ @package_loss += 1
47
63
  end
48
64
 
49
65
  # Root POST with correct params
50
- t = Time.now
51
- response = Curl.post(@uri, { name: 'Oleg', github_nickname: 'sorefull' })
52
- @req_times << Time.now - t
53
- if response.status == '202 Accepted'
54
- print '.'.green
55
- else
56
- print '!'.red
66
+ begin
67
+ t = Time.now
68
+ response = Curl.post(@uri, { name: 'Oleg', github_nickname: 'sorefull' }) do |http|
69
+ http.timeout = @http_timeout
70
+ end
71
+ @req_times << Time.now - t
72
+ if response.status == '202 Accepted'
73
+ print '.'.green
74
+ else
75
+ print '!'.red
76
+ end
77
+ @package_rec += 1
78
+ rescue Curl::Err::TimeoutError
79
+ print '#'.yellow
80
+ @package_loss += 1
57
81
  end
58
82
 
59
83
  # Root POST with wrong params
60
- t = Time.now
61
- response = Curl.post(@uri, { name: '', github_nickname: '' })
62
- @req_times << Time.now - t
63
- if response.status == '401 Unauthorized'
64
- print '.'.green
65
- else
66
- print '!'.red
84
+ begin
85
+ t = Time.now
86
+ response = Curl.post(@uri, { name: '', github_nickname: '' }) do |http|
87
+ http.timeout = @http_timeout
88
+ end
89
+ @req_times << Time.now - t
90
+ if response.status == '401 Unauthorized'
91
+ print '.'.green
92
+ else
93
+ print '!'.red
94
+ end
95
+ @package_rec += 1
96
+ rescue Curl::Err::TimeoutError
97
+ print '#'.yellow
98
+ @package_loss += 1
67
99
  end
68
100
 
69
101
  # Lorem GET with body check
70
- t = Time.now
71
- response = Curl.get(@uri + '/lorem')
72
- @req_times << Time.now - t
73
- if response.body == LoremIpsum.lorem
74
- print '.'.green
75
- else
76
- print '!'.red
102
+ begin
103
+ t = Time.now
104
+ response = Curl.get(@uri + '/lorem') do |http|
105
+ http.timeout = @http_timeout
106
+ end
107
+ @req_times << Time.now - t
108
+ if response.body == LoremIpsum.lorem
109
+ print '.'.green
110
+ else
111
+ print '!'.red
112
+ end
113
+ @package_rec += 1
114
+ rescue Curl::Err::TimeoutError
115
+ print '#'.yellow
116
+ @package_loss += 1
77
117
  end
78
118
 
79
119
  # Lorem GET with params
80
- t = Time.now
81
- response = Curl.get(@uri + '/lorem', { length: 10 })
82
- @req_times << Time.now - t
83
- if response.body == LoremIpsum.lorem[0..10]
84
- print '.'.green
85
- else
86
- print '!'.red
120
+ begin
121
+ t = Time.now
122
+ response = Curl.get(@uri + '/lorem', { length: 10 }) do |http|
123
+ http.timeout = @http_timeout
124
+ end
125
+ @req_times << Time.now - t
126
+ if response.body == LoremIpsum.lorem[0..10]
127
+ print '.'.green
128
+ else
129
+ print '!'.red
130
+ end
131
+ @package_rec += 1
132
+ rescue Curl::Err::TimeoutError
133
+ print '#'.yellow
134
+ @package_loss += 1
87
135
  end
88
136
 
89
137
  # Cookie GET with correct cookies
138
+ begin
90
139
  t = Time.now
91
- response = Curl.get(@uri + '/cookie') do |http|
92
- http.headers['Cookie'] = 'private=asdfg; public=gijj'
93
- end
94
- @req_times << Time.now - t
95
- if response.status == '200 OK'
96
- print '.'.green
97
- else
98
- print '!'.red
140
+ response = Curl.get(@uri + '/cookie') do |http|
141
+ http.headers['Cookie'] = 'private=asdfg; public=gijj'
142
+ http.timeout = @http_timeout
143
+ end
144
+ @req_times << Time.now - t
145
+ if response.status == '200 OK'
146
+ print '.'.green
147
+ else
148
+ print '!'.red
149
+ end
150
+ @package_rec += 1
151
+ rescue Curl::Err::TimeoutError
152
+ print '#'.yellow
153
+ @package_loss += 1
99
154
  end
100
155
 
101
156
  # Cookie GET with wrong cookies
102
- t = Time.now
103
- response = Curl.get(@uri + '/cookie') do |http|
104
- http.headers['Cookie'] = 'private=wrong; public=wrong'
105
- end
106
- @req_times << Time.now - t
107
- if response.status == '401 Unauthorized'
108
- print '.'.green
109
- else
110
- print '!'.red
157
+ begin
158
+ t = Time.now
159
+ response = Curl.get(@uri + '/cookie') do |http|
160
+ http.headers['Cookie'] = 'private=wrong; public=wrong'
161
+ http.timeout = @http_timeout
162
+ end
163
+ @req_times << Time.now - t
164
+ if response.status == '401 Unauthorized'
165
+ print '.'.green
166
+ else
167
+ print '!'.red
168
+ end
169
+ @package_rec += 1
170
+ rescue Curl::Err::TimeoutError
171
+ print '#'.yellow
172
+ @package_loss += 1
111
173
  end
112
174
 
113
175
  # File GET
114
- file_name = '/file.txt'
115
- t = Time.now
116
- response = Curl.get(@uri + file_name)
117
- @req_times << Time.now - t
118
- file = File.open("#{__dir__}/../files#{file_name}", 'r')
119
- if response.body == file.read && response.status == '200 OK'
120
- print '.'.green
121
- else
122
- print '!'.red
176
+ begin
177
+ file_name = '/file.txt'
178
+ t = Time.now
179
+ response = Curl.get(@uri + file_name) do |http|
180
+ http.timeout = @http_timeout
181
+ end
182
+ @req_times << Time.now - t
183
+ file = File.open("#{__dir__}/../files#{file_name}", 'r')
184
+ if response.body == file.read && response.status == '200 OK'
185
+ print '.'.green
186
+ else
187
+ print '!'.red
188
+ end
189
+ @package_rec += 1
190
+ rescue Curl::Err::TimeoutError
191
+ print '#'.yellow
192
+ @package_loss += 1
123
193
  end
124
194
 
125
195
  # File POST
126
- file_name = 'image.jpeg'
127
- response = Curl::Easy.new(@uri + '/file')
128
- response.multipart_form_post = true
129
- t = Time.now
130
- response.http_post(Curl::PostField.file('uploaded_image', "#{__dir__}/../files/#{file_name}"))
131
- @req_times << Time.now - t
132
- if response.status == '200 OK'
133
- print '.'.green
134
- else
135
- print '!'.red
196
+ begin
197
+ file_name = 'image.jpeg'
198
+ response = Curl::Easy.new(@uri + '/file') do |http|
199
+ http.timeout = @http_timeout
200
+ end
201
+ response.multipart_form_post = true
202
+ t = Time.now
203
+ response.http_post(Curl::PostField.file('uploaded_image', "#{__dir__}/../files/#{file_name}"))
204
+ @req_times << Time.now - t
205
+ if response.status == '200 OK'
206
+ print '.'.green
207
+ else
208
+ print '!'.red
209
+ end
210
+ @package_rec += 1
211
+ rescue Curl::Err::TimeoutError
212
+ print '#'.yellow
213
+ @package_loss += 1
136
214
  end
137
215
  end
138
216
  end
@@ -142,7 +220,7 @@ class Client < Application
142
220
  @threads.each {|thread| thread.join}
143
221
  end
144
222
 
145
- def result
146
- @req_times
223
+ def send_results
224
+ Curl.post(@uri + '/exit', { results: @req_times.join(' '), package_loss: @package_loss, package_rec: @package_rec })
147
225
  end
148
226
  end
@@ -1,7 +1,9 @@
1
+ require "pry"
1
2
  require "application"
2
3
  require "webrick"
3
4
  include WEBrick
4
5
  require 'securerandom'
6
+ require 'usagewatch'
5
7
 
6
8
  class Server < Application
7
9
  class RootPath < WEBrick::HTTPServlet::AbstractServlet
@@ -49,6 +51,27 @@ class Server < Application
49
51
  end
50
52
  end
51
53
 
54
+ class ExitPath < WEBrick::HTTPServlet::AbstractServlet
55
+ def do_POST(request, response)
56
+ @@req_results = request.query['results'].split(' ').map{|r| r.to_f}
57
+ @@package_loss = request.query['package_loss'].to_i
58
+ @@package_rec = request.query['package_rec'].to_i
59
+ response.status = 200
60
+ end
61
+
62
+ def self.results
63
+ @@req_results ||= []
64
+ end
65
+
66
+ def self.loss
67
+ @@package_loss ||= 0
68
+ end
69
+
70
+ def self.rec
71
+ @@package_rec ||= 0
72
+ end
73
+ end
74
+
52
75
  def initialize
53
76
  print "Input Port of servrer: ".green
54
77
  @port = $stdin.gets.chomp
@@ -64,12 +87,58 @@ class Server < Application
64
87
  @server.mount "/cookie", CookiePath
65
88
  @server.mount "/file", FilePath
66
89
  @server.mount('/file.txt', WEBrick::HTTPServlet::DefaultFileHandler, "#{__dir__}/../files/file.txt")
90
+ @server.mount '/exit', ExitPath
67
91
  end
68
92
 
69
93
  def start
94
+ @usw = Usagewatch
95
+ @new0 = @usw.bandrx
96
+ @time0 = Time.now
97
+
70
98
  ['TERM', 'INT'].each do |signal|
71
- trap(signal){ @server.shutdown }
99
+ trap(signal){
100
+ @server.shutdown
101
+ statistics
102
+ }
72
103
  end
73
104
  @server.start
74
105
  end
106
+
107
+ def statistics
108
+ new1 = @usw.bandrx
109
+ time1 = Time.now
110
+
111
+ bytesreceived = new1[0].to_i - @new0[0].to_i
112
+ bitsreceived = bytesreceived * 8
113
+ bandwidth = (bitsreceived.to_f / 1024 / 1024).round(3)
114
+ time = (time1 - @time0).round(3)
115
+ sum_req_times = ExitPath.results.sum.round(3)
116
+ package_loss = ExitPath.loss
117
+ package_rec = ExitPath.rec
118
+ average_req_times = begin
119
+ if ExitPath.results.empty?
120
+ 0
121
+ else
122
+ (ExitPath.results.inject{ |sum, el| sum + el } / ExitPath.results.size).round(3)
123
+ end
124
+ end
125
+ bandwidth_per_time = (bandwidth / time).round(3)
126
+
127
+ puts
128
+ puts '------------------------------------------------------------------'.green
129
+ puts "~> AMBIDEXTER's SUMMARY".yellow
130
+ puts
131
+ puts "#{time} seconds Server sesion time".yellow
132
+ puts "#{bandwidth} Mbit Current Bandwidth Received".yellow
133
+ puts "#{bandwidth_per_time} Mbit/s Average Bandwidth Received".yellow
134
+ puts "#{sum_req_times} seconds Summary request time".yellow
135
+ puts "#{average_req_times} seconds Average request time".yellow
136
+ if package_loss > 0
137
+ puts "#{package_loss} Packages lost".red
138
+ end
139
+ puts "#{package_rec} Packages received".yellow
140
+ puts
141
+ puts "Made by Oleg Cherednichenko 2017, KNURE".rjust 66
142
+ puts '------------------------------------------------------------------'.green
143
+ end
75
144
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ambidexter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Cherednichenko
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.8.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: usagewatch
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.7
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.4
41
69
  description: Ambidexter hands two hands and will give bouth to help you in testing
42
70
  your network for HTTP stuff
43
71
  email: olegh.cherednichenko@gmail.com
@@ -72,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
100
  version: '0'
73
101
  requirements: []
74
102
  rubyforge_project:
75
- rubygems_version: 2.5.1
103
+ rubygems_version: 2.6.8
76
104
  signing_key:
77
105
  specification_version: 4
78
106
  summary: Gem for testing network for HTML stuff