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