speedtest_net 0.3.0 → 0.3.1
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/workflows/ruby.yml +53 -0
- data/.gitignore +1 -0
- data/README.md +1 -0
- data/lib/speedtest_net/calculate_speed.rb +31 -0
- data/lib/speedtest_net/config.rb +2 -2
- data/lib/speedtest_net/download.rb +2 -10
- data/lib/speedtest_net/server.rb +4 -2
- data/lib/speedtest_net/upload.rb +2 -1
- data/lib/speedtest_net/version.rb +1 -1
- data/speedtest_net.gemspec +4 -0
- metadata +60 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1a5c88b87cc3d889f9b0eca0e229ade428e5cb5235fbde09556b2fb561c5c6f
|
4
|
+
data.tar.gz: 4376f9b649bc1528cd07a29b20f81464cf794da3aeb8acbfb339dda87dc64b9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f36f079a6359caf1896ab0f864df4cc7797ed1e07077ce047d641260437519ff11432898e8679842abdd3965f6e1e6457de9fe1276097452dd7dbac786a75dd3
|
7
|
+
data.tar.gz: 43defb7ec4ff05512f4c57f80ca2f4e30635e8bc17ba4235867c5a1362f2de691458c6c0aaddbd6735da58d4c607d599587bf9bc6cfaf9f60509bf2f9fd121e4
|
@@ -0,0 +1,53 @@
|
|
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
|
+
|
15
|
+
jobs:
|
16
|
+
rubocop:
|
17
|
+
runs-on: ubuntu-latest
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@master
|
20
|
+
- name: Setup Ruby 2.6
|
21
|
+
uses: actions/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: 2.6.x
|
24
|
+
- name: Run rubocop
|
25
|
+
run: |
|
26
|
+
gem install rubocop rubocop-rspec
|
27
|
+
rubocop
|
28
|
+
|
29
|
+
rspec:
|
30
|
+
runs-on: ubuntu-latest
|
31
|
+
strategy:
|
32
|
+
matrix:
|
33
|
+
ruby: [ '2.5.x', '2.6.x' ]
|
34
|
+
steps:
|
35
|
+
- uses: actions/checkout@master
|
36
|
+
- name: Setup Ruby
|
37
|
+
uses: actions/setup-ruby@v1
|
38
|
+
with:
|
39
|
+
ruby-version: ${{ matrix.ruby }}
|
40
|
+
architecture: 'x64'
|
41
|
+
- name: Run apt-get
|
42
|
+
run: |
|
43
|
+
sudo apt-get update
|
44
|
+
sudo apt-get install libcurl4-openssl-dev
|
45
|
+
- name: Bundle install
|
46
|
+
run: |
|
47
|
+
gem install bundler
|
48
|
+
bundle install --jobs 4 --retry 3
|
49
|
+
- name: Run rspec
|
50
|
+
run: bundle exec rspec
|
51
|
+
env:
|
52
|
+
CI: true
|
53
|
+
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# SpeedtestNet
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/speedtest_net)
|
4
|
+
[](https://github.com/ryonkn/speedtest_net/actions)
|
4
5
|
[](https://www.codacy.com/manual/ryonkn/speedtest_net?utm_source=github.com&utm_medium=referral&utm_content=ryonkn/speedtest_net&utm_campaign=Badge_Grade)
|
5
6
|
|
6
7
|
A Ruby library for testing internet bandwidth using speedtest.net
|
@@ -0,0 +1,31 @@
|
|
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/lib/speedtest_net/config.rb
CHANGED
@@ -86,9 +86,9 @@ module SpeedtestNet
|
|
86
86
|
def upload_config(elements)
|
87
87
|
{
|
88
88
|
testlength: elements['testlength'].to_i,
|
89
|
-
initialtest: elements['initialtest'],
|
89
|
+
initialtest: elements['initialtest'].to_i,
|
90
90
|
mintestsize: elements['mintestsize'],
|
91
|
-
threads: elements['threads'],
|
91
|
+
threads: elements['threads'].to_i,
|
92
92
|
maxchunksize: elements['maxchunksize'],
|
93
93
|
maxchunkcount: elements['maxchunkcount'].to_i,
|
94
94
|
threadsperurl: elements['threadsperurl'].to_i
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'curb'
|
4
4
|
require 'securerandom'
|
5
|
+
require 'speedtest_net/calculate_speed'
|
5
6
|
|
6
7
|
module SpeedtestNet
|
7
8
|
class Download
|
@@ -18,7 +19,7 @@ module SpeedtestNet
|
|
18
19
|
urls = create_urls(server, file, concurrent_number)
|
19
20
|
multi_downloader(urls)
|
20
21
|
end
|
21
|
-
|
22
|
+
SpeedtestNet::CalculateSpeed.call(results)
|
22
23
|
end
|
23
24
|
|
24
25
|
private
|
@@ -42,15 +43,6 @@ module SpeedtestNet
|
|
42
43
|
multi.perform
|
43
44
|
responses.map(&:download_speed).sum * 8
|
44
45
|
end
|
45
|
-
|
46
|
-
def calculate_results(results)
|
47
|
-
sorted_results = results.sort
|
48
|
-
count = sorted_results.count
|
49
|
-
faster = count - (count * 0.1).round
|
50
|
-
slower = (count * 0.3).round
|
51
|
-
target_results = sorted_results[slower...faster]
|
52
|
-
target_results.sum / target_results.count
|
53
|
-
end
|
54
46
|
end
|
55
47
|
end
|
56
48
|
end
|
data/lib/speedtest_net/server.rb
CHANGED
@@ -35,14 +35,16 @@ module SpeedtestNet
|
|
35
35
|
servers = xml_servers.map do |server|
|
36
36
|
create_instance(server)
|
37
37
|
end
|
38
|
-
servers.
|
38
|
+
servers.sort_by { |s| [s.distance, s.id] }
|
39
39
|
end
|
40
40
|
|
41
41
|
def best_server
|
42
42
|
servers = list
|
43
43
|
closest_servers = servers.first(10)
|
44
44
|
closest_servers.each(&:measure_latency)
|
45
|
-
sorted_servers = closest_servers.
|
45
|
+
sorted_servers = closest_servers.sort_by do |s|
|
46
|
+
[s.latency, s.distance, s.id]
|
47
|
+
end
|
46
48
|
sorted_servers.first
|
47
49
|
end
|
48
50
|
|
data/lib/speedtest_net/upload.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'curb'
|
4
4
|
require 'securerandom'
|
5
|
+
require 'speedtest_net/calculate_speed'
|
5
6
|
|
6
7
|
module SpeedtestNet
|
7
8
|
class Upload
|
@@ -17,7 +18,7 @@ module SpeedtestNet
|
|
17
18
|
urls = create_urls(server, concurrent_number)
|
18
19
|
multi_uploader(urls, size)
|
19
20
|
end
|
20
|
-
|
21
|
+
SpeedtestNet::CalculateSpeed.call(results)
|
21
22
|
end
|
22
23
|
|
23
24
|
private
|
data/speedtest_net.gemspec
CHANGED
@@ -34,6 +34,10 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
35
35
|
spec.add_development_dependency 'rubocop'
|
36
36
|
spec.add_development_dependency 'rubocop-rspec'
|
37
|
+
spec.add_development_dependency 'simplecov'
|
38
|
+
spec.add_development_dependency 'vcr'
|
39
|
+
spec.add_development_dependency 'webmock'
|
40
|
+
spec.add_development_dependency 'codacy-coverage'
|
37
41
|
|
38
42
|
spec.add_dependency 'curb', '~> 0.9'
|
39
43
|
spec.add_dependency 'typhoeus'
|
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.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakano
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,62 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: vcr
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: webmock
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: codacy-coverage
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
97
153
|
- !ruby/object:Gem::Dependency
|
98
154
|
name: curb
|
99
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,6 +185,7 @@ executables: []
|
|
129
185
|
extensions: []
|
130
186
|
extra_rdoc_files: []
|
131
187
|
files:
|
188
|
+
- ".github/workflows/ruby.yml"
|
132
189
|
- ".gitignore"
|
133
190
|
- ".rspec"
|
134
191
|
- ".rubocop.yml"
|
@@ -142,6 +199,7 @@ files:
|
|
142
199
|
- bin/setup
|
143
200
|
- lib/geo.rb
|
144
201
|
- lib/speedtest_net.rb
|
202
|
+
- lib/speedtest_net/calculate_speed.rb
|
145
203
|
- lib/speedtest_net/config.rb
|
146
204
|
- lib/speedtest_net/download.rb
|
147
205
|
- lib/speedtest_net/error.rb
|