opendns-dnsdb 0.2.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6ffc6fbdbd3300935d4bbedcfa0a9c6fabb2c2d
4
- data.tar.gz: 5636e568eee7c925f5b2a2713f5394df5a3a4ce3
3
+ metadata.gz: b5557f34b1a5f2b37ec112510b02da914879a503
4
+ data.tar.gz: 8fc27e7efdb8dc0c71082fc09052e4f57205bf24
5
5
  SHA512:
6
- metadata.gz: 2e0e80f6dba1e3445af8f10d8a8a46c3368a3e015624279d98bdd9902f49bd4c1f210640ec8a91ba384f4b773a9b99c8d378d0ff4a94c10aee355d25c2e0e21a
7
- data.tar.gz: 70985d6a478bf5248520c316ec6b51642133fce350f4b51357b9c17804f39fc93a374c3b48d3affed9668fa85fb392c626dda626947b571a5f25593d6fd5ffec
6
+ metadata.gz: 15c19e88e6af7cd5295d32a1c641245b784ba4e6854065df759c132ff51a415861a0997cd737e0a1f9d25ca15c10a8585c5cade8a6edea4d58bf3cd0e0c8241e
7
+ data.tar.gz: 76b28419430338f5cb1f2ea7ed17b70c150715ff2ac8ea88a34e299171af20c350d6aeb177f6fb7749ab5ca24155503f78aa67da42df1d3b5bfc9a1d939ed8c1
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem 'descriptive_statistics'
4
- gem 'ethon'
5
4
  gem 'hashie'
6
5
  gem 'multi_json'
6
+ gem 'typhoeus'
7
7
 
8
8
  gemspec
@@ -86,7 +86,7 @@ Supported options:
86
86
  * ``sslcert``: path to the SSL certificate
87
87
  * ``sslcerttype``: SSL certificate type, defaults to ``pem``.
88
88
  * ``sslcertpasswd``: SSL certificate password
89
- * ``maxconnects``: max number of parallel operations (default: 10)
89
+ * ``max_concurrency``: max number of parallel operations (default: 10)
90
90
 
91
91
  Note on certificates format
92
92
  ===========================
@@ -1,6 +1,6 @@
1
1
 
2
2
  require 'date'
3
- require 'ethon'
3
+ require 'typhoeus'
4
4
  require 'hashie'
5
5
  require 'multi_json'
6
6
 
@@ -21,22 +21,22 @@ module OpenDNS
21
21
  include OpenDNS::DNSDB::Traffic
22
22
 
23
23
  DEFAULT_TIMEOUT = 15
24
- DEFAULT_MAXCONNECTS = 10
24
+ DEFAULT_MAX_CONCURRENCY = 10
25
25
  SGRAPH_API_BASE_URL = 'https://sgraph.umbrella.com'
26
26
 
27
27
  attr_reader :timeout
28
28
  attr_reader :sslcert
29
29
  attr_reader :sslcerttype
30
30
  attr_reader :sslcertpasswd
31
- attr_reader :maxconnects
31
+ attr_reader :max_concurrency
32
32
 
33
33
  def initialize(params = { })
34
34
  raise UsageError, 'Missing certificate file' unless params[:sslcert]
35
35
  @sslcert = params[:sslcert]
36
36
  @timeout = DEFAULT_TIMEOUT
37
37
  @timeout = params[:timeout].to_f if params[:timeout]
38
- @maxconnects = DEFAULT_MAXCONNECTS
39
- @maxconnects = params[:maxconnects].to_i if params[:maxconnects]
38
+ @max_concurrency = DEFAULT_MAX_CONCURRENCY
39
+ @max_concurrency = params[:max_concurrency].to_i if params[:max_concurrency]
40
40
  @sslcerttype = params[:sslcerttype] || 'pem'
41
41
  @sslcertpasswd = params[:sslcertpasswd] || 'opendns'
42
42
  @options = {
@@ -44,15 +44,20 @@ module OpenDNS
44
44
  timeout: @timeout,
45
45
  sslcert: @sslcert,
46
46
  sslcerttype: @sslcerttype,
47
- sslcertpasswd: @sslcertpasswd,
48
- maxconnects: @maxconnects
47
+ sslcertpasswd: @sslcertpasswd
49
48
  }
50
49
  end
51
50
 
51
+ def query_multi
52
+ Typhoeus::Hydra.new(max_concurrency: @max_concurrency)
53
+ end
54
+
52
55
  def query_handler(endpoint, method = :get, options = { })
53
56
  url = SGRAPH_API_BASE_URL + endpoint
54
- query = Ethon::Easy.new(@options)
55
- query.http_request(url, method, options)
57
+ options = options.merge(@options)
58
+ options.merge!(method: method)
59
+ query = Typhoeus::Request.new(url,
60
+ @options.merge(options).merge(method: method))
56
61
  query
57
62
  end
58
63
  end
@@ -21,19 +21,19 @@ module OpenDNS
21
21
  def history_by_ip(ips, type)
22
22
  ips_is_array = ips.kind_of?(Enumerable)
23
23
  ips = [ ips ] unless ips_is_array
24
- multi = Ethon::Multi.new
24
+ multi = query_multi
25
25
  queries = { }
26
26
  ips.each do |ip|
27
27
  next if queries[ip]
28
28
  url = "/dnsdb/ip/#{type}/#{ip}.json"
29
29
  query = query_handler(url)
30
- multi.add(query)
30
+ multi.queue(query)
31
31
  queries[ip] = query
32
32
  end
33
- multi.perform
33
+ multi.run
34
34
  responses = { }
35
35
  queries.each_pair do |ip, query|
36
- obj = MultiJson.load(query.response_body)
36
+ obj = MultiJson.load(query.response.body)
37
37
  responses[ip] = Response::Raw.new(obj).rrs
38
38
  end
39
39
  responses = Response::HashByIP[responses]
@@ -21,19 +21,19 @@ module OpenDNS
21
21
  def history_by_name(names, type)
22
22
  names_is_array = names.kind_of?(Enumerable)
23
23
  names = [ names ] unless names_is_array
24
- multi = Ethon::Multi.new
24
+ multi = query_multi
25
25
  queries = { }
26
26
  names.each do |name|
27
27
  next if queries[name]
28
28
  url = "/dnsdb/name/#{type}/#{name}.json"
29
29
  query = query_handler(url)
30
- multi.add(query)
30
+ multi.queue(query)
31
31
  queries[name] = query
32
32
  end
33
- multi.perform
33
+ multi.run
34
34
  responses = { }
35
35
  queries.each_pair do |name, query|
36
- obj = MultiJson.load(query.response_body)
36
+ obj = MultiJson.load(query.response.body)
37
37
  responses[name] = Response::Raw.new(obj).rrs_tf
38
38
  end
39
39
  responses = Response::HashByName[responses]
@@ -14,14 +14,14 @@ module OpenDNS
14
14
  def labels_by_name(names)
15
15
  names_is_array = names.kind_of?(Enumerable)
16
16
  names = [ names ] unless names_is_array
17
- multi = Ethon::Multi.new
17
+ multi = query_multi
18
18
  names_json = MultiJson.dump(names)
19
19
  cacheid = SipHash::digest(CACHE_KEY, names_json).to_s(16)
20
20
  url = "/infected/names/#{cacheid}.json"
21
21
  query = query_handler(url, :get, { body: names_json })
22
- multi.add(query)
23
- multi.perform
24
- responses = MultiJson.load(query.response_body)
22
+ multi.queue(query)
23
+ multi.run
24
+ responses = MultiJson.load(query.response.body)
25
25
  responses = responses['scores']
26
26
  responses.each_pair do |name, label|
27
27
  responses[name] = [:suspicious, :unknown, :benign][label + 1]
@@ -9,28 +9,28 @@ module OpenDNS
9
9
  def related_names_with_score(names, &filter)
10
10
  names_is_array = names.kind_of?(Enumerable)
11
11
  names = [ names ] unless names_is_array
12
- multi = Ethon::Multi.new
12
+ multi = query_multi
13
13
  queries_links = { }
14
14
  queries_coocs = { }
15
15
  names.each do |name|
16
16
  url_links = "/links/name/#{name}.json"
17
17
  query_links = query_handler(url_links)
18
- multi.add(query_links)
18
+ multi.queue(query_links)
19
19
  queries_links[name] = query_links
20
20
 
21
21
  url_coocs = "/recommendations/name/#{name}.json"
22
22
  query_coocs = query_handler(url_coocs)
23
- multi.add(query_coocs)
23
+ multi.queue(query_coocs)
24
24
  queries_coocs[name] = query_coocs
25
25
  end
26
- multi.perform
26
+ multi.run
27
27
  responses = { }
28
28
  queries_coocs.each_pair do |name, query|
29
- if query.response_body.empty?
29
+ if query.response.body.empty?
30
30
  responses[name] ||= { }
31
31
  next
32
32
  end
33
- obj = MultiJson.load(query.response_body)
33
+ obj = MultiJson.load(query.response.body)
34
34
  if pfs2 = Response::Raw.new(obj).pfs2
35
35
  responses[name] = Hash[*pfs2.flatten]
36
36
  else
@@ -39,10 +39,10 @@ module OpenDNS
39
39
  end
40
40
  queries_links.each_pair do |name, query|
41
41
  responses[name] ||= { }
42
- if query.response_body.empty?
42
+ if query.response.body.empty?
43
43
  next
44
44
  end
45
- obj = MultiJson.load(query.response_body)
45
+ obj = MultiJson.load(query.response.body)
46
46
  if tb1 = Response::Raw.new(obj).tb1
47
47
  upper = [1.0, tb1.map { |x| x[1] }.max].max
48
48
  responses[name] = Hash[*tb1.map { |x| [x[0], x[1] / upper] }.flatten]
@@ -11,7 +11,7 @@ module OpenDNS
11
11
  def daily_traffic_by_name(names, options = { })
12
12
  names_is_array = names.kind_of?(Enumerable)
13
13
  names = [ names ] unless names_is_array
14
- multi = Ethon::Multi.new
14
+ multi = query_multi
15
15
  date_end = options[:start] || Date.today
16
16
  date_end_s = CGI::escape("#{date_end.year}/#{date_end.month}/#{date_end.day}/23")
17
17
  days_back = options[:days_back] || DEFAULT_DAYS_BACK
@@ -25,13 +25,13 @@ module OpenDNS
25
25
  url_traffic = "/appserver/?v=1&function=domain2-system&domains=#{name0}" +
26
26
  "&locations=&start=#{date_start_s}&stop=#{date_end_s}"
27
27
  query_traffic = query_handler(url_traffic)
28
- multi.add(query_traffic)
28
+ multi.queue(query_traffic)
29
29
  queries_traffic[name] = query_traffic
30
30
  end
31
- multi.perform
31
+ multi.run
32
32
  responses = { }
33
33
  queries_traffic.each_pair do |name, query|
34
- obj = MultiJson.load(query.response_body)
34
+ obj = MultiJson.load(query.response.body)
35
35
  tc = obj['response']
36
36
  tc = tc.group_by { |x| x[0].split('/')[0...3].join('/') }
37
37
  tc.each_key do |date_s|
@@ -1,5 +1,5 @@
1
1
  module OpenDNS
2
2
  class DNSDB
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opendns-dnsdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank Denis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-06 00:00:00.000000000 Z
11
+ date: 2013-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake