dns_one 0.4.29 → 0.4.30
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 +4 -4
- data/lib/dns_one/cli.rb +3 -2
- data/lib/dns_one/stat.rb +142 -0
- data/lib/dns_one/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bd90da7f26c043c1061527a8d6c317b323a1d63
|
4
|
+
data.tar.gz: 594f84fea313f5092620752731e463bb5b40562c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aafba801a40a381693c2fb347668dae193323084ce98af5fc6e424f65ba2a50d37e9f8cba27174970a765ec0d67e4ecdb07a6ecbf3c799f2b7287219cd2c82b3
|
7
|
+
data.tar.gz: d1f868608bd2267eb2451aee3af246f56f2b958a7d15cbe7773eaf2a6bf412892ce621033cd23560daf554c13b99fda7889d30b646b761ccead708287e964f69
|
data/lib/dns_one/cli.rb
CHANGED
data/lib/dns_one/stat.rb
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
module DnsOne; class Stat
|
2
|
+
|
3
|
+
def initialize conf = {}
|
4
|
+
@conf = conf
|
5
|
+
ensure_db
|
6
|
+
end
|
7
|
+
|
8
|
+
def save rcode, req_resource, cache
|
9
|
+
@db.execute(
|
10
|
+
"INSERT INTO responses (time, rcode, req_resource, cache) VALUES (?, ?, ?, ?)",
|
11
|
+
[
|
12
|
+
Time.now.to_i,
|
13
|
+
Resolv::DNS::RCode.const_get(rcode),
|
14
|
+
req_resource::TypeValue,
|
15
|
+
(cache ? 1 : 0)
|
16
|
+
]
|
17
|
+
)
|
18
|
+
rescue => e
|
19
|
+
Log.e e
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_counts counter, from = nil
|
23
|
+
validate_counter counter
|
24
|
+
validate_from from
|
25
|
+
|
26
|
+
from ||= (Time.now - 5 * 60).to_i
|
27
|
+
|
28
|
+
s = <<-SQL
|
29
|
+
select #{counter}, count(*)
|
30
|
+
from responses
|
31
|
+
where time > #{from}
|
32
|
+
group by #{counter}
|
33
|
+
SQL
|
34
|
+
|
35
|
+
counts = {}
|
36
|
+
|
37
|
+
@db.execute(s) do |row|
|
38
|
+
_counter, count = row
|
39
|
+
counts[_counter] = count
|
40
|
+
end
|
41
|
+
|
42
|
+
counts
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def validate_counter counter
|
48
|
+
unless [:rcode, :req_resource, :cache].include? counter
|
49
|
+
raise "invalid arg #{counter}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def validate_from from
|
54
|
+
case from
|
55
|
+
when nil, Integer
|
56
|
+
when String
|
57
|
+
unless from =~ /^\d+$/
|
58
|
+
raise "invalid arg #{from}"
|
59
|
+
end
|
60
|
+
else
|
61
|
+
raise "invalid arg class #{from.class}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def ensure_db
|
66
|
+
new_db = !File.exists?(db_file)
|
67
|
+
@db = SQLite3::Database.new db_file
|
68
|
+
create_tables if new_db
|
69
|
+
end
|
70
|
+
|
71
|
+
def create_tables
|
72
|
+
sqls = []
|
73
|
+
|
74
|
+
sqls << <<-SQL
|
75
|
+
create table responses (
|
76
|
+
time int,
|
77
|
+
rcode int,
|
78
|
+
req_resource int,
|
79
|
+
cache int
|
80
|
+
);
|
81
|
+
SQL
|
82
|
+
|
83
|
+
sqls << <<-SQL
|
84
|
+
CREATE INDEX responses_time ON responses (time);
|
85
|
+
SQL
|
86
|
+
|
87
|
+
sqls << <<-SQL
|
88
|
+
CREATE INDEX responses_rcode ON responses (rcode);
|
89
|
+
SQL
|
90
|
+
|
91
|
+
sqls << <<-SQL
|
92
|
+
CREATE INDEX responses_req_resource ON responses (req_resource);
|
93
|
+
SQL
|
94
|
+
|
95
|
+
sqls << <<-SQL
|
96
|
+
CREATE INDEX responses_cache ON responses (cache);
|
97
|
+
SQL
|
98
|
+
|
99
|
+
sqls.each{|sql| @db.execute sql }
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
def db_file
|
104
|
+
@conf[:db_file]
|
105
|
+
end
|
106
|
+
|
107
|
+
def request_resources
|
108
|
+
unless defined? @@request_resources
|
109
|
+
@@request_resources = {}
|
110
|
+
%w(A AAAA ANY CNAME HINFO MINFO MX NS PTR SOA TXT WKS).each do |res|
|
111
|
+
val = Object.const_get("Resolv::DNS::Resource::IN::#{res}")::TypeValue
|
112
|
+
@@request_resources[val] = res.downcase
|
113
|
+
end
|
114
|
+
end
|
115
|
+
@@request_resources
|
116
|
+
end
|
117
|
+
|
118
|
+
def const_underscore name
|
119
|
+
name = name.to_s.dup
|
120
|
+
name.gsub!('::', '/')
|
121
|
+
name.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
122
|
+
name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
123
|
+
name.tr!("-", "_")
|
124
|
+
name.downcase!
|
125
|
+
name
|
126
|
+
end
|
127
|
+
|
128
|
+
def rcodes
|
129
|
+
unless @@rcodes
|
130
|
+
@@rcodes = Hash[
|
131
|
+
Resolv::DNS::RCode.constants.map{|c|
|
132
|
+
[
|
133
|
+
Resolv::DNS::RCode.const_get(c),
|
134
|
+
const_underscore(c)
|
135
|
+
]
|
136
|
+
}
|
137
|
+
]
|
138
|
+
end
|
139
|
+
@@rcodes
|
140
|
+
end
|
141
|
+
end; end
|
142
|
+
|
data/lib/dns_one/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dns_one
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Lobato
|
@@ -171,6 +171,7 @@ files:
|
|
171
171
|
- lib/dns_one/log.rb
|
172
172
|
- lib/dns_one/server.rb
|
173
173
|
- lib/dns_one/setup.rb
|
174
|
+
- lib/dns_one/stat.rb
|
174
175
|
- lib/dns_one/util.rb
|
175
176
|
- lib/dns_one/version.rb
|
176
177
|
- lib/dns_one/zone_search.rb
|