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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aac098254fd64311eda2e12bba4f438f7b7fc6e91a25c24cf3f709b76c1f925e
4
- data.tar.gz: ebee973229eb3c4d4f3a001ed21cffd3a6be400f31bfedb9dbc6529281988657
3
+ metadata.gz: 7d12f3aa8ebb411e16c8c9bb117ccd6f3f1f06867c6e4feb2e54400ff7446457
4
+ data.tar.gz: 8c97f20745b4f1fc494548f5f0ab923eaa311f354228b38ca757033a816332f6
5
5
  SHA512:
6
- metadata.gz: 4497985876b27f5a8afffa1a9fba699a7837a32488035ba725edf5afd13c307f1c741561e75d2c54a5621936e59555da98f903abd43247aa4769d55b4485e340
7
- data.tar.gz: 9f5cf58eb67acee24c0174ec7d65503deef1ccfc44568f118bccb7a0215c84a185e3ba023086ff6ae53a1feb2593793e822c6c16c258e3be588e1164363551d9
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('../lib', __FILE__)
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.3'
27
- s.add_runtime_dependency 'rack-tracer', '~> 0.4'
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.52.1'
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
@@ -13,9 +13,9 @@ module Dyndnsd
13
13
 
14
14
  def self.ip_valid?(ip)
15
15
  IPAddr.new(ip)
16
- return true
16
+ true
17
17
  rescue ArgumentError
18
- return false
18
+ false
19
19
  end
20
20
 
21
21
  def self.user_allowed?(username, password, users)
@@ -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
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Dyndnsd
3
- VERSION = '2.0.0.rc1'.freeze
3
+ VERSION = '2.0.0.rc2'.freeze
4
4
  end
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.rc1
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-03-26 00:00:00.000000000 Z
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: '0.3'
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: '0.3'
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: '0.4'
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: '0.4'
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: '0.3'
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: '0.3'
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: '0.4'
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: '0.4'
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.52.1
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.52.1
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.5
234
+ rubygems_version: 2.7.6
234
235
  signing_key:
235
236
  specification_version: 4
236
237
  summary: dyndnsd.rb