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 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