class ProxySeeker::Tester

Constants

TEST_URL

Attributes

proxies[R]
timeout[R]

Public Class Methods

new(proxies, opts = {}) click to toggle source
# File lib/proxy_seeker/tester.rb, line 7
def initialize(proxies, opts = {})
  @timeout  = opts[:timeout] || 3
  @proxies  = proxies
end

Public Instance Methods

execute() click to toggle source
# File lib/proxy_seeker/tester.rb, line 12
def execute
  filter_out
  proxies
end

Private Instance Methods

filter_out() click to toggle source
# File lib/proxy_seeker/tester.rb, line 19
def filter_out
  latency_filter
end
latency_filter() click to toggle source
# File lib/proxy_seeker/tester.rb, line 23
def latency_filter
  threads = []
  proxies_count = proxies.size
  processed_count = 0

  @proxies.each_with_index do |proxy, i|
    threads << Thread.new {
      test_result = ping_test(proxy, timeout)
      if test_result
        puts "OK: Proxy #{proxy} has passed #{timeout}s health check"
      else
        puts "FAIL: Proxy #{proxy} has failed #{timeout}s check"
        @proxies -= [proxy]
      end
      processed_count += 1
      puts "--> #{((processed_count/proxies_count.to_f) * 100).round}% done"
    }
  end
  threads.each { |t| t.join }
end
ping_test(proxy, timeout) click to toggle source
# File lib/proxy_seeker/tester.rb, line 44
def ping_test(proxy, timeout)
  response = HTTParty.get(TEST_URL, http_proxyaddr: proxy.ip, http_proxyport: proxy.port, timeout: timeout)
  response.code == 200 ? true : false
rescue
  false
else
  true
end