speedtest_net 0.9.0 → 0.9.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/.rubocop.yml +1 -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
- data/speedtest_net.gemspec +18 -17
- metadata +15 -12
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae7607d307332c3a3c76f0e8670abd4d11f1d1c1873f22477dec654af45fc015
|
4
|
+
data.tar.gz: e7b783804a6b084296d18895f171634069089c2e1e0c321ef2d2f753c2470c7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f015a05bb41bd9c8564af2440fc67206cc5fda3bf1c82fbb97014268c2a6184532496bec7ea0b39de47c6db94d90c7e31f1446301c00732b71f58bd4a99cebf
|
7
|
+
data.tar.gz: 889349ae54eca6504548703454624a3ef57d499dfcaaf206b19e8a8869dd0ce6c873d4423ed4bf0ef60b10aa525ccb59e9ae991a75e72010241a7c3c933d3a28
|
data/.rubocop.yml
CHANGED
@@ -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
|
data/speedtest_net.gemspec
CHANGED
@@ -1,36 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require 'speedtest_net/version'
|
3
|
+
require_relative 'lib/speedtest_net/version'
|
6
4
|
|
7
5
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name
|
9
|
-
spec.version
|
10
|
-
spec.authors
|
11
|
-
spec.email
|
6
|
+
spec.name = 'speedtest_net'
|
7
|
+
spec.version = SpeedtestNet::VERSION
|
8
|
+
spec.authors = ['Ryo Nakano']
|
9
|
+
spec.email = ['ryo.z.nakano@gmail.com']
|
12
10
|
|
13
|
-
spec.summary
|
14
|
-
spec.description
|
15
|
-
spec.homepage
|
16
|
-
spec.license
|
11
|
+
spec.summary = 'Library for testing internet bandwidth using speedtest.net'
|
12
|
+
spec.description = 'Library for testing internet bandwidth using speedtest.net'
|
13
|
+
spec.homepage = 'https://github.com/ryonkn/speedtest_net'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.required_ruby_version = '>= 3.0.0'
|
17
16
|
|
18
17
|
spec.metadata['homepage_uri'] = spec.homepage
|
19
18
|
spec.metadata['source_code_uri'] = spec.homepage
|
20
19
|
spec.metadata['changelog_uri'] = spec.homepage
|
21
20
|
|
21
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
22
|
+
|
22
23
|
# Specify which files should be added to the gem when it is released.
|
23
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
25
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
25
|
-
`git ls-files -z`.split("\x0").reject
|
26
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
28
|
+
end
|
26
29
|
end
|
27
|
-
spec.bindir
|
28
|
-
spec.executables
|
30
|
+
spec.bindir = 'exe'
|
31
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
29
32
|
spec.require_paths = ['lib']
|
30
33
|
|
31
|
-
spec.
|
32
|
-
|
33
|
-
spec.add_dependency 'curb', '~> 0.9'
|
34
|
+
spec.add_dependency 'curb', '>= 0.9', '< 2.0'
|
34
35
|
spec.add_dependency 'rexml', '~> 3.2'
|
35
36
|
spec.add_dependency 'typhoeus', '~> 1.3'
|
36
37
|
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakano
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curb
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.9'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0.9'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rexml
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,17 +60,13 @@ dependencies:
|
|
54
60
|
version: '1.3'
|
55
61
|
description: Library for testing internet bandwidth using speedtest.net
|
56
62
|
email:
|
57
|
-
- ryo@
|
63
|
+
- ryo.z.nakano@gmail.com
|
58
64
|
executables: []
|
59
65
|
extensions: []
|
60
66
|
extra_rdoc_files: []
|
61
67
|
files:
|
62
|
-
- ".github/dependabot.yml"
|
63
|
-
- ".github/workflows/ruby.yml"
|
64
|
-
- ".gitignore"
|
65
68
|
- ".rspec"
|
66
69
|
- ".rubocop.yml"
|
67
|
-
- ".travis.yml"
|
68
70
|
- CODE_OF_CONDUCT.md
|
69
71
|
- Gemfile
|
70
72
|
- LICENSE.txt
|
@@ -73,7 +75,6 @@ files:
|
|
73
75
|
- bin/console
|
74
76
|
- bin/setup
|
75
77
|
- lib/speedtest_net.rb
|
76
|
-
- lib/speedtest_net/calculate_speed.rb
|
77
78
|
- lib/speedtest_net/client.rb
|
78
79
|
- lib/speedtest_net/config.rb
|
79
80
|
- lib/speedtest_net/download.rb
|
@@ -84,6 +85,7 @@ files:
|
|
84
85
|
- lib/speedtest_net/geo.rb
|
85
86
|
- lib/speedtest_net/http_timeout.rb
|
86
87
|
- lib/speedtest_net/latency.rb
|
88
|
+
- lib/speedtest_net/measure_result.rb
|
87
89
|
- lib/speedtest_net/result.rb
|
88
90
|
- lib/speedtest_net/server.rb
|
89
91
|
- lib/speedtest_net/upload.rb
|
@@ -98,6 +100,7 @@ metadata:
|
|
98
100
|
homepage_uri: https://github.com/ryonkn/speedtest_net
|
99
101
|
source_code_uri: https://github.com/ryonkn/speedtest_net
|
100
102
|
changelog_uri: https://github.com/ryonkn/speedtest_net
|
103
|
+
rubygems_mfa_required: 'true'
|
101
104
|
post_install_message:
|
102
105
|
rdoc_options: []
|
103
106
|
require_paths:
|
@@ -106,14 +109,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
109
|
requirements:
|
107
110
|
- - ">="
|
108
111
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
112
|
+
version: 3.0.0
|
110
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
114
|
requirements:
|
112
115
|
- - ">="
|
113
116
|
- !ruby/object:Gem::Version
|
114
117
|
version: '0'
|
115
118
|
requirements: []
|
116
|
-
rubygems_version: 3.
|
119
|
+
rubygems_version: 3.4.10
|
117
120
|
signing_key:
|
118
121
|
specification_version: 4
|
119
122
|
summary: Library for testing internet bandwidth using speedtest.net
|
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
|