opendns-dnsdb 0.2.0 → 0.3.0

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: 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