plr-speedtest 0.3.1 → 0.3.2
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.
- 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
|