speedtest_net 0.9.1 → 0.9.3
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/.rubocop.yml +3 -2
- data/Gemfile +3 -1
- data/lib/speedtest_net/download.rb +2 -10
- data/lib/speedtest_net/measure_result.rb +26 -0
- data/lib/speedtest_net/result.rb +5 -5
- data/lib/speedtest_net/upload.rb +4 -12
- data/lib/speedtest_net/user_agent.rb +1 -1
- data/lib/speedtest_net/version.rb +1 -1
- metadata +13 -15
- data/.github/dependabot.yml +0 -10
- data/.github/workflows/ruby.yml +0 -61
- data/.gitignore +0 -13
- data/.travis.yml +0 -7
- data/lib/speedtest_net/calculate_speed.rb +0 -31
- data/speedtest_net.gemspec +0 -38
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 51cc1e86cecab279d17dcff636fefcfd636d62238683981bcba817f92425735c
|
|
4
|
+
data.tar.gz: 37de835de5541088678f101026bc9272b8ccfe95283d955f6ae6f48ec5e5d6dc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 02a5eda90b95c2a2537a3b8270dafd3814fd187233389b66afb040a284856bf978dc25a1049cdcf2a0ef25988a09a773b1876b81c2aed3b01201e2a82c039d2c
|
|
7
|
+
data.tar.gz: 0cf8d0e602701b79c0c7eff33cba299f41e5605beb1f139f40de917d424208dfca1b8a5998f58ce0a7b846cfd1eb20ad2cdfa0db4d255a294f0dd3971cf30930
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -5,14 +5,16 @@ source 'https://rubygems.org'
|
|
|
5
5
|
# Specify your gem's dependencies in speedtest_net.gemspec
|
|
6
6
|
gemspec
|
|
7
7
|
|
|
8
|
-
gem 'codacy-coverage', '>= 2.1'
|
|
9
8
|
gem 'factory_bot', '>= 6.0'
|
|
9
|
+
gem 'irb', '>= 1.6.0'
|
|
10
10
|
gem 'rake', '>= 13.0'
|
|
11
11
|
gem 'rspec', '>= 3.0'
|
|
12
12
|
gem 'rubocop', '>= 1.0.0'
|
|
13
|
+
gem 'rubocop-factory_bot', '>= 2.23'
|
|
13
14
|
gem 'rubocop-performance', '>= 1.11.4'
|
|
14
15
|
gem 'rubocop-rake', '>= 0.6.0'
|
|
15
16
|
gem 'rubocop-rspec', '>= 1.44.1'
|
|
16
17
|
gem 'simplecov', '>= 0.17'
|
|
18
|
+
gem 'simplecov-cobertura', '>= 3.1.0'
|
|
17
19
|
gem 'vcr', '>= 6.0'
|
|
18
20
|
gem 'webmock', '>= 3.7'
|
|
@@ -4,8 +4,8 @@ require 'curb'
|
|
|
4
4
|
require 'securerandom'
|
|
5
5
|
require 'timeout'
|
|
6
6
|
require 'pathname'
|
|
7
|
-
require 'speedtest_net/calculate_speed'
|
|
8
7
|
require 'speedtest_net/http_timeout'
|
|
8
|
+
require 'speedtest_net/measure_result'
|
|
9
9
|
|
|
10
10
|
module SpeedtestNet
|
|
11
11
|
class Download
|
|
@@ -13,14 +13,6 @@ module SpeedtestNet
|
|
|
13
13
|
random1500x1500.jpg random2000x2000.jpg random3000x3000.jpg
|
|
14
14
|
random3500x3500.jpg random4000x4000.jpg].freeze
|
|
15
15
|
|
|
16
|
-
def initialize(results)
|
|
17
|
-
@results = results
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def calculate
|
|
21
|
-
CalculateSpeed.call(@results)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
16
|
class << self
|
|
25
17
|
def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
|
|
26
18
|
config = Config.fetch
|
|
@@ -36,7 +28,7 @@ module SpeedtestNet
|
|
|
36
28
|
end
|
|
37
29
|
rescue Timeout::Error # rubocop:disable Lint/SuppressedException
|
|
38
30
|
end
|
|
39
|
-
new(results)
|
|
31
|
+
MeasureResult.new(results)
|
|
40
32
|
end
|
|
41
33
|
|
|
42
34
|
private
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SpeedtestNet
|
|
4
|
+
class MeasureResult
|
|
5
|
+
def initialize(results = [])
|
|
6
|
+
@results = results.select { |result| result.instance_of?(Integer) || result.instance_of?(Float) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def calculate
|
|
10
|
+
return 0.0 if @results.empty?
|
|
11
|
+
|
|
12
|
+
# Fastest 10% and slowest 30% of results are then discarded
|
|
13
|
+
# See: https://support.ookla.com/hc/en-us/articles/234575828-What-is-the-test-flow-and-methodology-for-the-Speedtest-
|
|
14
|
+
sorted_results = @results.sort
|
|
15
|
+
count = sorted_results.size
|
|
16
|
+
|
|
17
|
+
faster = count - (count * 0.1).round # fastest 10%
|
|
18
|
+
slower = (count * 0.3).round # slowest 30%
|
|
19
|
+
target_results = sorted_results[slower...faster]
|
|
20
|
+
|
|
21
|
+
# The remaining result are averaged together to determine
|
|
22
|
+
# the final result
|
|
23
|
+
target_results.sum.to_f / target_results.count
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/speedtest_net/result.rb
CHANGED
|
@@ -8,15 +8,15 @@ module SpeedtestNet
|
|
|
8
8
|
class Result
|
|
9
9
|
attr_reader :client, :server
|
|
10
10
|
|
|
11
|
-
def initialize(client, server,
|
|
11
|
+
def initialize(client, server, download_result, upload_result)
|
|
12
12
|
@client = client
|
|
13
13
|
@server = server
|
|
14
|
-
@
|
|
15
|
-
@
|
|
14
|
+
@download_result = download_result
|
|
15
|
+
@upload_result = upload_result
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def download
|
|
19
|
-
@
|
|
19
|
+
@download_result.calculate
|
|
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
|
+
@upload_result.calculate
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def pretty_upload
|
data/lib/speedtest_net/upload.rb
CHANGED
|
@@ -3,22 +3,14 @@
|
|
|
3
3
|
require 'curb'
|
|
4
4
|
require 'securerandom'
|
|
5
5
|
require 'timeout'
|
|
6
|
-
require 'speedtest_net/calculate_speed'
|
|
7
6
|
require 'speedtest_net/http_timeout'
|
|
7
|
+
require 'speedtest_net/measure_result'
|
|
8
8
|
|
|
9
9
|
module SpeedtestNet
|
|
10
10
|
class Upload
|
|
11
11
|
SIZE = [250_000, 500_000, 1_000_000, 2_000_000, 4_000_000, 8_000_000,
|
|
12
12
|
12_000_000, 17_000_000, 24_000_000, 32_000_000].freeze
|
|
13
13
|
|
|
14
|
-
def initialize(results)
|
|
15
|
-
@results = results
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def calculate
|
|
19
|
-
CalculateSpeed.call(@results)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
14
|
class << self
|
|
23
15
|
def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
|
|
24
16
|
config = Config.fetch
|
|
@@ -34,7 +26,7 @@ module SpeedtestNet
|
|
|
34
26
|
end
|
|
35
27
|
rescue Timeout::Error # rubocop:disable Lint/SuppressedException
|
|
36
28
|
end
|
|
37
|
-
new(results)
|
|
29
|
+
MeasureResult.new(results)
|
|
38
30
|
end
|
|
39
31
|
|
|
40
32
|
private
|
|
@@ -48,12 +40,12 @@ module SpeedtestNet
|
|
|
48
40
|
|
|
49
41
|
def multi_uploader(urls, size) # rubocop:disable Metrics/MethodLength
|
|
50
42
|
responses = []
|
|
51
|
-
|
|
43
|
+
post_field = "content1=#{'A' * size}"
|
|
52
44
|
multi = Curl::Multi.new
|
|
53
45
|
urls.each do |url|
|
|
54
46
|
client = Curl::Easy.new(url)
|
|
55
47
|
client.headers['User-Agent'] = USER_AGENT
|
|
56
|
-
client.http_post(
|
|
48
|
+
client.http_post(post_field)
|
|
57
49
|
client.on_complete { |data| responses << data }
|
|
58
50
|
multi.add(client)
|
|
59
51
|
end
|
metadata
CHANGED
|
@@ -1,29 +1,34 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: speedtest_net
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryo Nakano
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: curb
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
|
-
- - "
|
|
16
|
+
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
18
|
version: '0.9'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '2.0'
|
|
20
22
|
type: :runtime
|
|
21
23
|
prerelease: false
|
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
25
|
requirements:
|
|
24
|
-
- - "
|
|
26
|
+
- - ">="
|
|
25
27
|
- !ruby/object:Gem::Version
|
|
26
28
|
version: '0.9'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '2.0'
|
|
27
32
|
- !ruby/object:Gem::Dependency
|
|
28
33
|
name: rexml
|
|
29
34
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -59,12 +64,8 @@ executables: []
|
|
|
59
64
|
extensions: []
|
|
60
65
|
extra_rdoc_files: []
|
|
61
66
|
files:
|
|
62
|
-
- ".github/dependabot.yml"
|
|
63
|
-
- ".github/workflows/ruby.yml"
|
|
64
|
-
- ".gitignore"
|
|
65
67
|
- ".rspec"
|
|
66
68
|
- ".rubocop.yml"
|
|
67
|
-
- ".travis.yml"
|
|
68
69
|
- CODE_OF_CONDUCT.md
|
|
69
70
|
- Gemfile
|
|
70
71
|
- LICENSE.txt
|
|
@@ -73,7 +74,6 @@ files:
|
|
|
73
74
|
- bin/console
|
|
74
75
|
- bin/setup
|
|
75
76
|
- lib/speedtest_net.rb
|
|
76
|
-
- lib/speedtest_net/calculate_speed.rb
|
|
77
77
|
- lib/speedtest_net/client.rb
|
|
78
78
|
- lib/speedtest_net/config.rb
|
|
79
79
|
- lib/speedtest_net/download.rb
|
|
@@ -84,13 +84,13 @@ files:
|
|
|
84
84
|
- lib/speedtest_net/geo.rb
|
|
85
85
|
- lib/speedtest_net/http_timeout.rb
|
|
86
86
|
- lib/speedtest_net/latency.rb
|
|
87
|
+
- lib/speedtest_net/measure_result.rb
|
|
87
88
|
- lib/speedtest_net/result.rb
|
|
88
89
|
- lib/speedtest_net/server.rb
|
|
89
90
|
- lib/speedtest_net/upload.rb
|
|
90
91
|
- lib/speedtest_net/user_agent.rb
|
|
91
92
|
- lib/speedtest_net/version.rb
|
|
92
93
|
- renovate.json
|
|
93
|
-
- speedtest_net.gemspec
|
|
94
94
|
homepage: https://github.com/ryonkn/speedtest_net
|
|
95
95
|
licenses:
|
|
96
96
|
- MIT
|
|
@@ -99,7 +99,6 @@ metadata:
|
|
|
99
99
|
source_code_uri: https://github.com/ryonkn/speedtest_net
|
|
100
100
|
changelog_uri: https://github.com/ryonkn/speedtest_net
|
|
101
101
|
rubygems_mfa_required: 'true'
|
|
102
|
-
post_install_message:
|
|
103
102
|
rdoc_options: []
|
|
104
103
|
require_paths:
|
|
105
104
|
- lib
|
|
@@ -107,15 +106,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
107
106
|
requirements:
|
|
108
107
|
- - ">="
|
|
109
108
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 2.
|
|
109
|
+
version: 3.2.0
|
|
111
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
111
|
requirements:
|
|
113
112
|
- - ">="
|
|
114
113
|
- !ruby/object:Gem::Version
|
|
115
114
|
version: '0'
|
|
116
115
|
requirements: []
|
|
117
|
-
rubygems_version:
|
|
118
|
-
signing_key:
|
|
116
|
+
rubygems_version: 4.0.3
|
|
119
117
|
specification_version: 4
|
|
120
118
|
summary: Library for testing internet bandwidth using speedtest.net
|
|
121
119
|
test_files: []
|
data/.github/dependabot.yml
DELETED
data/.github/workflows/ruby.yml
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
name: GitHub Actions
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
paths-ignore:
|
|
6
|
-
- CODE_OF_CONDUCT.md
|
|
7
|
-
- LICENSE.txt
|
|
8
|
-
- README.md
|
|
9
|
-
pull_request:
|
|
10
|
-
paths-ignore:
|
|
11
|
-
- CODE_OF_CONDUCT.md
|
|
12
|
-
- LICENSE.txt
|
|
13
|
-
- README.md
|
|
14
|
-
schedule:
|
|
15
|
-
- cron: '0 3 * * *'
|
|
16
|
-
|
|
17
|
-
jobs:
|
|
18
|
-
rubocop:
|
|
19
|
-
runs-on: ubuntu-latest
|
|
20
|
-
steps:
|
|
21
|
-
- uses: actions/checkout@master
|
|
22
|
-
- name: Setup Ruby
|
|
23
|
-
uses: ruby/setup-ruby@master
|
|
24
|
-
with:
|
|
25
|
-
ruby-version: 3.0
|
|
26
|
-
- name: Run apt-get
|
|
27
|
-
run: |
|
|
28
|
-
sudo apt-get update
|
|
29
|
-
sudo apt-get install libcurl4-openssl-dev
|
|
30
|
-
- name: Bundle install
|
|
31
|
-
run: |
|
|
32
|
-
gem install bundler
|
|
33
|
-
bundle install --jobs 4 --retry 3
|
|
34
|
-
- name: Run rubocop
|
|
35
|
-
run: |
|
|
36
|
-
rubocop
|
|
37
|
-
|
|
38
|
-
rspec:
|
|
39
|
-
runs-on: ubuntu-latest
|
|
40
|
-
strategy:
|
|
41
|
-
matrix:
|
|
42
|
-
ruby: [ 2.6, 2.7, 3.0, 'head' ]
|
|
43
|
-
steps:
|
|
44
|
-
- uses: actions/checkout@master
|
|
45
|
-
- name: Setup Ruby
|
|
46
|
-
uses: ruby/setup-ruby@master
|
|
47
|
-
with:
|
|
48
|
-
ruby-version: ${{ matrix.ruby }}
|
|
49
|
-
- name: Run apt-get
|
|
50
|
-
run: |
|
|
51
|
-
sudo apt-get update
|
|
52
|
-
sudo apt-get install libcurl4-openssl-dev
|
|
53
|
-
- name: Bundle install
|
|
54
|
-
run: |
|
|
55
|
-
gem install bundler
|
|
56
|
-
bundle install --jobs 4 --retry 3
|
|
57
|
-
- name: Run rspec
|
|
58
|
-
run: bundle exec rspec
|
|
59
|
-
env:
|
|
60
|
-
CI: true
|
|
61
|
-
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpeedtestNet
|
|
4
|
-
class CalculateSpeed
|
|
5
|
-
class << self
|
|
6
|
-
# Fastest 10% and slowest 30% of results are then discarded
|
|
7
|
-
# See: https://support.ookla.com/hc/en-us/articles/234575828-What-is-the-test-flow-and-methodology-for-the-Speedtest-
|
|
8
|
-
def call(results)
|
|
9
|
-
sorted_results = sorted_nemric_results(results)
|
|
10
|
-
count = sorted_results.count
|
|
11
|
-
|
|
12
|
-
return 0.0 if count.zero?
|
|
13
|
-
|
|
14
|
-
faster = count - (count * 0.1).round # fastest 10%
|
|
15
|
-
slower = (count * 0.3).round # slowest 30%
|
|
16
|
-
target_results = sorted_results[slower...faster]
|
|
17
|
-
|
|
18
|
-
# The remaining result are averaged together to determine
|
|
19
|
-
# the final result
|
|
20
|
-
target_results.sum.to_f / target_results.count
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def sorted_nemric_results(results)
|
|
26
|
-
numeric_results = results.select { |result| result.is_a? Numeric }
|
|
27
|
-
numeric_results.sort
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
data/speedtest_net.gemspec
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
lib = File.expand_path('lib', __dir__)
|
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require 'speedtest_net/version'
|
|
6
|
-
|
|
7
|
-
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name = 'speedtest_net'
|
|
9
|
-
spec.version = SpeedtestNet::VERSION
|
|
10
|
-
spec.authors = ['Ryo Nakano']
|
|
11
|
-
spec.email = ['ryo.z.nakano@gmail.com']
|
|
12
|
-
|
|
13
|
-
spec.summary = 'Library for testing internet bandwidth using speedtest.net'
|
|
14
|
-
spec.description = 'Library for testing internet bandwidth using speedtest.net'
|
|
15
|
-
spec.homepage = 'https://github.com/ryonkn/speedtest_net'
|
|
16
|
-
spec.license = 'MIT'
|
|
17
|
-
|
|
18
|
-
spec.metadata['homepage_uri'] = spec.homepage
|
|
19
|
-
spec.metadata['source_code_uri'] = spec.homepage
|
|
20
|
-
spec.metadata['changelog_uri'] = spec.homepage
|
|
21
|
-
|
|
22
|
-
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
23
|
-
|
|
24
|
-
# Specify which files should be added to the gem when it is released.
|
|
25
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
26
|
-
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
27
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
28
|
-
end
|
|
29
|
-
spec.bindir = 'exe'
|
|
30
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
31
|
-
spec.require_paths = ['lib']
|
|
32
|
-
|
|
33
|
-
spec.required_ruby_version = '>= 2.6.0'
|
|
34
|
-
|
|
35
|
-
spec.add_dependency 'curb', '~> 0.9'
|
|
36
|
-
spec.add_dependency 'rexml', '~> 3.2'
|
|
37
|
-
spec.add_dependency 'typhoeus', '~> 1.3'
|
|
38
|
-
end
|