speedtest_net 0.5.0 → 0.7.0
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/.github/dependabot.yml +10 -0
- data/.github/workflows/ruby.yml +5 -6
- data/bin/console +4 -4
- data/lib/speedtest_net.rb +9 -9
- data/lib/speedtest_net/config.rb +1 -3
- data/lib/speedtest_net/download.rb +2 -1
- data/lib/speedtest_net/error.rb +1 -0
- data/lib/speedtest_net/latency.rb +2 -1
- data/lib/speedtest_net/result.rb +2 -2
- data/lib/speedtest_net/server.rb +20 -8
- data/lib/speedtest_net/upload.rb +10 -7
- data/lib/speedtest_net/user_agent.rb +5 -0
- data/lib/speedtest_net/version.rb +1 -1
- data/renovate.json +5 -0
- data/speedtest_net.gemspec +3 -3
- metadata +27 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed21ac6a96ef110554941966993ee911a4062090216400207534c59afcc5b383
|
4
|
+
data.tar.gz: 466c522ae2b60cd187a5d7b98b023db50bfa8f9834e55a01979879de154a3e34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 838e4b7eb05e59234e650c6d807c985a236467bf89af5a440df795febe66e6c211026b54f5ecd6019e41bed08e6b50e61ea9de1fc5f4b2ad6f4ade54ec6f55e9
|
7
|
+
data.tar.gz: 51d43777a2d506eb2092e1b77fd1de923881e4ba0fabe727a09b7da8dea1a0112bdd78ea3af2cd89f4072de352a0667b6ff4799e19110923ce34afd05c4270dd
|
data/.github/workflows/ruby.yml
CHANGED
@@ -19,10 +19,10 @@ jobs:
|
|
19
19
|
runs-on: ubuntu-latest
|
20
20
|
steps:
|
21
21
|
- uses: actions/checkout@master
|
22
|
-
- name: Setup Ruby 2.
|
23
|
-
uses:
|
22
|
+
- name: Setup Ruby 2.7
|
23
|
+
uses: ruby/setup-ruby@master
|
24
24
|
with:
|
25
|
-
ruby-version: 2.
|
25
|
+
ruby-version: 2.7
|
26
26
|
- name: Run rubocop
|
27
27
|
run: |
|
28
28
|
gem install rubocop rubocop-rspec
|
@@ -32,14 +32,13 @@ jobs:
|
|
32
32
|
runs-on: ubuntu-latest
|
33
33
|
strategy:
|
34
34
|
matrix:
|
35
|
-
ruby: [
|
35
|
+
ruby: [ 2.5, 2.6, 2.7, 'ruby-head' ]
|
36
36
|
steps:
|
37
37
|
- uses: actions/checkout@master
|
38
38
|
- name: Setup Ruby
|
39
|
-
uses:
|
39
|
+
uses: ruby/setup-ruby@master
|
40
40
|
with:
|
41
41
|
ruby-version: ${{ matrix.ruby }}
|
42
|
-
architecture: 'x64'
|
43
42
|
- name: Run apt-get
|
44
43
|
run: |
|
45
44
|
sudo apt-get update
|
data/bin/console
CHANGED
@@ -8,8 +8,8 @@ require 'speedtest_net'
|
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
9
9
|
|
10
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
require 'pry'
|
12
|
-
Pry.start
|
11
|
+
# require 'pry'
|
12
|
+
# Pry.start
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
require 'irb'
|
15
|
+
IRB.start(__FILE__)
|
data/lib/speedtest_net.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'speedtest_net/version'
|
4
|
+
require 'speedtest_net/user_agent'
|
4
5
|
require 'speedtest_net/server'
|
5
6
|
require 'speedtest_net/download'
|
6
7
|
require 'speedtest_net/upload'
|
7
8
|
require 'speedtest_net/result'
|
8
9
|
|
9
10
|
module SpeedtestNet
|
10
|
-
def self.run
|
11
|
-
config =
|
12
|
-
server =
|
13
|
-
download_results =
|
14
|
-
upload_results =
|
11
|
+
def self.run(id = nil, exclude_server_ids: [])
|
12
|
+
config = Config.fetch
|
13
|
+
server = Server.select_server(id, exclude_server_ids)
|
14
|
+
download_results = Download.measure(server)
|
15
|
+
upload_results = Upload.measure(server)
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
upload_results)
|
17
|
+
Config.clear_cache
|
18
|
+
Result.new(config.client, server, download_results, upload_results)
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.list_server
|
22
|
-
|
22
|
+
Server.list
|
23
23
|
end
|
24
24
|
end
|
data/lib/speedtest_net/config.rb
CHANGED
@@ -48,9 +48,7 @@ module SpeedtestNet
|
|
48
48
|
client.follow_location = true
|
49
49
|
client.perform
|
50
50
|
|
51
|
-
if client.response_code != 200
|
52
|
-
raise HTTPDownloadError, 'Config download error'
|
53
|
-
end
|
51
|
+
raise HTTPDownloadError, 'Config download error' if client.response_code != 200
|
54
52
|
|
55
53
|
xml = REXML::Document.new(client.body, ignore_whitespace_nodes: :all)
|
56
54
|
xml.elements
|
@@ -12,7 +12,7 @@ module SpeedtestNet
|
|
12
12
|
|
13
13
|
class << self
|
14
14
|
def measure(server)
|
15
|
-
config =
|
15
|
+
config = Config.fetch
|
16
16
|
concurrent_number = config.download[:threadsperurl]
|
17
17
|
|
18
18
|
results = FILES.map do |file|
|
@@ -37,6 +37,7 @@ module SpeedtestNet
|
|
37
37
|
multi = Curl::Multi.new
|
38
38
|
urls.each do |url|
|
39
39
|
client = Curl::Easy.new(url)
|
40
|
+
client.headers['User-Agent'] = USER_AGENT
|
40
41
|
client.on_complete { |data| responses << data }
|
41
42
|
multi.add(client)
|
42
43
|
end
|
data/lib/speedtest_net/error.rb
CHANGED
@@ -11,7 +11,7 @@ module SpeedtestNet
|
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def measure(server)
|
14
|
-
config =
|
14
|
+
config = Config.fetch
|
15
15
|
test_length = test_length(config)
|
16
16
|
timeout = config.latency[:timeout]
|
17
17
|
|
@@ -35,6 +35,7 @@ module SpeedtestNet
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def measure_latency(url, timeout)
|
38
|
+
Typhoeus::Config.user_agent = SpeedtestNet::USER_AGENT
|
38
39
|
client = Typhoeus::Request.new(url, followlocation: true,
|
39
40
|
timeout: timeout)
|
40
41
|
client.run
|
data/lib/speedtest_net/result.rb
CHANGED
@@ -16,7 +16,7 @@ module SpeedtestNet
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def download
|
19
|
-
|
19
|
+
CalculateSpeed.call(@download_results)
|
20
20
|
end
|
21
21
|
|
22
22
|
def pretty_download
|
@@ -24,7 +24,7 @@ module SpeedtestNet
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def upload
|
27
|
-
|
27
|
+
CalculateSpeed.call(@upload_results)
|
28
28
|
end
|
29
29
|
|
30
30
|
def pretty_upload
|
data/lib/speedtest_net/server.rb
CHANGED
@@ -26,7 +26,7 @@ module SpeedtestNet
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def measure_latency
|
29
|
-
@latency =
|
29
|
+
@latency = Latency.measure(self)
|
30
30
|
end
|
31
31
|
|
32
32
|
class << self
|
@@ -38,9 +38,16 @@ module SpeedtestNet
|
|
38
38
|
servers.sort_by { |s| [s.distance, s.id] }
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
41
|
+
def select_server(id = nil, exclude_server_ids = [])
|
42
|
+
id.nil? ? best_server(exclude_server_ids) : pick_server(id)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def best_server(exclude_server_ids)
|
42
48
|
servers = list
|
43
|
-
|
49
|
+
excluded_servers = servers.reject { |server| exclude_server_ids.include?(server.id) }
|
50
|
+
closest_servers = excluded_servers.first(10)
|
44
51
|
closest_servers.each(&:measure_latency)
|
45
52
|
sorted_servers = closest_servers.sort_by do |s|
|
46
53
|
[s.latency, s.distance, s.id]
|
@@ -48,10 +55,17 @@ module SpeedtestNet
|
|
48
55
|
sorted_servers.first
|
49
56
|
end
|
50
57
|
|
51
|
-
|
58
|
+
def pick_server(id)
|
59
|
+
servers = list
|
60
|
+
server = servers.find { |s| s.id == id }
|
61
|
+
raise InvalidServerIdError if server.nil?
|
62
|
+
|
63
|
+
server.measure_latency
|
64
|
+
server
|
65
|
+
end
|
52
66
|
|
53
67
|
def create_instance(server)
|
54
|
-
config =
|
68
|
+
config = Config.fetch
|
55
69
|
url = server['url2'] || server['url']
|
56
70
|
|
57
71
|
geo = Geo.new(server['lat'].to_f, server['lon'].to_f)
|
@@ -65,9 +79,7 @@ module SpeedtestNet
|
|
65
79
|
client.follow_location = true
|
66
80
|
client.perform
|
67
81
|
|
68
|
-
if client.response_code != 200
|
69
|
-
raise HTTPDownloadError, 'Server lists download error'
|
70
|
-
end
|
82
|
+
raise HTTPDownloadError, 'Server lists download error' if client.response_code != 200
|
71
83
|
|
72
84
|
xml = REXML::Document.new(client.body, ignore_whitespace_nodes: :all)
|
73
85
|
xml.elements['settings/servers']
|
data/lib/speedtest_net/upload.rb
CHANGED
@@ -10,7 +10,7 @@ module SpeedtestNet
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
def measure(server)
|
13
|
-
config =
|
13
|
+
config = Config.fetch
|
14
14
|
concurrent_number = config.upload[:threadsperurl]
|
15
15
|
|
16
16
|
results = SIZE.map do |size|
|
@@ -29,15 +29,18 @@ module SpeedtestNet
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def multi_uploader(urls, size)
|
32
|
+
def multi_uploader(urls, size) # rubocop:disable Metrics/MethodLength
|
33
33
|
responses = []
|
34
34
|
content = 'A' * size
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
multi = Curl::Multi.new
|
36
|
+
urls.each do |url|
|
37
|
+
client = Curl::Easy.new(url)
|
38
|
+
client.headers['User-Agent'] = USER_AGENT
|
39
|
+
client.http_post(Curl::PostField.content('content1', content))
|
40
|
+
client.on_complete { |data| responses << data }
|
41
|
+
multi.add(client)
|
40
42
|
end
|
43
|
+
multi.perform
|
41
44
|
responses.map(&:upload_speed).sum * 8
|
42
45
|
end
|
43
46
|
end
|
data/speedtest_net.gemspec
CHANGED
@@ -32,16 +32,16 @@ Gem::Specification.new do |spec|
|
|
32
32
|
|
33
33
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
34
34
|
spec.add_development_dependency 'codacy-coverage', '~> 2.1'
|
35
|
-
spec.add_development_dependency 'factory_bot', '~>
|
36
|
-
spec.add_development_dependency 'pry', '~> 0.12'
|
35
|
+
spec.add_development_dependency 'factory_bot', '~> 6.0'
|
37
36
|
spec.add_development_dependency 'rake', '~> 13.0'
|
38
37
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
39
38
|
spec.add_development_dependency 'rubocop', '~> 0.76'
|
40
39
|
spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
|
41
40
|
spec.add_development_dependency 'simplecov', '~> 0.17'
|
42
|
-
spec.add_development_dependency 'vcr', '~>
|
41
|
+
spec.add_development_dependency 'vcr', '~> 6.0'
|
43
42
|
spec.add_development_dependency 'webmock', '~> 3.7'
|
44
43
|
|
45
44
|
spec.add_dependency 'curb', '~> 0.9'
|
45
|
+
spec.add_dependency 'rexml', '~> 3.2'
|
46
46
|
spec.add_dependency 'typhoeus', '~> 1.3'
|
47
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: speedtest_net
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakano
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,28 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '6.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
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.12'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.12'
|
54
|
+
version: '6.0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +128,14 @@ dependencies:
|
|
142
128
|
requirements:
|
143
129
|
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
131
|
+
version: '6.0'
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
136
|
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
138
|
+
version: '6.0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: webmock
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +164,20 @@ dependencies:
|
|
178
164
|
- - "~>"
|
179
165
|
- !ruby/object:Gem::Version
|
180
166
|
version: '0.9'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rexml
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.2'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.2'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: typhoeus
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,6 +199,7 @@ executables: []
|
|
199
199
|
extensions: []
|
200
200
|
extra_rdoc_files: []
|
201
201
|
files:
|
202
|
+
- ".github/dependabot.yml"
|
202
203
|
- ".github/workflows/ruby.yml"
|
203
204
|
- ".gitignore"
|
204
205
|
- ".rspec"
|
@@ -221,7 +222,9 @@ files:
|
|
221
222
|
- lib/speedtest_net/result.rb
|
222
223
|
- lib/speedtest_net/server.rb
|
223
224
|
- lib/speedtest_net/upload.rb
|
225
|
+
- lib/speedtest_net/user_agent.rb
|
224
226
|
- lib/speedtest_net/version.rb
|
227
|
+
- renovate.json
|
225
228
|
- speedtest_net.gemspec
|
226
229
|
homepage: https://github.com/ryonkn/speedtest_net
|
227
230
|
licenses:
|
@@ -230,7 +233,7 @@ metadata:
|
|
230
233
|
homepage_uri: https://github.com/ryonkn/speedtest_net
|
231
234
|
source_code_uri: https://github.com/ryonkn/speedtest_net
|
232
235
|
changelog_uri: https://github.com/ryonkn/speedtest_net
|
233
|
-
post_install_message:
|
236
|
+
post_install_message:
|
234
237
|
rdoc_options: []
|
235
238
|
require_paths:
|
236
239
|
- lib
|
@@ -245,8 +248,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
248
|
- !ruby/object:Gem::Version
|
246
249
|
version: '0'
|
247
250
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
249
|
-
signing_key:
|
251
|
+
rubygems_version: 3.1.2
|
252
|
+
signing_key:
|
250
253
|
specification_version: 4
|
251
254
|
summary: Library for testing internet bandwidth using speedtest.net
|
252
255
|
test_files: []
|