dns_one 0.4.37 → 0.4.39
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dns_one/stat.rb +23 -16
- data/lib/dns_one/version.rb +1 -1
- metadata +1 -2
- data/util/dnsone_munin_ +0 -186
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 296dafdbba064fefc2ab86745dd516d80c0eee93
|
4
|
+
data.tar.gz: b20222d54553e1bb9c95bc7e1fd6d31594480470
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e06fdebdd04f7f013d606beeb25370531049fbaea8af66490b0c7ec5d1bc84ae3eb1cf6d890c1dec6a99e70685d500d4d83c8829d80a6ea21e032f86876ea503
|
7
|
+
data.tar.gz: 30abb3413dbcaacbc16a9d673f9151f0dc2b8645261d77742536faa273125949ffc2d6fe5afadb62be8fb80e3922ad28f6238772343a500fe6d0331c79e7dd73
|
data/lib/dns_one/stat.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module DnsOne; class Stat
|
2
2
|
DB_FNAME = "stat.db"
|
3
|
+
SQL_PROF = false
|
3
4
|
|
4
5
|
def initialize conf = {}
|
5
6
|
@conf = conf
|
@@ -12,7 +13,7 @@ module DnsOne; class Stat
|
|
12
13
|
|
13
14
|
def save rcode, req_resource, cache
|
14
15
|
Log.i "saving stat (user: #{ `id -un #{Process.uid}`.strip })"
|
15
|
-
|
16
|
+
rsql(
|
16
17
|
"INSERT INTO responses (time, rcode, req_resource, cache) VALUES (?, ?, ?, ?)",
|
17
18
|
[
|
18
19
|
Time.now.to_i,
|
@@ -25,6 +26,7 @@ module DnsOne; class Stat
|
|
25
26
|
Log.e e
|
26
27
|
end
|
27
28
|
|
29
|
+
# select rcode, count(*) from responses where time > strftime('%s', 'now') - 300 group by rcode
|
28
30
|
def get_counts counter, from = nil
|
29
31
|
validate_counter counter
|
30
32
|
validate_from from
|
@@ -40,7 +42,7 @@ module DnsOne; class Stat
|
|
40
42
|
|
41
43
|
counts = {}
|
42
44
|
|
43
|
-
|
45
|
+
rsql(s) do |row|
|
44
46
|
_counter, count = row
|
45
47
|
counts[_counter] = count
|
46
48
|
end
|
@@ -128,30 +130,17 @@ module DnsOne; class Stat
|
|
128
130
|
end
|
129
131
|
|
130
132
|
def create_tables
|
131
|
-
|
132
|
-
|
133
|
-
sqls << <<-SQL
|
133
|
+
@db.execute_batch <<-SQL
|
134
134
|
create table responses (
|
135
135
|
time int,
|
136
136
|
rcode int,
|
137
137
|
req_resource int,
|
138
138
|
cache int
|
139
139
|
);
|
140
|
-
SQL
|
141
|
-
|
142
|
-
sqls << <<-SQL
|
143
140
|
CREATE INDEX responses_time_rcode ON responses (time, rcode);
|
144
|
-
SQL
|
145
|
-
|
146
|
-
sqls << <<-SQL
|
147
141
|
CREATE INDEX responses_time_req_resource ON responses (time, req_resource);
|
148
|
-
SQL
|
149
|
-
|
150
|
-
sqls << <<-SQL
|
151
142
|
CREATE INDEX responses_time_cache ON responses (time, cache);
|
152
143
|
SQL
|
153
|
-
|
154
|
-
sqls.each{|sql| @db.execute sql }
|
155
144
|
end
|
156
145
|
|
157
146
|
|
@@ -169,5 +158,23 @@ module DnsOne; class Stat
|
|
169
158
|
name
|
170
159
|
end
|
171
160
|
|
161
|
+
def rsql sql
|
162
|
+
if SQL_PROF
|
163
|
+
t0 = Time.now
|
164
|
+
end
|
165
|
+
|
166
|
+
res = @db.execute sql
|
167
|
+
|
168
|
+
if SQL_PROF
|
169
|
+
@sql_profiler ||= Logger.new '/tmp/dnsone_sql_prof.log'
|
170
|
+
time = Time.now.strftime '%y%m%d-%H%M%S.%L'
|
171
|
+
dur = "%.3f" % ((Time.now - t0) * 1000.0)
|
172
|
+
_sql = sql.gsub /\n+/, ' '
|
173
|
+
@sql_profiler.info "#{time} #{dur} #{_sql}"
|
174
|
+
end
|
175
|
+
|
176
|
+
res
|
177
|
+
end
|
178
|
+
|
172
179
|
end; end
|
173
180
|
|
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.39
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Lobato
|
@@ -177,7 +177,6 @@ files:
|
|
177
177
|
- lib/dns_one/zone_search.rb
|
178
178
|
- util/benchmark-cache_store.rb
|
179
179
|
- util/dns_one.service
|
180
|
-
- util/dnsone_munin_
|
181
180
|
- util/sample_conf.yml
|
182
181
|
homepage: https://tomlobato.github.io/dns_one/
|
183
182
|
licenses:
|
data/util/dnsone_munin_
DELETED
@@ -1,186 +0,0 @@
|
|
1
|
-
#!/root/.rbenv/shims/ruby
|
2
|
-
|
3
|
-
# Install
|
4
|
-
|
5
|
-
# wget https://raw.githubusercontent.com/tomlobato/dns_one/master/util/dnsone_munin_ -O /usr/local/sbin/dnsone_munin_
|
6
|
-
# chmod 755 /usr/local/sbin/dnsone_munin_
|
7
|
-
# dnsone_munin_ install
|
8
|
-
# /etc/init.d/munin-node restart
|
9
|
-
|
10
|
-
require 'active_support/core_ext/hash/conversions'
|
11
|
-
require 'msgpack'
|
12
|
-
require 'ostruct'
|
13
|
-
require 'resolv'
|
14
|
-
|
15
|
-
class MuninDnsOne
|
16
|
-
|
17
|
-
CACHE_FILE = '/tmp/dns_one_cache'
|
18
|
-
CACHE_EXPIRE = 30
|
19
|
-
|
20
|
-
GRAPHS = {
|
21
|
-
rcode: {
|
22
|
-
percent: true,
|
23
|
-
vlabel: '%',
|
24
|
-
fields: %w(not_imp refused yx_domain yxrr_set nxrr_set not_auth not_zone badvers no_error badsig badkey badtime badmode nx_domain badalg badname form_err serv_fail).sort
|
25
|
-
},
|
26
|
-
req_resource: {
|
27
|
-
percent: true,
|
28
|
-
vlabel: '%',
|
29
|
-
fields: %w(a aaaa any cname hinfo minfo mx ns ptr soa txt wks)
|
30
|
-
},
|
31
|
-
cache: {
|
32
|
-
percent: true,
|
33
|
-
vlabel: '%',
|
34
|
-
fields: {
|
35
|
-
hit: 'Domain found in cache.',
|
36
|
-
miss: 'Domain not found in cache, requiring a backend access.',
|
37
|
-
},
|
38
|
-
},
|
39
|
-
requests: {
|
40
|
-
vlabel: 'count',
|
41
|
-
fields: {
|
42
|
-
requests: 'requests',
|
43
|
-
},
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
|
-
def initialize argv
|
48
|
-
@argv = argv
|
49
|
-
end
|
50
|
-
|
51
|
-
def cli
|
52
|
-
case @argv[0]
|
53
|
-
when 'config'
|
54
|
-
@param = get_params
|
55
|
-
config
|
56
|
-
when 'install'
|
57
|
-
install
|
58
|
-
else
|
59
|
-
@param = get_params
|
60
|
-
run
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def graph
|
67
|
-
GRAPHS[@param.graph]
|
68
|
-
end
|
69
|
-
|
70
|
-
def fields
|
71
|
-
if graph[:fields].is_a? Hash
|
72
|
-
graph[:fields]
|
73
|
-
else
|
74
|
-
_fields = {}
|
75
|
-
graph[:fields].each do |field|
|
76
|
-
_fields[field.to_sym] = field
|
77
|
-
end
|
78
|
-
_fields
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def config
|
83
|
-
puts <<-CONFIG
|
84
|
-
graph_category DnsOne
|
85
|
-
graph_title #{@param.graph}
|
86
|
-
graph_vlabel #{graph[:vlabel]}
|
87
|
-
graph_args --base 1000 -l 0
|
88
|
-
|
89
|
-
CONFIG
|
90
|
-
|
91
|
-
fields.each_pair do |k, v|
|
92
|
-
puts "#{k}.label #{k}"
|
93
|
-
end
|
94
|
-
|
95
|
-
exit 0
|
96
|
-
end
|
97
|
-
|
98
|
-
def run
|
99
|
-
stats = get_stats[@param.graph.to_s]
|
100
|
-
|
101
|
-
if graph[:percent]
|
102
|
-
sum = stats.values.reduce(:+).to_f
|
103
|
-
end
|
104
|
-
|
105
|
-
fields.keys.each do |k|
|
106
|
-
value = stats[k] || 0.0
|
107
|
-
if graph[:percent]
|
108
|
-
value *= 100 / sum
|
109
|
-
end
|
110
|
-
puts "#{k}.value #{ value }"
|
111
|
-
end
|
112
|
-
|
113
|
-
exit 0
|
114
|
-
end
|
115
|
-
|
116
|
-
# Util
|
117
|
-
|
118
|
-
def get_params
|
119
|
-
filename = File.basename __FILE__
|
120
|
-
|
121
|
-
if filename =~ /^dnsone_(#{ GRAPHS.keys.join '|' })/
|
122
|
-
graph_key = $1
|
123
|
-
OpenStruct.new(
|
124
|
-
graph: graph_key.to_sym,
|
125
|
-
)
|
126
|
-
else
|
127
|
-
error "Invalid graph type for filename #{filename}."
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def get_stats
|
132
|
-
if false and File.exists?(CACHE_FILE) and
|
133
|
-
(Time.now - File.stat(CACHE_FILE).ctime) < CACHE_EXPIRE
|
134
|
-
MessagePack.unpack File.open(CACHE_FILE, 'rb').read
|
135
|
-
else
|
136
|
-
stat = fetch_stats
|
137
|
-
File.open(CACHE_FILE, 'wb', 0600).write MessagePack.pack(stat)
|
138
|
-
stat
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def fetch_stats
|
143
|
-
stat = {}
|
144
|
-
section = nil
|
145
|
-
|
146
|
-
`dns_one stats`.each_line do |l|
|
147
|
-
if l =~ /---\s*(\S+)\s*---/
|
148
|
-
section = $1
|
149
|
-
elsif l =~ /^(.*?)\s+(.*)$/
|
150
|
-
key = $1.to_sym
|
151
|
-
val = $2.strip.to_f
|
152
|
-
stat[section] ||= {}
|
153
|
-
stat[section][key] = val
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
stat["requests"] = {
|
158
|
-
requests: stat["cache"].values.reduce(:+).to_i
|
159
|
-
}
|
160
|
-
|
161
|
-
stat
|
162
|
-
end
|
163
|
-
|
164
|
-
def install
|
165
|
-
# Links
|
166
|
-
links = []
|
167
|
-
GRAPHS.keys.each do |graph_key|
|
168
|
-
links << graph_key
|
169
|
-
end
|
170
|
-
target = File.expand_path(__FILE__)
|
171
|
-
links.each do |link|
|
172
|
-
system "ln -s #{target} /etc/munin/plugins/dnsone_#{link}"
|
173
|
-
end
|
174
|
-
|
175
|
-
# munin_node_conf
|
176
|
-
munin_node_conf = "[dnsone_*]\nuser root\n\n"
|
177
|
-
File.open('/etc/munin/plugin-conf.d/munin-node', 'a').write munin_node_conf
|
178
|
-
end
|
179
|
-
|
180
|
-
def error msg
|
181
|
-
STDERR.puts msg
|
182
|
-
exit 1
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
MuninDnsOne.new(ARGV).cli
|