plr-speedtest 0.2.3 → 0.3.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/.travis.yml +2 -0
 - data/lib/speedtest/download_worker.rb +26 -0
 - data/lib/speedtest/ring.rb +55 -0
 - data/lib/speedtest/upload_worker.rb +25 -0
 - data/lib/speedtest/version.rb +1 -1
 - data/lib/speedtest.rb +58 -62
 - data/speedtest.gemspec +2 -0
 - metadata +33 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 73d4d621364f2ead38d1d11300cbe8e31f99eb61e99cb2b240eb3dd5a9e1f805
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 373baa9881da4b0169caa9877f4ad438ec0bebb2a0570a890c9d579d9e4e65ba
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 46fb6d63bf16d3e98b836446dae58306c652bc9abeba0f91090abec890f6d7e0de6c3e2cca7ef6977c59e8a3a8a1fee13ca4a4f76a3a999c371e1537b4cb3b43
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 18f813f4b4333bf9da00f37add3f270c297b3a6a16ab7d980bfd1345c75a9069b44a69686c9ff849850f5cc92a8035585d8044ef2893a51e114cc34f137d7323
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'celluloid/current'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Speedtest
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              class DownloadWorker
         
     | 
| 
      
 6 
     | 
    
         
            +
                include Celluloid
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def initialize(url, logger)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @logger = logger
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @url = url
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def download
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @logger.debug "  downloading: #{@url}"
         
     | 
| 
      
 15 
     | 
    
         
            +
                  status = ThreadStatus.new(false, 0)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  page = HTTParty.get(@url, timeout: 10)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  unless page.code / 100 == 2
         
     | 
| 
      
 19 
     | 
    
         
            +
                    error "GET #{url} failed with code #{page.code}"
         
     | 
| 
      
 20 
     | 
    
         
            +
                    status.error = true
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  status.size = page.body.length
         
     | 
| 
      
 23 
     | 
    
         
            +
                  status
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Speedtest
         
     | 
| 
      
 2 
     | 
    
         
            +
              class FullRing < StandardError; end
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              class Ring
         
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(size)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  raise ArgumentError, 'size cannot be 0' if size == 0
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  @size = size
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @arr = Array.new(size)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @num_free = @size
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  @append_pos = 0
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @pop_pos = 0
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def append(elt)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  raise FullRing unless num_free > 0
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  @arr[append_pos] = elt
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  @num_free -= 1
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @append_pos += 1
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def pop
         
     | 
| 
      
 26 
     | 
    
         
            +
                  return nil unless num_busy > 0
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  value = @arr[pop_pos]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @arr[pop_pos] = nil
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  @num_free += 1
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @pop_pos += 1
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  return value
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                private
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def append_pos
         
     | 
| 
      
 40 
     | 
    
         
            +
                  @append_pos % @size
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def pop_pos
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @pop_pos % @size
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def num_free
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @num_free
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                def num_busy
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @size - @num_free
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'celluloid/current'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Speedtest
         
     | 
| 
      
 4 
     | 
    
         
            +
              class UploadWorker
         
     | 
| 
      
 5 
     | 
    
         
            +
                include Celluloid
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(url, logger)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @url = url
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @logger = logger
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def upload(content)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  status = ThreadStatus.new(false, 0)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  page = HTTParty.post(@url, :body => { "content" => content }, timeout: 10)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @logger.debug "upload response body = [#{page.body}]"
         
     | 
| 
      
 17 
     | 
    
         
            +
                  unless page.code / 100 == 2
         
     | 
| 
      
 18 
     | 
    
         
            +
                    error "GET #{url} failed with code #{page.code}"
         
     | 
| 
      
 19 
     | 
    
         
            +
                    status.error = true
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  status.size = page.body.split('=')[1].to_i
         
     | 
| 
      
 22 
     | 
    
         
            +
                  status
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/speedtest/version.rb
    CHANGED
    
    
    
        data/lib/speedtest.rb
    CHANGED
    
    | 
         @@ -2,19 +2,32 @@ require 'httparty' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative 'speedtest/result'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require_relative 'speedtest/geo_point'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'speedtest/download_worker'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative 'speedtest/upload_worker'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative 'speedtest/ring'
         
     | 
| 
       5 
8 
     | 
    
         | 
| 
       6 
9 
     | 
    
         
             
            module Speedtest
         
     | 
| 
      
 10 
     | 
    
         
            +
              ThreadStatus = Struct.new(:error, :size)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       7 
12 
     | 
    
         
             
              class Test
         
     | 
| 
       8 
13 
     | 
    
         | 
| 
       9 
14 
     | 
    
         
             
                class FailedTransfer < StandardError; end
         
     | 
| 
       10 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
                HTTP_PING_TIMEOUT = 5
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       11 
18 
     | 
    
         
             
                def initialize(options = {})
         
     | 
| 
       12 
     | 
    
         
            -
                  @ 
     | 
| 
       13 
     | 
    
         
            -
                  @ 
     | 
| 
       14 
     | 
    
         
            -
                  @ping_runs = options[:ping_runs] 
     | 
| 
       15 
     | 
    
         
            -
                  @ 
     | 
| 
       16 
     | 
    
         
            -
                  @ 
     | 
| 
      
 19 
     | 
    
         
            +
                  @min_transfer_secs = options[:min_transfer_secs] || 10
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @num_threads   = options[:num_threads]           || 4
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @ping_runs = options[:ping_runs]                 || 4
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @download_size = options[:download_size]         || 4000
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @upload_size = options[:upload_size]             || 1_000_000
         
     | 
| 
       17 
24 
     | 
    
         
             
                  @logger = options[:logger]
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @num_transfers_padding = options[:num_transfers_padding] || 5
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  if @num_transfers_padding > @num_threads
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @num_transfers_padding = @num_threads
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @ping_runs = 2 if @ping_runs < 2
         
     | 
| 
       18 
31 
     | 
    
         
             
                end
         
     | 
| 
       19 
32 
     | 
    
         | 
| 
       20 
33 
     | 
    
         
             
                def run()
         
     | 
| 
         @@ -55,51 +68,34 @@ module Speedtest 
     | 
|
| 
       55 
68 
     | 
    
         
             
                  @logger.error msg if @logger
         
     | 
| 
       56 
69 
     | 
    
         
             
                end
         
     | 
| 
       57 
70 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                def downloadthread(url)
         
     | 
| 
       59 
     | 
    
         
            -
                  log "  downloading: #{url}"
         
     | 
| 
       60 
     | 
    
         
            -
                  page = HTTParty.get(url)
         
     | 
| 
       61 
     | 
    
         
            -
                  unless page.code / 100 == 2
         
     | 
| 
       62 
     | 
    
         
            -
                    error "GET #{url} failed with code #{page.code}"
         
     | 
| 
       63 
     | 
    
         
            -
                    Thread.current["error"] = true
         
     | 
| 
       64 
     | 
    
         
            -
                  end
         
     | 
| 
       65 
     | 
    
         
            -
                  Thread.current["downloaded"] = page.body.length
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
71 
     | 
    
         
             
                def download
         
     | 
| 
       69 
72 
     | 
    
         
             
                  log "\nstarting download tests:"
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                   
     | 
| 
       73 
     | 
    
         
            -
                  @ 
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                    }
         
     | 
| 
       79 
     | 
    
         
            -
                  }
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  start_time = Time.now
         
     | 
| 
      
 75 
     | 
    
         
            +
                  futures_ring = Ring.new(@num_threads + @num_transfers_padding)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  download_url = "#{@server_root}/speedtest/random#{@download_size}x#{@download_size}.jpg"
         
     | 
| 
      
 77 
     | 
    
         
            +
                  pool = DownloadWorker.pool(size: @num_threads, args: [download_url, @logger])
         
     | 
| 
      
 78 
     | 
    
         
            +
                  1.upto(@num_threads + @num_transfers_padding).each do |i|
         
     | 
| 
      
 79 
     | 
    
         
            +
                    futures_ring.append(pool.future.download)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
       80 
81 
     | 
    
         | 
| 
       81 
82 
     | 
    
         
             
                  total_downloaded = 0
         
     | 
| 
       82 
     | 
    
         
            -
                   
     | 
| 
       83 
     | 
    
         
            -
                     
     | 
| 
       84 
     | 
    
         
            -
                     
     | 
| 
       85 
     | 
    
         
            -
                     
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
      
 83 
     | 
    
         
            +
                  while (future = futures_ring.pop) do
         
     | 
| 
      
 84 
     | 
    
         
            +
                    status = future.value
         
     | 
| 
      
 85 
     | 
    
         
            +
                    raise FailedTransfer.new("Download failed.") if status.error == true
         
     | 
| 
      
 86 
     | 
    
         
            +
                    total_downloaded += status.size
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                    if Time.now - start_time < @min_transfer_secs
         
     | 
| 
      
 89 
     | 
    
         
            +
                      futures_ring.append(pool.future.download)
         
     | 
| 
      
 90 
     | 
    
         
            +
                    end
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end
         
     | 
| 
       87 
92 
     | 
    
         | 
| 
       88 
93 
     | 
    
         
             
                  total_time = Time.new - start_time
         
     | 
| 
       89 
     | 
    
         
            -
                  log "Took #{total_time} seconds to download #{total_downloaded} bytes in #{ 
     | 
| 
      
 94 
     | 
    
         
            +
                  log "Took #{total_time} seconds to download #{total_downloaded} bytes in #{@num_threads} threads\n"
         
     | 
| 
       90 
95 
     | 
    
         | 
| 
       91 
96 
     | 
    
         
             
                  [ total_downloaded * 8, total_time ]
         
     | 
| 
       92 
97 
     | 
    
         
             
                end
         
     | 
| 
       93 
98 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
                def uploadthread(url, content)
         
     | 
| 
       95 
     | 
    
         
            -
                  page = HTTParty.post(url, :body => { "content" => content })
         
     | 
| 
       96 
     | 
    
         
            -
                  unless page.code / 100 == 2
         
     | 
| 
       97 
     | 
    
         
            -
                    error "GET #{url} failed with code #{page.code}"
         
     | 
| 
       98 
     | 
    
         
            -
                    Thread.current["error"] = true
         
     | 
| 
       99 
     | 
    
         
            -
                  end
         
     | 
| 
       100 
     | 
    
         
            -
                  Thread.current["uploaded"] = page.body.split('=')[1].to_i
         
     | 
| 
       101 
     | 
    
         
            -
                end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
99 
     | 
    
         
             
                def randomString(alphabet, size)
         
     | 
| 
       104 
100 
     | 
    
         
             
                  (1.upto(size)).map { alphabet[rand(alphabet.length)] }.join
         
     | 
| 
       105 
101 
     | 
    
         
             
                end
         
     | 
| 
         @@ -107,30 +103,30 @@ module Speedtest 
     | 
|
| 
       107 
103 
     | 
    
         
             
                def upload
         
     | 
| 
       108 
104 
     | 
    
         
             
                  log "\nstarting upload tests:"
         
     | 
| 
       109 
105 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
                  data =  
     | 
| 
       111 
     | 
    
         
            -
                  @upload_sizes.each { |size|
         
     | 
| 
       112 
     | 
    
         
            -
                    1.upto(@upload_runs) {
         
     | 
| 
       113 
     | 
    
         
            -
                      data << randomString(('A'..'Z').to_a, size)
         
     | 
| 
       114 
     | 
    
         
            -
                    }
         
     | 
| 
       115 
     | 
    
         
            -
                  }
         
     | 
| 
      
 106 
     | 
    
         
            +
                  data = randomString(('A'..'Z').to_a, @upload_size)
         
     | 
| 
       116 
107 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
                   
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
                   
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                     
     | 
| 
       124 
     | 
    
         
            -
                   
     | 
| 
      
 108 
     | 
    
         
            +
                  start_time = Time.now
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  futures_ring = Ring.new(@num_threads + @num_transfers_padding)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  upload_url = "#{@server_root}/speedtest/upload.php"
         
     | 
| 
      
 112 
     | 
    
         
            +
                  pool = UploadWorker.pool(size: @num_threads, args: [upload_url, @logger])
         
     | 
| 
      
 113 
     | 
    
         
            +
                  1.upto(@num_threads + @num_transfers_padding).each do |i|
         
     | 
| 
      
 114 
     | 
    
         
            +
                    futures_ring.append(pool.future.upload(data))
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
       125 
116 
     | 
    
         | 
| 
       126 
117 
     | 
    
         
             
                  total_uploaded = 0
         
     | 
| 
       127 
     | 
    
         
            -
                   
     | 
| 
       128 
     | 
    
         
            -
                     
     | 
| 
       129 
     | 
    
         
            -
                     
     | 
| 
       130 
     | 
    
         
            -
                     
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
                  while (future = futures_ring.pop) do
         
     | 
| 
      
 119 
     | 
    
         
            +
                    status = future.value
         
     | 
| 
      
 120 
     | 
    
         
            +
                    raise FailedTransfer.new("Upload failed.") if status.error == true
         
     | 
| 
      
 121 
     | 
    
         
            +
                    total_uploaded += status.size
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                    if Time.now - start_time < @min_transfer_secs
         
     | 
| 
      
 124 
     | 
    
         
            +
                      futures_ring.append(pool.future.upload(data))
         
     | 
| 
      
 125 
     | 
    
         
            +
                    end
         
     | 
| 
      
 126 
     | 
    
         
            +
                  end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
       132 
128 
     | 
    
         
             
                  total_time = Time.new - start_time
         
     | 
| 
       133 
     | 
    
         
            -
                  log "Took #{total_time} seconds to upload #{total_uploaded} bytes in #{ 
     | 
| 
      
 129 
     | 
    
         
            +
                  log "Took #{total_time} seconds to upload #{total_uploaded} bytes in #{@num_threads} threads\n"
         
     | 
| 
       134 
130 
     | 
    
         | 
| 
       135 
131 
     | 
    
         
             
                  # bytes to bits / time = bps
         
     | 
| 
       136 
132 
     | 
    
         
             
                  [ total_uploaded * 8, total_time ]
         
     | 
| 
         @@ -167,10 +163,10 @@ module Speedtest 
     | 
|
| 
       167 
163 
     | 
    
         
             
                  1.upto(@ping_runs) {
         
     | 
| 
       168 
164 
     | 
    
         
             
                    start = Time.new
         
     | 
| 
       169 
165 
     | 
    
         
             
                    begin
         
     | 
| 
       170 
     | 
    
         
            -
                      page = HTTParty.get("#{server}/speedtest/latency.txt")
         
     | 
| 
      
 166 
     | 
    
         
            +
                      page = HTTParty.get("#{server}/speedtest/latency.txt", timeout: HTTP_PING_TIMEOUT)
         
     | 
| 
       171 
167 
     | 
    
         
             
                      times << Time.new - start
         
     | 
| 
       172 
168 
     | 
    
         
             
                    rescue Timeout::Error, Net::HTTPNotFound, Errno::ENETUNREACH => e
         
     | 
| 
       173 
     | 
    
         
            -
                      log "#{e.class} #{e}"
         
     | 
| 
      
 169 
     | 
    
         
            +
                      log "ping error: #{e.class} [#{e}] for #{server}"
         
     | 
| 
       174 
170 
     | 
    
         
             
                      times << 999999
         
     | 
| 
       175 
171 
     | 
    
         
             
                    end
         
     | 
| 
       176 
172 
     | 
    
         
             
                  }
         
     | 
    
        data/speedtest.gemspec
    CHANGED
    
    | 
         @@ -20,8 +20,10 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       20 
20 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
              spec.add_runtime_dependency "httparty", "~> 0.13"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_runtime_dependency "celluloid", "~> 0.17.3"
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.11"
         
     | 
| 
       25 
26 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
       26 
27 
     | 
    
         
             
              spec.add_development_dependency "rspec", "~> 3.0"
         
     | 
| 
      
 28 
     | 
    
         
            +
              spec.add_development_dependency "byebug"
         
     | 
| 
       27 
29 
     | 
    
         
             
            end
         
     | 
    
        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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Pete Myron
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2018-05- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2018-05-13 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: httparty
         
     | 
| 
         @@ -25,6 +25,20 @@ dependencies: 
     | 
|
| 
       25 
25 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       26 
26 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       27 
27 
     | 
    
         
             
                    version: '0.13'
         
     | 
| 
      
 28 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 29 
     | 
    
         
            +
              name: celluloid
         
     | 
| 
      
 30 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 31 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 32 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 34 
     | 
    
         
            +
                    version: 0.17.3
         
     | 
| 
      
 35 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 36 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 37 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 38 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 39 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 40 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 41 
     | 
    
         
            +
                    version: 0.17.3
         
     | 
| 
       28 
42 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       29 
43 
     | 
    
         
             
              name: bundler
         
     | 
| 
       30 
44 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -67,6 +81,20 @@ dependencies: 
     | 
|
| 
       67 
81 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       68 
82 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       69 
83 
     | 
    
         
             
                    version: '3.0'
         
     | 
| 
      
 84 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 85 
     | 
    
         
            +
              name: byebug
         
     | 
| 
      
 86 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 87 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 88 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 89 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 90 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 91 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 92 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 93 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 94 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 95 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 96 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 97 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       70 
98 
     | 
    
         
             
            description: Gemmed version of lacostej's speedtest.rb script @ https://github.com/lacostej/speedtest.rb
         
     | 
| 
       71 
99 
     | 
    
         
             
              - Test your speed with speedtest.net!
         
     | 
| 
       72 
100 
     | 
    
         
             
            email:
         
     | 
| 
         @@ -84,8 +112,11 @@ files: 
     | 
|
| 
       84 
112 
     | 
    
         
             
            - README.md
         
     | 
| 
       85 
113 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       86 
114 
     | 
    
         
             
            - lib/speedtest.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
            - lib/speedtest/download_worker.rb
         
     | 
| 
       87 
116 
     | 
    
         
             
            - lib/speedtest/geo_point.rb
         
     | 
| 
       88 
117 
     | 
    
         
             
            - lib/speedtest/result.rb
         
     | 
| 
      
 118 
     | 
    
         
            +
            - lib/speedtest/ring.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
            - lib/speedtest/upload_worker.rb
         
     | 
| 
       89 
120 
     | 
    
         
             
            - lib/speedtest/version.rb
         
     | 
| 
       90 
121 
     | 
    
         
             
            - speedtest.gemspec
         
     | 
| 
       91 
122 
     | 
    
         
             
            homepage: https://github.com/petemyron/speedtest
         
     |