plr-speedtest 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -11
- data/lib/speedtest/logging.rb +11 -0
- data/lib/speedtest/transfer_worker.rb +1 -6
- data/lib/speedtest/version.rb +1 -1
- data/lib/speedtest.rb +17 -17
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0ddae132c5759e03856c57ef9ee506a88baabb09696808367c00460717931c7
|
4
|
+
data.tar.gz: 3d56192d309f05170919119ce85884e7e4f3a988a34476b3a9fa95d7e77c82b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1f22c27c463f286cada30d926683a4b318e989cc4d1f9aaeb1bb31b2ef9388952b2d02a09046d53a1f2471a001c48d7139c937c4bc0e4392b2567ce9f7343bb
|
7
|
+
data.tar.gz: e3173ba212eff79ee42fe75b1fcb77cb608dddf452e57faaf3ea834f97367d8694c3f0b852393c9afd2fa56e5f989aeafc113a6524d1da2d319e5a3ae8d27d8e
|
data/README.md
CHANGED
@@ -24,21 +24,20 @@ require 'speedtest'
|
|
24
24
|
```
|
25
25
|
|
26
26
|
Configure a new test with whatever options you want—all are optional:
|
27
|
-
*
|
28
|
-
*
|
27
|
+
* minimum_transfer_secs - The transfers will continue for at least that many seconds
|
28
|
+
* num_threads - The number of threads to perform the transfers in parallel
|
29
29
|
* ping_runs - The number of ping attempts to establish latency
|
30
|
-
*
|
31
|
-
*
|
30
|
+
* download_size - jpg dimensions (must be one or more of `[350, 500, 750, 1000, 1500, 2000, 2500, 3000, 3500, 4000]`)
|
31
|
+
* upload_size - Size of the randomly generated file in bytes
|
32
32
|
* logger
|
33
33
|
|
34
34
|
```ruby
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
logger: Logger.new(STDOUT)
|
35
|
+
speedtest = Speedtest::Test.new(min_transfer_secs: 5,
|
36
|
+
download_size: 500,
|
37
|
+
upload_size: 10_000,
|
38
|
+
num_threads: 4,
|
39
|
+
logger: Logger.new(STDOUT),
|
40
|
+
skip_servers: "http://www.github.com")
|
42
41
|
)
|
43
42
|
=> #<Speedtest::Test:0x007fac5ac9dca0 @download_runs=4, @upload_runs=4, @ping_runs=4, @download_sizes=[750, 1500], @upload_sizes=[10000, 400000], @debug=true>
|
44
43
|
```
|
@@ -3,17 +3,13 @@ require 'celluloid/current'
|
|
3
3
|
module Speedtest
|
4
4
|
class TransferWorker
|
5
5
|
include Celluloid
|
6
|
+
include Logging
|
6
7
|
|
7
8
|
def initialize(url, logger)
|
8
9
|
@url = url
|
9
10
|
@logger = logger
|
10
11
|
end
|
11
12
|
|
12
|
-
def log(msg)
|
13
|
-
return unless @logger
|
14
|
-
@logger.debug msg
|
15
|
-
end
|
16
|
-
|
17
13
|
def download
|
18
14
|
log " downloading: #{@url}"
|
19
15
|
status = ThreadStatus.new(false, 0)
|
@@ -32,7 +28,6 @@ module Speedtest
|
|
32
28
|
status = ThreadStatus.new(false, 0)
|
33
29
|
|
34
30
|
page = HTTParty.post(@url, :body => { "content" => content }, timeout: 10)
|
35
|
-
log "upload response body = [#{page.body}]"
|
36
31
|
unless page.code / 100 == 2
|
37
32
|
error "GET #{@url} failed with code #{page.code}"
|
38
33
|
status.error = true
|
data/lib/speedtest/version.rb
CHANGED
data/lib/speedtest.rb
CHANGED
@@ -2,6 +2,7 @@ require 'httparty'
|
|
2
2
|
|
3
3
|
require_relative 'speedtest/result'
|
4
4
|
require_relative 'speedtest/geo_point'
|
5
|
+
require_relative 'speedtest/logging'
|
5
6
|
require_relative 'speedtest/transfer_worker'
|
6
7
|
require_relative 'speedtest/ring'
|
7
8
|
|
@@ -9,6 +10,7 @@ module Speedtest
|
|
9
10
|
ThreadStatus = Struct.new(:error, :size)
|
10
11
|
|
11
12
|
class Test
|
13
|
+
include Logging
|
12
14
|
|
13
15
|
class FailedTransfer < StandardError; end
|
14
16
|
|
@@ -21,11 +23,8 @@ module Speedtest
|
|
21
23
|
@download_size = options[:download_size] || 4000
|
22
24
|
@upload_size = options[:upload_size] || 1_000_000
|
23
25
|
@logger = options[:logger]
|
24
|
-
@
|
26
|
+
@skip_servers = options[:skip_servers] || []
|
25
27
|
|
26
|
-
if @num_transfers_padding > @num_threads
|
27
|
-
@num_transfers_padding = @num_threads
|
28
|
-
end
|
29
28
|
@ping_runs = 2 if @ping_runs < 2
|
30
29
|
end
|
31
30
|
|
@@ -59,14 +58,6 @@ module Speedtest
|
|
59
58
|
"%.2f #{units[i]}" % speed
|
60
59
|
end
|
61
60
|
|
62
|
-
def log(msg)
|
63
|
-
@logger.debug msg if @logger
|
64
|
-
end
|
65
|
-
|
66
|
-
def error(msg)
|
67
|
-
@logger.error msg if @logger
|
68
|
-
end
|
69
|
-
|
70
61
|
def download_url(server_root)
|
71
62
|
"#{server_root}/speedtest/random#{@download_size}x#{@download_size}.jpg"
|
72
63
|
end
|
@@ -75,10 +66,11 @@ module Speedtest
|
|
75
66
|
log "\nstarting download tests:"
|
76
67
|
|
77
68
|
start_time = Time.now
|
78
|
-
|
69
|
+
ring_size = @num_threads * 2
|
70
|
+
futures_ring = Ring.new(ring_size)
|
79
71
|
download_url = download_url(@server_root)
|
80
72
|
pool = TransferWorker.pool(size: @num_threads, args: [download_url, @logger])
|
81
|
-
1.upto(
|
73
|
+
1.upto(ring_size).each do |i|
|
82
74
|
futures_ring.append(pool.future.download)
|
83
75
|
end
|
84
76
|
|
@@ -114,10 +106,11 @@ module Speedtest
|
|
114
106
|
|
115
107
|
start_time = Time.now
|
116
108
|
|
117
|
-
|
109
|
+
ring_size = @num_threads * 2
|
110
|
+
futures_ring = Ring.new(ring_size)
|
118
111
|
upload_url = upload_url(@server_root)
|
119
112
|
pool = TransferWorker.pool(size: @num_threads, args: [upload_url, @logger])
|
120
|
-
1.upto(
|
113
|
+
1.upto(ring_size).each do |i|
|
121
114
|
futures_ring.append(pool.future.upload(data))
|
122
115
|
end
|
123
116
|
|
@@ -158,8 +151,15 @@ module Speedtest
|
|
158
151
|
{
|
159
152
|
:latency => ping(x[:url]),
|
160
153
|
:url => x[:url]
|
161
|
-
}
|
154
|
+
}
|
155
|
+
}.sort_by { |x| x[:latency] }
|
162
156
|
|
157
|
+
latency_sorted_servers.reject! do |s|
|
158
|
+
if @skip_servers.include?(s[:url])
|
159
|
+
log "Skipping #{s}"
|
160
|
+
true
|
161
|
+
end
|
162
|
+
end
|
163
163
|
|
164
164
|
selected = latency_sorted_servers.detect { |s| validate_server_transfer(s[:url]) }
|
165
165
|
log "Automatically selected server: #{selected[:url]} - #{selected[:latency]} ms"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plr-speedtest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pete Myron
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- Rakefile
|
114
114
|
- lib/speedtest.rb
|
115
115
|
- lib/speedtest/geo_point.rb
|
116
|
+
- lib/speedtest/logging.rb
|
116
117
|
- lib/speedtest/result.rb
|
117
118
|
- lib/speedtest/ring.rb
|
118
119
|
- lib/speedtest/transfer_worker.rb
|