dyndnsd 2.0.0.rc1 → 2.0.0.rc2
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/.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
|