riemann-babbler 2.0.0pre11 → 2.0.0pre13
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/Gemfile.lock +12 -2
- data/bin/riemann-babbler +3 -3
- data/lib/riemann/babbler/options.rb +1 -1
- data/lib/riemann/babbler/plugin_loader.rb +11 -17
- data/lib/riemann/babbler/plugin_manager.rb +53 -0
- data/lib/riemann/babbler/plugins/errors_reporter.rb +4 -4
- data/lib/riemann/babbler/plugins/responder.rb +29 -0
- data/lib/riemann/babbler/plugins/runit.rb +1 -1
- data/lib/riemann/babbler/version.rb +1 -1
- data/lib/riemann/babbler.rb +2 -2
- data/riemann-babbler.gemspec +1 -0
- data/test/default_spec.rb +25 -0
- data/test/my_config.yml +10 -0
- metadata +26 -5
- data/lib/riemann/babbler/responder.rb +0 -43
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
riemann-babbler (2.0.
|
4
|
+
riemann-babbler (2.0.0pre13)
|
5
5
|
configatron
|
6
6
|
docile
|
7
7
|
file-tail
|
@@ -21,8 +21,9 @@ GEM
|
|
21
21
|
coderay (1.0.9)
|
22
22
|
configatron (2.13.0)
|
23
23
|
yamler (>= 0.1.0)
|
24
|
+
diff-lcs (1.2.4)
|
24
25
|
docile (1.1.0)
|
25
|
-
ffi (1.9.
|
26
|
+
ffi (1.9.3)
|
26
27
|
file-tail (1.0.12)
|
27
28
|
tins (~> 0.5)
|
28
29
|
method_source (0.8.2)
|
@@ -45,6 +46,14 @@ GEM
|
|
45
46
|
beefcake (>= 0.3.5)
|
46
47
|
mtrc (>= 0.0.4)
|
47
48
|
trollop (>= 1.16.2)
|
49
|
+
rspec (2.14.1)
|
50
|
+
rspec-core (~> 2.14.0)
|
51
|
+
rspec-expectations (~> 2.14.0)
|
52
|
+
rspec-mocks (~> 2.14.0)
|
53
|
+
rspec-core (2.14.7)
|
54
|
+
rspec-expectations (2.14.3)
|
55
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
56
|
+
rspec-mocks (2.14.4)
|
48
57
|
slop (3.4.6)
|
49
58
|
sys-filesystem (1.1.1)
|
50
59
|
ffi
|
@@ -61,3 +70,4 @@ DEPENDENCIES
|
|
61
70
|
pry
|
62
71
|
rake
|
63
72
|
riemann-babbler!
|
73
|
+
rspec
|
data/bin/riemann-babbler
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
require 'trollop'
|
5
5
|
require 'yaml'
|
6
6
|
require_relative '../lib/riemann/babbler'
|
7
|
-
require_relative '../lib/riemann/babbler/plugin'
|
8
7
|
|
9
8
|
include Riemann::Babbler::Logging
|
10
9
|
include Riemann::Babbler::Options
|
@@ -42,5 +41,6 @@ opts.configure_from_hash({ :riemann => cmd_opts })
|
|
42
41
|
merge_config(opts.riemann.config)
|
43
42
|
|
44
43
|
# start
|
45
|
-
Riemann::Babbler::
|
46
|
-
Riemann::Babbler::PluginLoader.new
|
44
|
+
sender = Riemann::Babbler::Sender.new
|
45
|
+
plugins_to_start = Riemann::Babbler::PluginLoader.new.plugin_to_start
|
46
|
+
Riemann::Babbler::PluginManager.new(sender, plugins_to_start).run!
|
@@ -37,7 +37,7 @@ module Riemann
|
|
37
37
|
|
38
38
|
# return string Riemann::Babbler::Plugin::TwCli_3
|
39
39
|
def underscore_to_name(name = 'tw_cli_3', parent = 'Riemann::Babbler::Plugin')
|
40
|
-
parent + '::'
|
40
|
+
parent + '::' + name.to_s.split('_').map { |part|
|
41
41
|
if part.to_i != 0
|
42
42
|
"_#{part}"
|
43
43
|
else
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'plugin'
|
2
|
+
|
1
3
|
module Riemann
|
2
4
|
module Babbler
|
3
5
|
class PluginLoader
|
@@ -19,15 +21,15 @@ module Riemann
|
|
19
21
|
'net',
|
20
22
|
'runit',
|
21
23
|
'tw_cli',
|
22
|
-
'errors_reporter'
|
24
|
+
'errors_reporter',
|
25
|
+
'responder'
|
23
26
|
].freeze
|
24
27
|
|
25
|
-
attr_accessor :
|
28
|
+
attr_accessor :load_plugin_names_from_config, :delete_from_autostart
|
26
29
|
|
27
|
-
def initialize
|
28
|
-
@sender = riemann
|
30
|
+
def initialize
|
29
31
|
@load_plugin_names_from_config = Array.new
|
30
|
-
@delete_from_autostart
|
32
|
+
@delete_from_autostart = Array.new
|
31
33
|
end
|
32
34
|
|
33
35
|
def all_available_plugins
|
@@ -91,7 +93,7 @@ module Riemann
|
|
91
93
|
require_from_config
|
92
94
|
end
|
93
95
|
|
94
|
-
def
|
96
|
+
def plugin_to_start
|
95
97
|
|
96
98
|
started_plugins = []
|
97
99
|
|
@@ -101,7 +103,7 @@ module Riemann
|
|
101
103
|
require_all_plugins!
|
102
104
|
|
103
105
|
plugin_names_to_run = plugin_names_to_run +
|
104
|
-
|
106
|
+
load_plugin_names_from_config.map { |name| name.to_s }
|
105
107
|
|
106
108
|
plugin_names_to_run = (plugin_names_to_run - delete_from_autostart).uniq
|
107
109
|
|
@@ -111,16 +113,8 @@ module Riemann
|
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
-
log :unknown, "Start plugin #{plugin}"
|
117
|
-
plugin.new(sender).run!
|
118
|
-
}
|
119
|
-
end
|
120
|
-
Signal.trap 'TERM' do
|
121
|
-
plugin_threads.each(&:kill)
|
122
|
-
end
|
123
|
-
plugin_threads.each(&:join)
|
116
|
+
log :debug, "Return plugin to start: #{started_plugins}"
|
117
|
+
started_plugins
|
124
118
|
end
|
125
119
|
|
126
120
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Riemann
|
2
|
+
module Babbler
|
3
|
+
class PluginManager
|
4
|
+
|
5
|
+
include Riemann::Babbler::Logging
|
6
|
+
|
7
|
+
attr_accessor :sender
|
8
|
+
|
9
|
+
def initialize(sender, array_of_klasses)
|
10
|
+
@plugins = array_of_klasses
|
11
|
+
@sender = sender
|
12
|
+
end
|
13
|
+
|
14
|
+
def run!
|
15
|
+
hash_of_plugins_and_threads = Hash.new
|
16
|
+
@plugins.map do |plugin|
|
17
|
+
|
18
|
+
unless plugin.new(@sender).send(:run_plugin)
|
19
|
+
log :unknown, "Disable plugin: #{plugin}, because it not started by condition: run_plugin"
|
20
|
+
next
|
21
|
+
end
|
22
|
+
|
23
|
+
hash_of_plugins_and_threads[plugin] = Thread.new {
|
24
|
+
log :unknown, "Start plugin #{plugin}"
|
25
|
+
plugin.new(@sender).run!
|
26
|
+
}
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
Signal.trap 'TERM' do
|
31
|
+
hash_of_plugins_and_threads.values.each(&:kill)
|
32
|
+
end
|
33
|
+
|
34
|
+
loop {
|
35
|
+
check_alive(hash_of_plugins_and_threads)
|
36
|
+
sleep 10
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def check_alive(hash_of_plugins_and_threads)
|
41
|
+
log :debug, "Check alive of threads [#{hash_of_plugins_and_threads.count}]"
|
42
|
+
hash_of_plugins_and_threads.each do |plugin, thread|
|
43
|
+
next if thread.alive?
|
44
|
+
log :error, "Plugin: #{plugin} is #{thread.inspect}, run it..."
|
45
|
+
hash_of_plugins_and_threads[plugin] = Thread.new {
|
46
|
+
plugin.new(@sender).run!
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -6,7 +6,7 @@ class Riemann::Babbler::Plugin::ErrorsReporter < Riemann::Babbler::Plugin
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def collect
|
9
|
-
status
|
9
|
+
status = Array.new
|
10
10
|
messages = Array.new
|
11
11
|
|
12
12
|
opts.errors.to_hash.each do |plugin_name, plugin_status|
|
@@ -22,9 +22,9 @@ class Riemann::Babbler::Plugin::ErrorsReporter < Riemann::Babbler::Plugin
|
|
22
22
|
else
|
23
23
|
@report_ok = false
|
24
24
|
status << {
|
25
|
-
:service
|
26
|
-
:state
|
27
|
-
:metric
|
25
|
+
:service => plugin.service,
|
26
|
+
:state => 'critical',
|
27
|
+
:metric => messages.count,
|
28
28
|
:description => "Problem with plugins:\n #{messages.join("\n")}"
|
29
29
|
}
|
30
30
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'net/http/server'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class Riemann::Babbler::Plugin::Responder < Riemann::Babbler::Plugin
|
5
|
+
|
6
|
+
def init
|
7
|
+
plugin.set_default(:port, opts.riemann.responder_port)
|
8
|
+
plugin.set_default(:started_at, Time.now.to_i)
|
9
|
+
end
|
10
|
+
|
11
|
+
def info
|
12
|
+
{
|
13
|
+
:version => Riemann::Babbler::VERSION,
|
14
|
+
:ruby => "#{RUBY_VERSION}-#{RUBY_PATCHLEVEL}",
|
15
|
+
:uptime => Time.now.to_i - plugin.started_at,
|
16
|
+
:errors => opts.errors.to_hash,
|
17
|
+
:config => opts.riemann.to_hash
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def run!
|
22
|
+
log :unknown, "Start responder 0.0.0.0:#{plugin.port}"
|
23
|
+
::Net::HTTP::Server.run(:port => plugin.port) do |request, _|
|
24
|
+
log :debug, "Responder request: #{request}"
|
25
|
+
[200, { 'Content-Type' => 'application/json' }, [info.to_json]]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -44,7 +44,7 @@ class Riemann::Babbler::Plugin::Runit < Riemann::Babbler::Plugin
|
|
44
44
|
# сервис запущен и работает дольше чем мы приходили к нему в прошлый раз
|
45
45
|
if srv_runned && srv_uptime > plugin.interval
|
46
46
|
@status_history.delete(srv_name)
|
47
|
-
status << { :service => plugin.service + ' ' + srv_name, :state => 'ok', :description => "runit service #{srv_name} running"
|
47
|
+
status << { :service => plugin.service + ' ' + srv_name, :state => 'ok', :description => "runit service #{srv_name} running" }
|
48
48
|
else
|
49
49
|
# сервис запущен но работает подозрительно мало, но последний раз замечен не был
|
50
50
|
if srv_uptime < plugin.interval && srv_runned && !@status_history.include?(srv_name)
|
data/lib/riemann/babbler.rb
CHANGED
@@ -4,5 +4,5 @@ require 'riemann/babbler/logging'
|
|
4
4
|
require 'riemann/babbler/errors'
|
5
5
|
require 'riemann/babbler/monkey_patches'
|
6
6
|
require 'riemann/babbler/sender'
|
7
|
-
require 'riemann/babbler/
|
8
|
-
require 'riemann/babbler/
|
7
|
+
require 'riemann/babbler/plugin_loader'
|
8
|
+
require 'riemann/babbler/plugin_manager'
|
data/riemann-babbler.gemspec
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../lib/riemann/babbler'
|
2
|
+
|
3
|
+
include Riemann::Babbler::Options
|
4
|
+
|
5
|
+
describe 'Riemann Babbler Loader' do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
merge_config(File.expand_path('../my_config.yml', __FILE__))
|
9
|
+
@plugins = Riemann::Babbler::PluginLoader.new.plugin_to_start
|
10
|
+
@plugins = @plugins.map {|plugin| plugin.to_s}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "load from file" do
|
14
|
+
opts.riemann.host.should == 'host_from_yaml'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "load parent plugins" do
|
18
|
+
@plugins.should include('Riemann::Babbler::Plugin::Disk_1')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "load parent from array" do
|
22
|
+
@plugins.should include('Riemann::Babbler::Plugin::Cpu_1')
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/test/my_config.yml
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riemann-babbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.0pre13
|
5
5
|
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: riemann-client
|
@@ -203,6 +203,22 @@ dependencies:
|
|
203
203
|
- - ! '>='
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: '0'
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: rspec
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ! '>='
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
206
222
|
- !ruby/object:Gem::Dependency
|
207
223
|
name: pry
|
208
224
|
requirement: !ruby/object:Gem::Requirement
|
@@ -243,6 +259,7 @@ files:
|
|
243
259
|
- lib/riemann/babbler/options.rb
|
244
260
|
- lib/riemann/babbler/plugin.rb
|
245
261
|
- lib/riemann/babbler/plugin_loader.rb
|
262
|
+
- lib/riemann/babbler/plugin_manager.rb
|
246
263
|
- lib/riemann/babbler/plugins/cpu.rb
|
247
264
|
- lib/riemann/babbler/plugins/cpu_fan.rb
|
248
265
|
- lib/riemann/babbler/plugins/cpu_temp.rb
|
@@ -265,13 +282,15 @@ files:
|
|
265
282
|
- lib/riemann/babbler/plugins/net_stat.rb
|
266
283
|
- lib/riemann/babbler/plugins/nginx.rb
|
267
284
|
- lib/riemann/babbler/plugins/pgsql.rb
|
285
|
+
- lib/riemann/babbler/plugins/responder.rb
|
268
286
|
- lib/riemann/babbler/plugins/runit.rb
|
269
287
|
- lib/riemann/babbler/plugins/status_file.rb
|
270
288
|
- lib/riemann/babbler/plugins/tw_cli.rb
|
271
|
-
- lib/riemann/babbler/responder.rb
|
272
289
|
- lib/riemann/babbler/sender.rb
|
273
290
|
- lib/riemann/babbler/version.rb
|
274
291
|
- riemann-babbler.gemspec
|
292
|
+
- test/default_spec.rb
|
293
|
+
- test/my_config.yml
|
275
294
|
homepage: https://github.com/vadv/riemann-babbler
|
276
295
|
licenses:
|
277
296
|
- MIT
|
@@ -287,7 +306,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
287
306
|
version: '0'
|
288
307
|
segments:
|
289
308
|
- 0
|
290
|
-
hash: -
|
309
|
+
hash: -4537148055138242403
|
291
310
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
292
311
|
none: false
|
293
312
|
requirements:
|
@@ -300,4 +319,6 @@ rubygems_version: 1.8.23
|
|
300
319
|
signing_key:
|
301
320
|
specification_version: 3
|
302
321
|
summary: Monitoring tool for riemann server, aka plugin manager
|
303
|
-
test_files:
|
322
|
+
test_files:
|
323
|
+
- test/default_spec.rb
|
324
|
+
- test/my_config.yml
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'net/http/server'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
module Riemann
|
5
|
-
module Babbler
|
6
|
-
|
7
|
-
class Responder
|
8
|
-
|
9
|
-
|
10
|
-
include Riemann::Babbler::Logging
|
11
|
-
include Riemann::Babbler::Options
|
12
|
-
|
13
|
-
attr_accessor :port, :started_at
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
@port = opts.riemann.responder_port
|
17
|
-
@started_at = Time.now.to_i
|
18
|
-
end
|
19
|
-
|
20
|
-
def info
|
21
|
-
{
|
22
|
-
:version => Riemann::Babbler::VERSION,
|
23
|
-
:ruby => "#{RUBY_VERSION}-#{RUBY_PATCHLEVEL}",
|
24
|
-
:uptime => Time.now.to_i - started_at,
|
25
|
-
:errors => opts.errors.to_hash,
|
26
|
-
:config => opts.riemann.to_hash
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
def run!
|
31
|
-
Thread.new {
|
32
|
-
log :unknown, "Start responder 0.0.0.0:#{port}"
|
33
|
-
Net::HTTP::Server.run(:port => port) do |request, _|
|
34
|
-
log :debug, "Responder request: #{request}"
|
35
|
-
[200, { 'Content-Type' => 'application/json' }, [info.to_json]]
|
36
|
-
end
|
37
|
-
}
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|