globetrotter 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a77ed8d5c5ea59b1ec541a7444b090874e33ef8d
4
- data.tar.gz: 4b8791eaabed67a6e414567c2f1089346e43391e
3
+ metadata.gz: b888a19dab6e39a83cc3c9dfd9314712c02ae8bf
4
+ data.tar.gz: bbf71fe7a2b929f648fef841779212f45f6f48f2
5
5
  SHA512:
6
- metadata.gz: cbffd8ef57ecabbc09dc9c37a0948fcce9a3a4ecab3240a5198a7f45cf9658ae5c7652a50f1b44e18753e61e5d19abbec077e2c5c8274d886ea5b65a1ce349c9
7
- data.tar.gz: c864bcec76287458b0d3181b6c68203274cf70e5d2447bb60e62e25fa2a1c02cfac01f2b1f312a1d82fe84ae904e2851081200a8b958087c70af5f5a8fcda636
6
+ metadata.gz: 37c74d82d195af4ff99ce60a595e1762168e40c26779d6f139792ed0e8f058279ec0815c28a55b6ae66e949d843589e3e0e2226ec0b3da6a223f339663d4a5d6
7
+ data.tar.gz: b4d66382e11f283a85722f7b81fe472a9e12873f0d85a9c6cd3232cecb84af62d1231dcfb00d38bc13e042cdd7827987d8ce6bcb120721fb255f0697d1c1482b
@@ -2,51 +2,52 @@
2
2
 
3
3
  $:.unshift File.join(File.dirname(__FILE__), %w{.. lib})
4
4
  require 'globetrotter'
5
- require 'trollop'
5
+ require 'optparse'
6
+ require 'ostruct'
7
+ require 'dnsruby'
6
8
 
7
- opts = Trollop.options do
8
- opt :ns_count_to_check,
9
- 'How many nameservers to query',
10
- type: Integer,
11
- default: 100,
12
- short: '-c'
13
- opt :ns_max_age_minutes,
14
- 'Query nameservers validated <= this many minutes ago',
15
- type: Integer,
16
- default: 60,
17
- short: '-a'
18
- opt :query,
19
- 'Hostname to lookup',
20
- type: String,
21
- default: 'googleapis.com'
22
- opt :timeout_seconds,
23
- 'Seconds to wait before queries timeout',
24
- type: Integer,
25
- default: 2,
26
- short: '-t'
27
- opt :concurrency,
28
- 'Number of concurrent DNS requests to make',
29
- type: Integer,
30
- default: 10,
31
- short: '-p'
32
- end
9
+ class GlobetrotterOptions
10
+ def self.parse(args)
11
+ options = OpenStruct.new
12
+ options.domain = 'googleapis.com'
13
+ options.ns_count_to_check = 100
14
+ options.ns_max_age_minutes = 60
15
+ options.timeout_seconds = 2
16
+ options.ns_query_concurrency = 10
33
17
 
34
- ns_count_to_check = opts.ns_count_to_check
35
- ns_max_age_minutes = opts.ns_max_age_minutes
36
- timeout_seconds = opts.timeout_seconds
37
- concurrency = opts.concurrency
38
- query = opts.query
18
+ opt_parser = OptionParser.new do |opts|
19
+ opts.banner = 'Usage: globetrotter [options] example.org'
20
+ opts.on('-q googleapis.com', String, 'Domain to look up') do |o|
21
+ options.domain = o
22
+ end
23
+ opts.on('-n 100', Integer, 'Query N name servers') do |o|
24
+ options.ns_count_to_check = o
25
+ end
26
+ opts.on('-t 2', Integer, 'Wait T seconds per request') do |o|
27
+ options.timeout_seconds = o
28
+ end
29
+ opts.on('-p 10', Integer, 'Query P name servers in parallel') do |o|
30
+ options.ns_query_concurrency = o
31
+ end
32
+ opts.on('-a 60', Integer, 'Use name servers checked less than A minutes ago') do |o|
33
+ options.ns_max_age_minutes = o
34
+ end
35
+ opts.on_tail('-h', '--help', 'Display CLI help (this output)') do |o|
36
+ puts opts.help
37
+ exit
38
+ end
39
+ opts.on_tail('-v', '--version', 'Display Globetrotter version') do |o|
40
+ puts "Globetrotter #{Globetrotter::VERSION}"
41
+ exit
42
+ end
43
+ end # opt_parser
39
44
 
40
- Trollop.die :ns_count_to_check, 'must be positive' if ns_count_to_check < 0
41
- Trollop.die :ns_max_age_minutes, 'must be positive' if ns_max_age_minutes < 0
42
- Trollop.die :timeout_seconds, 'must be positive' if ns_max_age_minutes < 0
43
- Trollop.die :concurrency, 'must be positive' if ns_max_age_minutes < 0
45
+ opt_parser.parse!(args)
44
46
 
45
- gt = Globetrotter.new(
46
- query: query,
47
- ns_count_to_check: ns_count_to_check,
48
- ns_max_age_minutes: ns_max_age_minutes,
49
- timeout_seconds: timeout_seconds,
50
- concurrency: concurrency
51
- )
47
+ options
48
+ end # parse()
49
+ end # class Globetrotter Options
50
+
51
+ options = GlobetrotterOptions.parse(ARGV)
52
+ gt = Globetrotter.new(options)
52
53
  gt.run
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'rake'
23
23
 
24
24
  spec.add_runtime_dependency 'rubydns', '~> 0.8'
25
- spec.add_runtime_dependency 'trollop', '~> 2.0'
25
+ spec.add_runtime_dependency 'dnsruby', '~> 1.54'
26
26
  spec.add_runtime_dependency 'wrest', '~> 1.5'
27
27
  end
@@ -8,12 +8,12 @@ require 'set'
8
8
  require 'ipaddr'
9
9
 
10
10
  class Globetrotter
11
- def initialize(options = {})
12
- @ns_max_age_minutes = options.fetch(:ns_max_age_minutes, 60)
13
- @ns_count_to_check = options.fetch(:ns_count_to_check, 100)
14
- @timeout_seconds = options.fetch(:timeout_seconds, 2)
15
- @query = options.fetch(:query, 'googleapis.com')
16
- @concurrency = options.fetch(:concurrency, 10)
11
+ def initialize(options)
12
+ @ns_max_age_minutes = options.ns_max_age_minutes
13
+ @ns_count_to_check = options.ns_count_to_check
14
+ @timeout_seconds = options.timeout_seconds
15
+ @query = options.domain
16
+ @concurrency = options.ns_query_concurrency
17
17
  @ns_ips = fetch_ns_ips
18
18
  end
19
19
 
@@ -62,7 +62,7 @@ class Globetrotter
62
62
  end
63
63
  end
64
64
 
65
- def self.run(options = {})
65
+ def self.run(options)
66
66
  new(options).run
67
67
  end
68
68
 
@@ -72,10 +72,10 @@ class Globetrotter
72
72
 
73
73
  def fetch_ns_ips
74
74
  Wrest.logger = Logger.new(STDERR)
75
- uri = 'http://public-dns.tk/nameservers.json'.to_uri
75
+ uri = "http://public-dns.tk/nameservers.json".to_uri
76
76
  nameservers = uri.get.deserialise.map { |data| Nameserver.new(data) }
77
77
  nameservers.select do |ns|
78
- ns.valid? && ns.ipv4? && ns.age_minutes <= ns_max_age_minutes
78
+ ns.valid? && ns.ipv4? && (ns.age_minutes <= @ns_max_age_minutes)
79
79
  end.map(&:ip)
80
80
  end
81
81
 
@@ -1,3 +1,3 @@
1
1
  class Globetrotter
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: globetrotter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Lopez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-18 00:00:00.000000000 Z
11
+ date: 2014-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.8'
55
55
  - !ruby/object:Gem::Dependency
56
- name: trollop
56
+ name: dnsruby
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: '1.54'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: '1.54'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: wrest
71
71
  requirement: !ruby/object:Gem::Requirement