riemann-babbler 0.0.1

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.
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source :rubygems
2
+
3
+ gem "riemann-client"
4
+ gem "configatron"
5
+ gem "logger"
6
+ gem "trollop"
7
+ gem "parallel"
8
+
9
+ gem "rspec"
10
+ gem "rake"
11
+
12
+ gem "pry"
13
+ gem "awesome_print"
data/Gemfile.lock ADDED
@@ -0,0 +1,47 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ awesome_print (1.1.0)
5
+ beefcake (0.3.7)
6
+ coderay (1.0.9)
7
+ configatron (2.10.0)
8
+ yamler (>= 0.1.0)
9
+ diff-lcs (1.2.2)
10
+ logger (1.2.8)
11
+ method_source (0.8.1)
12
+ mtrc (0.0.4)
13
+ parallel (0.6.4)
14
+ pry (0.9.12)
15
+ coderay (~> 1.0.5)
16
+ method_source (~> 0.8)
17
+ slop (~> 3.4)
18
+ rake (10.0.4)
19
+ riemann-client (0.2.1)
20
+ beefcake (>= 0.3.5)
21
+ mtrc (>= 0.0.4)
22
+ trollop (>= 1.16.2)
23
+ rspec (2.13.0)
24
+ rspec-core (~> 2.13.0)
25
+ rspec-expectations (~> 2.13.0)
26
+ rspec-mocks (~> 2.13.0)
27
+ rspec-core (2.13.1)
28
+ rspec-expectations (2.13.0)
29
+ diff-lcs (>= 1.1.3, < 2.0)
30
+ rspec-mocks (2.13.0)
31
+ slop (3.4.3)
32
+ trollop (2.0)
33
+ yamler (0.1.0)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ awesome_print
40
+ configatron
41
+ logger
42
+ parallel
43
+ pry
44
+ rake
45
+ riemann-client
46
+ rspec
47
+ trollop
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env ruby
2
+ #encoding: utf-8
3
+
4
+ require 'trollop'
5
+ require 'yaml'
6
+ require 'configatron'
7
+ require 'parallel'
8
+ require 'logger'
9
+
10
+ require File.expand_path('../../lib/riemann/version', __FILE__)
11
+ require File.expand_path('../../lib/deep_merge', __FILE__)
12
+ require File.expand_path('../../lib/riemann/babbler/plugin', __FILE__)
13
+
14
+ opts = Trollop::options do
15
+ version "Riemann babbler #{Babbler::VERSION}"
16
+ banner <<-EOS
17
+ Riemann-babbler is plugin manager for riemann-tools.
18
+
19
+ Usage:
20
+ riemann-babbler [options]
21
+ where [options] are:
22
+ EOS
23
+
24
+ opt :config, "Config file", :default => "/etc/riemann-babbler/config.yml"
25
+ end
26
+
27
+ # logger
28
+ log = Logger.new(STDOUT)
29
+
30
+ # merge configs
31
+ config_file = if File.exist?( opts[:config] )
32
+ YAML.load_file( opts[:config] ).to_hash
33
+ else
34
+ log.error "Can't load config file #{opts[:config]}"
35
+ Hash.new
36
+ end
37
+
38
+ config_default = YAML.load_file( File.expand_path('../../config.yml', __FILE__) )
39
+
40
+ config = config_default.deep_merge( config_file )
41
+ configatron.configure_from_hash config
42
+
43
+ # отправляем к плагинам
44
+ $configatron = configatron
45
+ $logger = log
46
+
47
+ # get plugins
48
+ plugins = []
49
+ default_plugins_dir = File.expand_path('../../lib/riemann/babbler/plugins/', __FILE__)
50
+ Dir.glob( default_plugins_dir + "/*.rb" ) do |file|
51
+ plugins << file
52
+ end
53
+
54
+ unless configatron.plugins.dirs.nil?
55
+ configatron.plugins.dirs.each do |dir|
56
+ next unless Dir.exist? dir
57
+ Dir.glob( dir + "/*.rb" ) do |file|
58
+ plugins << file
59
+ end
60
+ end
61
+ end
62
+
63
+ # start plugins
64
+ Parallel.each( plugins, :in_threads => plugins.count ) do |plugin|
65
+ require "#{plugin}"
66
+ end
data/config.yml ADDED
@@ -0,0 +1,16 @@
1
+ riemann:
2
+ host: riemann-testing-01.undev.cc
3
+ port: 5555
4
+ tags:
5
+ - prod
6
+ - nptv
7
+
8
+ plugins:
9
+ dirs:
10
+ - /etc/riemann-babbler/plugins
11
+ dummy:
12
+ service: dummy service
13
+ interval: 1
14
+ states:
15
+ warning: 70
16
+ critical: 90
data/lib/deep_merge.rb ADDED
@@ -0,0 +1,48 @@
1
+ # https://raw.github.com/Offirmo/hash-deep-merge/master/lib/hash_deep_merge.rb
2
+ class Hash
3
+
4
+ def deep_merge!(specialized_hash)
5
+ return internal_deep_merge!(self, specialized_hash)
6
+ end
7
+
8
+
9
+ def deep_merge(specialized_hash)
10
+ return internal_deep_merge!(Hash.new.replace(self), specialized_hash)
11
+ end
12
+
13
+
14
+ protected
15
+
16
+ # better, recursive, preserving method
17
+ # OK OK this is not the most efficient algorithm,
18
+ # but at last it's *perfectly clear and understandable*
19
+ # so fork and improve if you need 5% more speed, ok ?
20
+ def internal_deep_merge!(source_hash, specialized_hash)
21
+
22
+ #puts "starting deep merge..."
23
+
24
+ specialized_hash.each_pair do |rkey, rval|
25
+ #puts " potential replacing entry : " + rkey.inspect
26
+
27
+ if source_hash.has_key?(rkey) then
28
+ #puts " found potentially conflicting entry for #{rkey.inspect} : #{rval.inspect}, will merge :"
29
+ if rval.is_a?(Hash) and source_hash[rkey].is_a?(Hash) then
30
+ #puts " recursing..."
31
+ internal_deep_merge!(source_hash[rkey], rval)
32
+ elsif rval == source_hash[rkey] then
33
+ #puts " same value, skipping."
34
+ else
35
+ #puts " replacing."
36
+ source_hash[rkey] = rval
37
+ end
38
+ else
39
+ #puts " found new entry #{rkey.inspect}, adding it..."
40
+ source_hash[rkey] = rval
41
+ end
42
+ end
43
+
44
+ #puts "deep merge done."
45
+
46
+ return source_hash
47
+ end
48
+ end
@@ -0,0 +1,77 @@
1
+ module Riemann
2
+ module Babbler
3
+
4
+ require 'riemann/client'
5
+
6
+ def self.included(base)
7
+ base.instance_eval do
8
+ def run
9
+ new.run
10
+ end
11
+
12
+ end
13
+ end
14
+
15
+ def initialize
16
+ @configatron = $configatron
17
+ super
18
+ end
19
+
20
+ def log
21
+ @logger ||= $logger
22
+ end
23
+
24
+ def options
25
+ @configatron
26
+ end
27
+ alias :opts :options
28
+
29
+ def report(event)
30
+ event[:tags] unless options.riemann.tags.nil?
31
+ riemann << event
32
+ end
33
+
34
+ def riemann
35
+ @riemann ||= Riemann::Client.new(
36
+ :host => options.riemann.host,
37
+ :port => options.riemann.port
38
+ )
39
+ end
40
+ alias :r :riemann
41
+
42
+ def run
43
+ t0 = Time.now
44
+ loop do
45
+ begin
46
+ tick
47
+ rescue => e
48
+ $stderr.puts "#{e.class} #{e}\n#{e.backtrace.join "\n"}"
49
+ end
50
+
51
+ # Sleep.
52
+ sleep(plugin.interval - ((Time.now - t0) % plugin.interval))
53
+ end
54
+ end
55
+
56
+ # Переодически вызываемое действие
57
+ def tick
58
+ end
59
+
60
+ # Доступ к конфигу определенного плагина
61
+ def plugin
62
+ end
63
+
64
+ # описание статуса
65
+ def state(my_state)
66
+ case
67
+ when my_state.between?(plugin.states.warning, plugin.states.critical)
68
+ 'warning'
69
+ when my_state > plugin.states.warning
70
+ 'critical'
71
+ else
72
+ 'ok'
73
+ end
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,25 @@
1
+ class Riemann::Babbler::Dummy
2
+ include Riemann::Babbler
3
+
4
+ def plugin
5
+ options.plugins.dummy
6
+ end
7
+
8
+ def status
9
+ Random.rand(100)
10
+ end
11
+
12
+ def tick
13
+ current_status = status
14
+ status = {
15
+ :service => plugin.service,
16
+ :metric => current_status,
17
+ :state => state(current_status)
18
+ }
19
+ log.debug "Report status: #{status.inspect}"
20
+ report status
21
+ end
22
+
23
+ end
24
+
25
+ Riemann::Babbler::Dummy.run
@@ -0,0 +1,3 @@
1
+ module Babbler
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/riemann/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "riemann-babbler"
6
+ s.version = Babbler::VERSION
7
+ s.authors = ["Vasiliev D.V."]
8
+ s.email = %w(vadv.mkn@gmail.com)
9
+ s.homepage = "https://github.com/vadv/riemann-babbler"
10
+ s.summary = %q{Riemann health cheker.}
11
+ s.description = %q{Some plugins mannager for riemann.}
12
+ s.licenses = %w(MIT)
13
+
14
+ s.add_dependency('riemann-client')
15
+ s.add_dependency('configatron')
16
+ s.add_dependency('logger')
17
+ s.add_dependency('trollop')
18
+ s.add_dependency('yaml')
19
+ s.add_dependency('parallel')
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = %w(lib)
25
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: riemann-babbler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Vasiliev D.V.
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: riemann-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: configatron
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: logger
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: trollop
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: yaml
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: parallel
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Some plugins mannager for riemann.
111
+ email:
112
+ - vadv.mkn@gmail.com
113
+ executables:
114
+ - riemann-babbler.rb
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - Gemfile
119
+ - Gemfile.lock
120
+ - Rakefile
121
+ - bin/riemann-babbler.rb
122
+ - config.yml
123
+ - lib/deep_merge.rb
124
+ - lib/riemann/babbler/plugin.rb
125
+ - lib/riemann/babbler/plugins/dummy.rb
126
+ - lib/riemann/version.rb
127
+ - riemann-babbler.gemspec
128
+ homepage: https://github.com/vadv/riemann-babbler
129
+ licenses:
130
+ - MIT
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ segments:
142
+ - 0
143
+ hash: 4400440854509407224
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 1.8.25
153
+ signing_key:
154
+ specification_version: 3
155
+ summary: Riemann health cheker.
156
+ test_files: []