ambidexter 0.0.6 → 0.0.7

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 (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