dns_one 0.4.28 → 0.4.29

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: 64571ffc92a8fdf06490e52f603abd7664adf14c
4
- data.tar.gz: 77b2a458cb3ae1e3106264fae0c588673529fc41
3
+ metadata.gz: 8ad077556ec78e89b5d4f8a88827dc77bf8397e8
4
+ data.tar.gz: 8b7916cd71ad40672f8fca7a5baf41b13129c2a8
5
5
  SHA512:
6
- metadata.gz: bb019c7c0a0064a61204574bd5bfe5ea8547e4b812b14024e644df0c658a414feedd36854dcd95b3de9890f39a905c8f091cfaf4e6984517f25cbd1134da216b
7
- data.tar.gz: 766f68aa76fdbe3899748dcd57fa057e5e267725bf7c2ceaba7153b53ea4f923bc634e937a4c7fa6ac803f74c7afda4dc17c6c59398022a4ee12de8f536f4e1b
6
+ metadata.gz: cc2559f45f107f09ffcf56579890d057104ca176e8c27e9737a793ef754ac2b0a732dd1a84fe324e4b6d8e663c6d5e32426961b631fe92db24233acf9e81fb9a
7
+ data.tar.gz: 51fe6c09207f7026008300afade6e95675ea93b79d7d2b7506eb1bdba85eee7ad82372ef4edc5b7a82ecb14507a4326c62920a86a8118bf8aba51042a5a14879
@@ -30,5 +30,6 @@ Gem::Specification.new do |spec|
30
30
  spec.add_runtime_dependency "rexec", '~> 1.6'
31
31
  spec.add_runtime_dependency "pg", '~> 0.21'
32
32
  spec.add_runtime_dependency "activerecord", '~> 5.0'
33
+ spec.add_runtime_dependency "sqlite3", '~> 1.3'
33
34
 
34
35
  end
@@ -11,6 +11,7 @@ require 'rubydns'
11
11
  require 'yaml'
12
12
  require 'pg'
13
13
  require 'active_record'
14
+ require 'sqlite3'
14
15
 
15
16
  # DnsOne
16
17
 
@@ -2,6 +2,7 @@ require "thor"
2
2
 
3
3
  require "dns_one"
4
4
  require "dns_one/setup"
5
+ require 'sqlite3'
5
6
 
6
7
  class DnsOne::CLI < Thor
7
8
 
@@ -52,4 +53,16 @@ class DnsOne::CLI < Thor
52
53
  DnsOne::Util.ensure_sytemd
53
54
  DnsOne::Util.run "systemctl status #{DnsOne::Setup::SERVICE_NAME}"
54
55
  end
56
+
57
+ # STATS
58
+
59
+ desc "stats", "show counters"
60
+ def stats
61
+ stat = DnsOne::Stat.new(db_file: 'stat.db')
62
+ [
63
+ stat.get_counts(:rcode),
64
+ stat.get_counts(:req_resource),
65
+ stat.get_counts(:cache)
66
+ ]
67
+ end
55
68
  end
@@ -15,11 +15,13 @@ module DnsOne; class Server
15
15
  def initialize conf, conf_zone_search
16
16
  @conf = conf
17
17
  @zone_search = ZoneSearch.instance.setup conf_zone_search
18
+ @stat = Stat.new(db_file: 'stat.db')
18
19
  end
19
20
 
20
21
  def run
21
22
  zone_search = @zone_search
22
23
  conf = @conf
24
+ stat = @stat
23
25
 
24
26
  RubyDNS::run_server(listen: dns_daemon_interfaces, logger: Log.logger) do
25
27
  on(:start) do
@@ -31,22 +33,33 @@ module DnsOne; class Server
31
33
  end
32
34
 
33
35
  match(/(.+)/) do |t| # transaction
34
- domain_name = t.question.to_s
35
- ip_address = t.options[:peer] rescue nil
36
+ rcode = :NoError
36
37
 
37
- records = zone_search.query domain_name, t.resource_class, ip_address
38
+ begin
39
+ domain_name = t.question.to_s
40
+ ip_address = t.options[:peer] rescue nil
38
41
 
39
- if records
40
- if records.empty?
41
- t.fail! :NoError
42
- else
43
- records.each do |rec|
44
- t.respond! *[rec.val].flatten, {resource_class: rec.res_class, section: rec.section}
42
+ records, from_cache = zone_search.query domain_name, t.resource_class, ip_address
43
+
44
+ if records
45
+ if records.empty?
46
+ t.fail! :NoError
47
+ else
48
+ records.each do |rec|
49
+ t.respond! *[rec.val].flatten, {resource_class: rec.res_class, section: rec.section}
50
+ end
45
51
  end
52
+ else
53
+ rcode = :NXDomain
54
+ t.fail! :NXDomain
46
55
  end
47
- else
48
- t.fail! :NXDomain
56
+ rescue => e
57
+ rcode = :ServFail
49
58
  end
59
+
60
+ stat.save rcode, t.resource_class, from_cache
61
+
62
+ raise e if e
50
63
  end
51
64
 
52
65
  otherwise do |t|
@@ -1,3 +1,3 @@
1
1
  module DnsOne
2
- VERSION = "0.4.28"
2
+ VERSION = "0.4.29"
3
3
  end
@@ -32,7 +32,7 @@ module DnsOne; class ZoneSearch
32
32
 
33
33
  records = []
34
34
 
35
- rec_set_name = find_record_set dom_name
35
+ rec_set_name, from_cache = find_record_set dom_name
36
36
  Log.d "domain #{ rec_set_name ? "found, rec_set_name = '#{rec_set_name}'" : 'not found' }"
37
37
  return unless rec_set_name
38
38
 
@@ -64,7 +64,7 @@ module DnsOne; class ZoneSearch
64
64
  records << OpenStruct.new(val: val, res_class: res_class, section: 'answer')
65
65
  end
66
66
 
67
- records
67
+ [records, from_cache]
68
68
  end
69
69
 
70
70
  private
@@ -102,15 +102,18 @@ module DnsOne; class ZoneSearch
102
102
 
103
103
  enabled_cache = use_cache && @backend.allow_cache
104
104
 
105
+ from_cache = false
106
+
105
107
  if enabled_cache and rec_set = @cache.find(dom_name)
106
108
  Log.d "found in cache (#{@cache.stat})"
107
- rec_set
109
+ from_cache = true
110
+ [rec_set, from_cache]
108
111
  else
109
112
  if rec_set = @backend.find(dom_name)
110
113
  if enabled_cache
111
114
  @cache.add dom_name, rec_set
112
115
  end
113
- rec_set
116
+ [rec_set, from_cache]
114
117
  end
115
118
  end
116
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dns_one
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.28
4
+ version: 0.4.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Lobato
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-16 00:00:00.000000000 Z
11
+ date: 2018-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '5.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sqlite3
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.3'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.3'
125
139
  description: Instead having a complex data schema to assign record sets to DNS zones,
126
140
  dns_one assigns one or a few record sets to many zones. Configure your record sets
127
141
  in YML files and fetch your domains from a database or YML backend.