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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55d8ad59a06d925a76c6a9a5097034ff454bf0f9c60ec1d1fd3c4cc2abd70fd5
4
- data.tar.gz: 96160eb37e01c31d0c0b2eabc79e521ec0795b9ca07da20acd41aef2c35ff4c1
3
+ metadata.gz: d0ddae132c5759e03856c57ef9ee506a88baabb09696808367c00460717931c7
4
+ data.tar.gz: 3d56192d309f05170919119ce85884e7e4f3a988a34476b3a9fa95d7e77c82b5
5
5
  SHA512:
6
- metadata.gz: 751405ec1d2fff2afdf5b742569527b95758998b4d0c64e42324cf79541ab6a56e12bd83ad963b15598cd9fcf5f928e3b9c39561875cb6e5a159e97a274ddf7e
7
- data.tar.gz: 5da842bfbcde57f40acd8bd2d72b0d780f667cc94900a0ca2c7517d9f1e6549049b09859550a76bc17d6ba0bb4fc34074efb81756ea69aaa74b9219a7930d5d4
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
- * download_runs - The number of attempts to download each file
28
- * upload_runs - The number of attempts to upload each file
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
- * download_sizes - an array of .jpg dimensions (must be one or more of `[350, 500, 750, 1000, 1500, 2000, 2500, 3000, 3500, 4000]`)
31
- * upload_sizes
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
- test = Speedtest::Test.new(
36
- download_runs: 4,
37
- upload_runs: 4,
38
- ping_runs: 4,
39
- download_sizes: [750, 1500],
40
- upload_sizes: [10000, 400000],
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
  ```
@@ -0,0 +1,11 @@
1
+ module Speedtest
2
+ module Logging
3
+ def log(msg)
4
+ @logger.debug msg if @logger
5
+ end
6
+
7
+ def error(msg)
8
+ @logger.error msg if @logger
9
+ end
10
+ end
11
+ end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Speedtest
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
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
- @num_transfers_padding = options[:num_transfers_padding] || 5
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
- futures_ring = Ring.new(@num_threads + @num_transfers_padding)
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(@num_threads + @num_transfers_padding).each do |i|
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
- futures_ring = Ring.new(@num_threads + @num_transfers_padding)
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(@num_threads + @num_transfers_padding).each do |i|
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
- }}.sort_by { |x| x[:latency] }
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.1
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