dyndnsd 2.0.0.rc1 → 2.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +1 -0
- data/README.md +5 -1
- data/dyndnsd.gemspec +6 -6
- data/lib/dyndnsd.rb +7 -0
- data/lib/dyndnsd/helper.rb +2 -2
- data/lib/dyndnsd/textfile_reporter.rb +110 -0
- data/lib/dyndnsd/version.rb +1 -1
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d12f3aa8ebb411e16c8c9bb117ccd6f3f1f06867c6e4feb2e54400ff7446457
|
4
|
+
data.tar.gz: 8c97f20745b4f1fc494548f5f0ab923eaa311f354228b38ca757033a816332f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84c42e1b4ae0733fd0d266c0349b56d92cf81253046525ecb653e2bc3ca7688f6fd9c42c1d1864bc9e21dddca88ee0be0866feef3cf003705fad12a15d18d353
|
7
|
+
data.tar.gz: 18dac63a9287c6411baab8a325671516ac0663f68a557a7a107e52d10274a02cb1228f79acd167f78cec9d93a02e96c6d6973d522c0fcc4996c8e5de44594a8e
|
data/.rubocop.yml
CHANGED
@@ -34,6 +34,12 @@ Metrics/MethodLength:
|
|
34
34
|
Metrics/PerceivedComplexity:
|
35
35
|
Enabled: false
|
36
36
|
|
37
|
+
Naming/UncommunicativeMethodParamName:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
Naming/MemoizedInstanceVariableName:
|
41
|
+
Enabled: false
|
42
|
+
|
37
43
|
Style/ConditionalAssignment:
|
38
44
|
Enabled: false
|
39
45
|
|
@@ -58,5 +64,8 @@ Style/InverseMethods:
|
|
58
64
|
Style/NegatedIf:
|
59
65
|
Enabled: false
|
60
66
|
|
67
|
+
Style/RescueModifier:
|
68
|
+
Enabled: false
|
69
|
+
|
61
70
|
Style/SymbolArray:
|
62
71
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -11,6 +11,7 @@ IMPROVEMENTS:
|
|
11
11
|
- Add Ruby 2.5 support
|
12
12
|
- Add experimental [OpenTracing](http://opentracing.io/) support with [CNCF Jaeger](https://github.com/jaegertracing/jaeger)
|
13
13
|
- Support host offlining by deleting the associated DNS records
|
14
|
+
- Add textfile reporter to write Graphite-style metrics (also compatible with [Prometheus](https://prometheus.io/)) into a file
|
14
15
|
|
15
16
|
## 1.6.1 (October 31, 2017)
|
16
17
|
|
data/README.md
CHANGED
@@ -135,7 +135,7 @@ The [Debian 6 init.d script](init.d/debian-6-dyndnsd) assumes that dyndnsd.rb is
|
|
135
135
|
|
136
136
|
### Monitoring
|
137
137
|
|
138
|
-
For monitoring dyndnsd.rb uses the [metriks](https://github.com/eric/metriks) framework and exposes several metrics like the number of unauthenticated requests, requests that did (not) update a hostname, etc. By default the most important metrics are shown in the [proctitle](https://github.com/eric/metriks#proc-title-reporter) but you can also configure a [Graphite](https://graphiteapp.org/) backend for central monitoring.
|
138
|
+
For monitoring dyndnsd.rb uses the [metriks](https://github.com/eric/metriks) framework and exposes several metrics like the number of unauthenticated requests, requests that did (not) update a hostname, etc. By default the most important metrics are shown in the [proctitle](https://github.com/eric/metriks#proc-title-reporter) but you can also configure a [Graphite](https://graphiteapp.org/) backend for central monitoring or the [textfile_reporter](https://github.com/prometheus/node_exporter/#textfile-collector) which outputs Graphite-style metrics that are also compatible with Prometheus to a file.
|
139
139
|
|
140
140
|
```yaml
|
141
141
|
host: "0.0.0.0"
|
@@ -147,6 +147,10 @@ graphite:
|
|
147
147
|
host: localhost # defaults for host and port of a carbon server
|
148
148
|
port: 2003
|
149
149
|
prefix: "my.graphite.metrics.naming.structure.dyndnsd"
|
150
|
+
# OR configure the textfile reporter instead of Graphite/proctitle
|
151
|
+
textfile:
|
152
|
+
file: /path/to/file.prom
|
153
|
+
prefix: "my.graphite.metrics.naming.structure.dyndnsd"
|
150
154
|
# configure the updater, here we use command_with_bind_zone, params are updater-specific
|
151
155
|
updater:
|
152
156
|
name: "command_with_bind_zone"
|
data/dyndnsd.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
$LOAD_PATH.push File.expand_path('
|
2
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
3
3
|
|
4
4
|
require 'dyndnsd/version'
|
5
5
|
|
@@ -23,14 +23,14 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency 'rack', '~> 2.0'
|
24
24
|
s.add_runtime_dependency 'json'
|
25
25
|
s.add_runtime_dependency 'metriks'
|
26
|
-
s.add_runtime_dependency 'opentracing', '~> 0.
|
27
|
-
s.add_runtime_dependency 'rack-tracer', '~> 0.
|
28
|
-
s.add_runtime_dependency 'spanmanager', '~> 0.3'
|
29
|
-
s.add_runtime_dependency 'jaeger-client', '~> 0.4'
|
26
|
+
s.add_runtime_dependency 'opentracing', '~> 0.4.0'
|
27
|
+
s.add_runtime_dependency 'rack-tracer', '~> 0.5.0'
|
28
|
+
s.add_runtime_dependency 'spanmanager', '~> 0.3.0'
|
29
|
+
s.add_runtime_dependency 'jaeger-client', '~> 0.4.0'
|
30
30
|
|
31
31
|
s.add_development_dependency 'bundler'
|
32
32
|
s.add_development_dependency 'rake'
|
33
33
|
s.add_development_dependency 'rspec'
|
34
34
|
s.add_development_dependency 'rack-test'
|
35
|
-
s.add_development_dependency 'rubocop', '~> 0.
|
35
|
+
s.add_development_dependency 'rubocop', '~> 0.55.0'
|
36
36
|
end
|
data/lib/dyndnsd.rb
CHANGED
@@ -18,6 +18,7 @@ require 'dyndnsd/responder/dyndns_style'
|
|
18
18
|
require 'dyndnsd/responder/rest_style'
|
19
19
|
require 'dyndnsd/database'
|
20
20
|
require 'dyndnsd/helper'
|
21
|
+
require 'dyndnsd/textfile_reporter'
|
21
22
|
require 'dyndnsd/version'
|
22
23
|
|
23
24
|
module Dyndnsd
|
@@ -235,6 +236,12 @@ module Dyndnsd
|
|
235
236
|
options[:prefix] = config['graphite']['prefix'] if config['graphite']['prefix']
|
236
237
|
reporter = Metriks::Reporter::Graphite.new(host, port, options)
|
237
238
|
reporter.start
|
239
|
+
elsif config['textfile']
|
240
|
+
file = config['textfile']['file'] || '/tmp/dyndnsd-metrics.prom'
|
241
|
+
options = {}
|
242
|
+
options[:prefix] = config['textfile']['prefix'] if config['textfile']['prefix']
|
243
|
+
reporter = Dyndnsd::TextfileReporter.new(file, options)
|
244
|
+
reporter.start
|
238
245
|
else
|
239
246
|
reporter = Metriks::Reporter::ProcTitle.new
|
240
247
|
reporter.add 'good', 'sec' do
|
data/lib/dyndnsd/helper.rb
CHANGED
@@ -0,0 +1,110 @@
|
|
1
|
+
|
2
|
+
# Adapted from https://github.com/eric/metriks-graphite/blob/master/lib/metriks/reporter/graphite.rb
|
3
|
+
|
4
|
+
require 'metriks'
|
5
|
+
|
6
|
+
module Dyndnsd
|
7
|
+
class TextfileReporter
|
8
|
+
attr_reader :file
|
9
|
+
|
10
|
+
def initialize(file, options = {})
|
11
|
+
@file = file
|
12
|
+
|
13
|
+
@prefix = options[:prefix]
|
14
|
+
|
15
|
+
@registry = options[:registry] || Metriks::Registry.default
|
16
|
+
@interval = options[:interval] || 60
|
17
|
+
@on_error = options[:on_error] || proc { |ex| }
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
@thread ||= Thread.new do
|
22
|
+
loop do
|
23
|
+
sleep @interval
|
24
|
+
|
25
|
+
Thread.new do
|
26
|
+
begin
|
27
|
+
write
|
28
|
+
rescue StandardError => e
|
29
|
+
@on_error[e] rescue nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def stop
|
37
|
+
@thread&.kill
|
38
|
+
@thread = nil
|
39
|
+
end
|
40
|
+
|
41
|
+
def restart
|
42
|
+
stop
|
43
|
+
start
|
44
|
+
end
|
45
|
+
|
46
|
+
def write
|
47
|
+
File.open(@file, 'w') do |f|
|
48
|
+
@registry.each do |name, metric|
|
49
|
+
case metric
|
50
|
+
when Metriks::Meter
|
51
|
+
write_metric f, name, metric, [
|
52
|
+
:count, :one_minute_rate, :five_minute_rate,
|
53
|
+
:fifteen_minute_rate, :mean_rate
|
54
|
+
]
|
55
|
+
when Metriks::Counter
|
56
|
+
write_metric f, name, metric, [
|
57
|
+
:count
|
58
|
+
]
|
59
|
+
when Metriks::UtilizationTimer
|
60
|
+
write_metric f, name, metric, [
|
61
|
+
:count, :one_minute_rate, :five_minute_rate,
|
62
|
+
:fifteen_minute_rate, :mean_rate,
|
63
|
+
:min, :max, :mean, :stddev,
|
64
|
+
:one_minute_utilization, :five_minute_utilization,
|
65
|
+
:fifteen_minute_utilization, :mean_utilization
|
66
|
+
], [
|
67
|
+
:median, :get_95th_percentile
|
68
|
+
]
|
69
|
+
when Metriks::Timer
|
70
|
+
write_metric f, name, metric, [
|
71
|
+
:count, :one_minute_rate, :five_minute_rate,
|
72
|
+
:fifteen_minute_rate, :mean_rate,
|
73
|
+
:min, :max, :mean, :stddev
|
74
|
+
], [
|
75
|
+
:median, :get_95th_percentile
|
76
|
+
]
|
77
|
+
when Metriks::Histogram
|
78
|
+
write_metric f, name, metric, [
|
79
|
+
:count, :min, :max, :mean, :stddev
|
80
|
+
], [
|
81
|
+
:median, :get_95th_percentile
|
82
|
+
]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def write_metric(file, base_name, metric, keys, snapshot_keys = [])
|
89
|
+
time = Time.now.to_i
|
90
|
+
|
91
|
+
base_name = base_name.to_s.gsub(/ +/, '_')
|
92
|
+
base_name = "#{@prefix}.#{base_name}" if @prefix
|
93
|
+
|
94
|
+
keys.flatten.each do |key|
|
95
|
+
name = key.to_s.gsub(/^get_/, '')
|
96
|
+
value = metric.send(key)
|
97
|
+
file.write("#{base_name}.#{name} #{value} #{time}\n")
|
98
|
+
end
|
99
|
+
|
100
|
+
unless snapshot_keys.empty?
|
101
|
+
snapshot = metric.snapshot
|
102
|
+
snapshot_keys.flatten.each do |key|
|
103
|
+
name = key.to_s.gsub(/^get_/, '')
|
104
|
+
value = snapshot.send(key)
|
105
|
+
file.write("#{base_name}.#{name} #{value} #{time}\n")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/dyndnsd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyndnsd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Nicolai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -58,56 +58,56 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.4.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.4.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack-tracer
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.5.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.5.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: spanmanager
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 0.3.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 0.3.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: jaeger-client
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 0.4.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 0.4.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: bundler
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.
|
173
|
+
version: 0.55.0
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 0.
|
180
|
+
version: 0.55.0
|
181
181
|
description: A small, lightweight and extensible DynDNS server written with Ruby and
|
182
182
|
Rack.
|
183
183
|
email: chrnicolai@gmail.com
|
@@ -204,6 +204,7 @@ files:
|
|
204
204
|
- lib/dyndnsd/helper.rb
|
205
205
|
- lib/dyndnsd/responder/dyndns_style.rb
|
206
206
|
- lib/dyndnsd/responder/rest_style.rb
|
207
|
+
- lib/dyndnsd/textfile_reporter.rb
|
207
208
|
- lib/dyndnsd/updater/command_with_bind_zone.rb
|
208
209
|
- lib/dyndnsd/version.rb
|
209
210
|
- spec/daemon_spec.rb
|
@@ -230,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
231
|
version: 1.3.1
|
231
232
|
requirements: []
|
232
233
|
rubyforge_project:
|
233
|
-
rubygems_version: 2.7.
|
234
|
+
rubygems_version: 2.7.6
|
234
235
|
signing_key:
|
235
236
|
specification_version: 4
|
236
237
|
summary: dyndnsd.rb
|