riemann-babbler 1.4.0 → 2.0.0pre1
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/.gitignore +2 -0
- data/Gemfile +2 -16
- data/Gemfile.lock +25 -39
- data/LICENSE.txt +22 -0
- data/README.md +18 -16
- data/bin/riemann-babbler +30 -10
- data/lib/riemann/babbler/errors.rb +13 -0
- data/lib/riemann/babbler/logging.rb +36 -0
- data/lib/riemann/babbler/{support/deep_merge.rb → monkey_patches.rb} +25 -16
- data/lib/riemann/babbler/options.rb +43 -0
- data/lib/riemann/babbler/plugin.rb +154 -0
- data/lib/riemann/babbler/plugin_loader.rb +86 -0
- data/lib/riemann/babbler/plugins/cpu.rb +14 -11
- data/lib/riemann/babbler/plugins/cpu_fan.rb +2 -2
- data/lib/riemann/babbler/plugins/cpu_temp.rb +2 -2
- data/lib/riemann/babbler/plugins/disk.rb +12 -6
- data/lib/riemann/babbler/plugins/{diskstat.rb → disk_stat.rb} +18 -18
- data/lib/riemann/babbler/plugins/errors_reporter.rb +34 -0
- data/lib/riemann/babbler/plugins/exim4.rb +2 -2
- data/lib/riemann/babbler/plugins/find_files.rb +7 -7
- data/lib/riemann/babbler/plugins/haproxy.rb +7 -7
- data/lib/riemann/babbler/plugins/helpers/init.rb +2 -0
- data/lib/riemann/babbler/plugins/helpers/rest.rb +28 -0
- data/lib/riemann/babbler/plugins/helpers/shell.rb +37 -0
- data/lib/riemann/babbler/plugins/http.rb +4 -6
- data/lib/riemann/babbler/plugins/la.rb +11 -3
- data/lib/riemann/babbler/plugins/mdadm.rb +10 -10
- data/lib/riemann/babbler/plugins/mega_cli.rb +2 -2
- data/lib/riemann/babbler/plugins/memory.rb +21 -17
- data/lib/riemann/babbler/plugins/net.rb +7 -5
- data/lib/riemann/babbler/plugins/net_stat.rb +5 -5
- data/lib/riemann/babbler/plugins/nginx.rb +2 -2
- data/lib/riemann/babbler/plugins/pgsql.rb +13 -13
- data/lib/riemann/babbler/plugins/runit.rb +6 -7
- data/lib/riemann/babbler/plugins/status_file.rb +4 -4
- data/lib/riemann/babbler/plugins/tw_cli.rb +5 -5
- data/lib/riemann/babbler/responder.rb +45 -0
- data/lib/riemann/babbler/sender.rb +102 -0
- data/lib/riemann/babbler/version.rb +2 -2
- data/lib/riemann/babbler.rb +8 -175
- data/riemann-babbler.gemspec +30 -26
- metadata +39 -38
- data/config.yml +0 -72
- data/lib/riemann/babbler/plugins/dummy.rb +0 -12
- data/lib/riemann/babbler/start.rb +0 -159
- data/lib/riemann/babbler/support/errors.rb +0 -3
- data/lib/riemann/babbler/support/monkey_patches.rb +0 -42
- data/lib/riemann/babbler/support/plugin_helpers.rb +0 -104
- data/lib/riemann/babbler/support/responder.rb +0 -29
- data/spec/config.yml +0 -15
- data/spec/default.rb +0 -61
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riemann-babbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0pre1
|
5
|
+
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
- Vasiliev
|
8
|
+
- Vasiliev Dmitry
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: riemann-client
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: trollop
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rest-client
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: sys-filesystem
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
79
|
+
name: docile
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
@@ -92,7 +92,7 @@ dependencies:
|
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
95
|
+
name: configatron
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
|
-
name: net-
|
111
|
+
name: net-http-server
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -124,30 +124,30 @@ dependencies:
|
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: bundler
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
|
-
- -
|
131
|
+
- - ~>
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: '
|
134
|
-
type: :
|
133
|
+
version: '1.3'
|
134
|
+
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
none: false
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - ~>
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version: '
|
141
|
+
version: '1.3'
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
143
|
+
name: rake
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
none: false
|
146
146
|
requirements:
|
147
147
|
- - ! '>='
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
|
-
type: :
|
150
|
+
type: :development
|
151
151
|
prerelease: false
|
152
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
153
|
none: false
|
@@ -156,14 +156,14 @@ dependencies:
|
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
- !ruby/object:Gem::Dependency
|
159
|
-
name:
|
159
|
+
name: pry
|
160
160
|
requirement: !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
163
163
|
- - ! '>='
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: '0'
|
166
|
-
type: :
|
166
|
+
type: :development
|
167
167
|
prerelease: false
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
169
|
none: false
|
@@ -171,7 +171,7 @@ dependencies:
|
|
171
171
|
- - ! '>='
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
|
-
description:
|
174
|
+
description: Monitoring tool for riemann
|
175
175
|
email:
|
176
176
|
- vadv.mkn@gmail.com
|
177
177
|
executables:
|
@@ -184,20 +184,29 @@ files:
|
|
184
184
|
- .travis.yml
|
185
185
|
- Gemfile
|
186
186
|
- Gemfile.lock
|
187
|
+
- LICENSE.txt
|
187
188
|
- README.md
|
188
189
|
- Rakefile
|
189
190
|
- bin/riemann-babbler
|
190
|
-
- config.yml
|
191
191
|
- lib/riemann/babbler.rb
|
192
|
+
- lib/riemann/babbler/errors.rb
|
193
|
+
- lib/riemann/babbler/logging.rb
|
194
|
+
- lib/riemann/babbler/monkey_patches.rb
|
195
|
+
- lib/riemann/babbler/options.rb
|
196
|
+
- lib/riemann/babbler/plugin.rb
|
197
|
+
- lib/riemann/babbler/plugin_loader.rb
|
192
198
|
- lib/riemann/babbler/plugins/cpu.rb
|
193
199
|
- lib/riemann/babbler/plugins/cpu_fan.rb
|
194
200
|
- lib/riemann/babbler/plugins/cpu_temp.rb
|
195
201
|
- lib/riemann/babbler/plugins/disk.rb
|
196
|
-
- lib/riemann/babbler/plugins/
|
197
|
-
- lib/riemann/babbler/plugins/
|
202
|
+
- lib/riemann/babbler/plugins/disk_stat.rb
|
203
|
+
- lib/riemann/babbler/plugins/errors_reporter.rb
|
198
204
|
- lib/riemann/babbler/plugins/exim4.rb
|
199
205
|
- lib/riemann/babbler/plugins/find_files.rb
|
200
206
|
- lib/riemann/babbler/plugins/haproxy.rb
|
207
|
+
- lib/riemann/babbler/plugins/helpers/init.rb
|
208
|
+
- lib/riemann/babbler/plugins/helpers/rest.rb
|
209
|
+
- lib/riemann/babbler/plugins/helpers/shell.rb
|
201
210
|
- lib/riemann/babbler/plugins/http.rb
|
202
211
|
- lib/riemann/babbler/plugins/la.rb
|
203
212
|
- lib/riemann/babbler/plugins/mdadm.rb
|
@@ -210,16 +219,10 @@ files:
|
|
210
219
|
- lib/riemann/babbler/plugins/runit.rb
|
211
220
|
- lib/riemann/babbler/plugins/status_file.rb
|
212
221
|
- lib/riemann/babbler/plugins/tw_cli.rb
|
213
|
-
- lib/riemann/babbler/
|
214
|
-
- lib/riemann/babbler/
|
215
|
-
- lib/riemann/babbler/support/errors.rb
|
216
|
-
- lib/riemann/babbler/support/monkey_patches.rb
|
217
|
-
- lib/riemann/babbler/support/plugin_helpers.rb
|
218
|
-
- lib/riemann/babbler/support/responder.rb
|
222
|
+
- lib/riemann/babbler/responder.rb
|
223
|
+
- lib/riemann/babbler/sender.rb
|
219
224
|
- lib/riemann/babbler/version.rb
|
220
225
|
- riemann-babbler.gemspec
|
221
|
-
- spec/config.yml
|
222
|
-
- spec/default.rb
|
223
226
|
homepage: https://github.com/vadv/riemann-babbler
|
224
227
|
licenses:
|
225
228
|
- MIT
|
@@ -236,16 +239,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
236
239
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
237
240
|
none: false
|
238
241
|
requirements:
|
239
|
-
- - ! '
|
242
|
+
- - ! '>'
|
240
243
|
- !ruby/object:Gem::Version
|
241
|
-
version:
|
244
|
+
version: 1.3.1
|
242
245
|
requirements: []
|
243
246
|
rubyforge_project:
|
244
247
|
rubygems_version: 1.8.23
|
245
248
|
signing_key:
|
246
249
|
specification_version: 3
|
247
|
-
summary:
|
248
|
-
test_files:
|
249
|
-
- spec/config.yml
|
250
|
-
- spec/default.rb
|
250
|
+
summary: Monitoring tool for riemann server, aka plugin manager
|
251
|
+
test_files: []
|
251
252
|
has_rdoc:
|
data/config.yml
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
riemann:
|
2
|
-
host: 127.0.0.1
|
3
|
-
port: 5555
|
4
|
-
proto: auto # auto use tcp + udp(max size 16384), tcp - tcp only
|
5
|
-
interval: 60 # update interval for all plugins
|
6
|
-
use_fqdn: true
|
7
|
-
test_connect_on_start: true
|
8
|
-
responder:
|
9
|
-
port: 55755
|
10
|
-
|
11
|
-
logger:
|
12
|
-
level: DEBUG
|
13
|
-
date_time_format: '%Y-%m-%d %H:%M:%S'
|
14
|
-
|
15
|
-
plugins:
|
16
|
-
|
17
|
-
dummy:
|
18
|
-
service: keep alive
|
19
|
-
|
20
|
-
la:
|
21
|
-
service: la
|
22
|
-
states:
|
23
|
-
warning: 4
|
24
|
-
critical: 10
|
25
|
-
|
26
|
-
disk:
|
27
|
-
service: disk
|
28
|
-
states:
|
29
|
-
warning: 70
|
30
|
-
critical: 85
|
31
|
-
|
32
|
-
cpu:
|
33
|
-
service: cpu usage
|
34
|
-
states:
|
35
|
-
warning: 0.7
|
36
|
-
critical: 0.85
|
37
|
-
|
38
|
-
memory:
|
39
|
-
service: memory
|
40
|
-
states:
|
41
|
-
warning: 70
|
42
|
-
critical: 85
|
43
|
-
|
44
|
-
net:
|
45
|
-
service: net
|
46
|
-
|
47
|
-
cpufan:
|
48
|
-
service: cpufan
|
49
|
-
|
50
|
-
cputemp:
|
51
|
-
service: cputemp
|
52
|
-
|
53
|
-
exim4:
|
54
|
-
service: exim4
|
55
|
-
|
56
|
-
mdadm:
|
57
|
-
service: mdadm
|
58
|
-
|
59
|
-
megacli:
|
60
|
-
service: megacli
|
61
|
-
|
62
|
-
twcli:
|
63
|
-
interval: 300
|
64
|
-
|
65
|
-
nginx:
|
66
|
-
service: nginx
|
67
|
-
|
68
|
-
runit:
|
69
|
-
service: runit
|
70
|
-
|
71
|
-
diskstat:
|
72
|
-
service: diskstat
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class Riemann::Babbler::Dummy < Riemann::Babbler
|
2
|
-
|
3
|
-
def collect
|
4
|
-
if tcp_port_aviable?(riemann.host, riemann.port)
|
5
|
-
logger.unknown "Riemann state 'ok' host: #{configatron.riemann.host}, port #{configatron.riemann.port}, proto tcp"
|
6
|
-
else
|
7
|
-
logger.fatal "Can't access to riemann host: #{configatron.riemann.host}, port #{configatron.riemann.port}, proto tcp"
|
8
|
-
end
|
9
|
-
{ :service => plugin.service, :state => 'ok' }
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|
@@ -1,159 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'logger'
|
3
|
-
require 'resolv'
|
4
|
-
|
5
|
-
require 'riemann/babbler/support/deep_merge'
|
6
|
-
require 'riemann/babbler'
|
7
|
-
require 'riemann/babbler/support/responder'
|
8
|
-
|
9
|
-
class Riemann::Babbler::Starter
|
10
|
-
|
11
|
-
attr_reader :logger
|
12
|
-
attr_reader :opts
|
13
|
-
attr_reader :config
|
14
|
-
|
15
|
-
def initialize(opts, configatron)
|
16
|
-
@opts = opts
|
17
|
-
@config = configatron
|
18
|
-
Configatron.log.level = Logger::FATAL
|
19
|
-
Gem::Deprecate.skip = true
|
20
|
-
end
|
21
|
-
|
22
|
-
def logger
|
23
|
-
@logger ||= Logger.new(STDOUT)
|
24
|
-
end
|
25
|
-
|
26
|
-
def start!
|
27
|
-
merge_config
|
28
|
-
set_logger_config
|
29
|
-
load_plugins
|
30
|
-
$riemann = get_riemann
|
31
|
-
Riemann::Responder.new(@config.riemann.responder.port, logger).start
|
32
|
-
start_plugins!
|
33
|
-
end
|
34
|
-
|
35
|
-
def merge_config
|
36
|
-
config_file = if File.exist?( opts[:config] )
|
37
|
-
YAML.load_file( opts[:config] ).to_hash
|
38
|
-
else
|
39
|
-
logger.warn "Can't load config file #{opts[:config]}"
|
40
|
-
Hash.new
|
41
|
-
end
|
42
|
-
config_default = YAML.load_file( File.expand_path('../../../../config.yml', __FILE__) )
|
43
|
-
config_from_file = config_default.deep_merge( config_file )
|
44
|
-
config.configure_from_hash config_from_file
|
45
|
-
end
|
46
|
-
|
47
|
-
def set_logger_config
|
48
|
-
case config.logger.level
|
49
|
-
when 'INFO'
|
50
|
-
logger.level = Logger::INFO
|
51
|
-
when 'WARN'
|
52
|
-
logger.level = Logger::WARN
|
53
|
-
when 'ERROR'
|
54
|
-
logger.level = Logger::ERROR
|
55
|
-
when 'FATAL'
|
56
|
-
logger.level = Logger::FATAL
|
57
|
-
when 'UNKNOWN'
|
58
|
-
logger.level = Logger::UNKNOWN
|
59
|
-
else
|
60
|
-
logger.level = Logger::DEBUG
|
61
|
-
end
|
62
|
-
logger.datetime_format = @config.logger.date_time_format.to_s
|
63
|
-
end
|
64
|
-
|
65
|
-
def load_plugins
|
66
|
-
plugins = Array.new
|
67
|
-
default_plugins_dir = File.expand_path('../plugins/', __FILE__)
|
68
|
-
Dir.glob( default_plugins_dir + '/*.rb') do |file|
|
69
|
-
plugins << file
|
70
|
-
end
|
71
|
-
|
72
|
-
unless config.plugins.dirs.nil?
|
73
|
-
config.plugins.dirs.each do |dir|
|
74
|
-
next unless Dir.exist? dir
|
75
|
-
Dir.glob( dir + '/*.rb') do |file|
|
76
|
-
plugins << file
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
unless config.plugins.files.nil?
|
82
|
-
config.plugins.files.each do |file|
|
83
|
-
plugins << file
|
84
|
-
end
|
85
|
-
end
|
86
|
-
plugins.each { |plugin| require plugin }
|
87
|
-
load_gems_plugins
|
88
|
-
load_parent
|
89
|
-
end
|
90
|
-
|
91
|
-
def load_gems_plugins
|
92
|
-
plugins = Array.new
|
93
|
-
begin
|
94
|
-
Gem.source_index.each do |gem|
|
95
|
-
plugin_name = gem[1].to_s.scan(/\s+name=(.+)\s+/)[0][0]
|
96
|
-
plugins << plugin_name.gsub('-','/') if plugin_name.include? 'riemann-babbler-plugin-'
|
97
|
-
end
|
98
|
-
rescue
|
99
|
-
logger.error "Can't find gems riemann-babbler-plugin-"
|
100
|
-
end
|
101
|
-
plugins.each { |plugin| require plugin }
|
102
|
-
end
|
103
|
-
|
104
|
-
def load_parent
|
105
|
-
config.to_hash[:plugins].each do |plugin, plugin_opts|
|
106
|
-
next if plugin_opts.nil?
|
107
|
-
next unless plugin_opts.kind_of? Hash
|
108
|
-
create_class(plugin.capitalize, plugin_opts[:parent].capitalize) if plugin_opts.has_key? :parent
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def create_class(new_class, parent_class)
|
113
|
-
cmd = "class Riemann::Babbler::#{new_class} < Riemann::Babbler::#{parent_class}; end;"
|
114
|
-
cmd += "Riemann::Babbler.registered_plugins << Riemann::Babbler::#{new_class}"
|
115
|
-
eval(cmd)
|
116
|
-
end
|
117
|
-
|
118
|
-
def get_riemann
|
119
|
-
begin
|
120
|
-
riemann_ip = Resolv.new.getaddress(config.riemann.host)
|
121
|
-
riemann = Riemann::Client.new(
|
122
|
-
:host => riemann_ip,
|
123
|
-
:port => config.riemann.port
|
124
|
-
)
|
125
|
-
riemann = ( config.riemann.proto == 'tcp' ) ? riemann.tcp : riemann
|
126
|
-
riemann.connect if config.test_connect_on_start
|
127
|
-
rescue
|
128
|
-
logger.fatal "Can't resolv or connect to riemann host: #{config.riemann.host}"
|
129
|
-
sleep 5
|
130
|
-
retry
|
131
|
-
end
|
132
|
-
riemann
|
133
|
-
end
|
134
|
-
|
135
|
-
def started_plugins
|
136
|
-
registered_plugins = Riemann::Babbler.registered_plugins.dup
|
137
|
-
run_only = Array.new
|
138
|
-
config.plugins.to_hash.keys.each { |key| run_only << key.to_s }
|
139
|
-
registered_plugins.delete_if {|plugin| ! run_only.include? plugin.to_s.split('::').last.downcase }
|
140
|
-
registered_plugins
|
141
|
-
end
|
142
|
-
|
143
|
-
def start_plugins!
|
144
|
-
plugin_threads = started_plugins.map do |plugin|
|
145
|
-
Thread.new {
|
146
|
-
logger.unknown "Start plugin #{plugin}"
|
147
|
-
plugin.new( config, logger, $riemann ).run
|
148
|
-
}
|
149
|
-
end
|
150
|
-
|
151
|
-
# plugin control
|
152
|
-
Signal.trap 'TERM' do
|
153
|
-
plugin_threads.each( &:kill )
|
154
|
-
end
|
155
|
-
|
156
|
-
plugin_threads.each( &:join )
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Beefcake
|
2
|
-
class Buffer
|
3
|
-
|
4
|
-
def initialize(buf='')
|
5
|
-
if buf.respond_to?(:force_encoding)
|
6
|
-
self.buf = buf.force_encoding('BINARY')
|
7
|
-
else
|
8
|
-
self.buf = buf
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def append_string(s)
|
13
|
-
append_uint64(s.length)
|
14
|
-
if s.respond_to?(:force_encoding)
|
15
|
-
self << s.force_encoding('BINARY')
|
16
|
-
else
|
17
|
-
self << s
|
18
|
-
end
|
19
|
-
end
|
20
|
-
alias :append_bytes :append_string
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class File
|
26
|
-
def tail(n)
|
27
|
-
buffer = 1024
|
28
|
-
idx = (size - buffer).abs
|
29
|
-
chunks = []
|
30
|
-
lines = 0
|
31
|
-
begin
|
32
|
-
seek(idx)
|
33
|
-
chunk = read(buffer)
|
34
|
-
lines += chunk.count("\n")
|
35
|
-
chunks.unshift chunk
|
36
|
-
idx -= buffer
|
37
|
-
end while lines < ( n + 1 ) && pos != 0
|
38
|
-
tail_of_file = chunks.join('')
|
39
|
-
ary = tail_of_file.split(/\n/)
|
40
|
-
lines_to_return = ary[ ary.size - n, ary.size - 1 ]
|
41
|
-
end
|
42
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
#encoding: utf-8
|
2
|
-
|
3
|
-
module Riemann
|
4
|
-
class Babbler
|
5
|
-
|
6
|
-
def helper_error(msg = 'Unknown helper error')
|
7
|
-
report({
|
8
|
-
:service => plugin.service,
|
9
|
-
:state => 'critical',
|
10
|
-
:description => msg
|
11
|
-
})
|
12
|
-
raise Riemann::Babbler::PluginHelperError
|
13
|
-
end
|
14
|
-
|
15
|
-
def plugin_timeout
|
16
|
-
( plugin.interval * 2 ).to_f/3
|
17
|
-
end
|
18
|
-
|
19
|
-
# хэлпер для парса stdout+stderr и exit status
|
20
|
-
def shell(*cmd)
|
21
|
-
exit_status=nil
|
22
|
-
err=nil
|
23
|
-
out=nil
|
24
|
-
begin
|
25
|
-
Timeout::timeout(plugin_timeout) {
|
26
|
-
Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thread|
|
27
|
-
err = stderr.gets(nil)
|
28
|
-
out = stdout.gets(nil)
|
29
|
-
[stdin, stdout, stderr].each{|stream| stream.send('close')}
|
30
|
-
exit_status = wait_thread.value
|
31
|
-
end
|
32
|
-
}
|
33
|
-
rescue => e
|
34
|
-
helper_error "#{e.class} #{e}\n#{e.backtrace.join "\n"}"
|
35
|
-
end
|
36
|
-
if exit_status.to_i > 0
|
37
|
-
err = err.chomp if err
|
38
|
-
helper_error("Error while running shell: " + err.to_s)
|
39
|
-
elsif out
|
40
|
-
return out.strip
|
41
|
-
else
|
42
|
-
# статус 0, вывода stdout нет
|
43
|
-
''
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def file_grep(filename, regexp, max_lines=100)
|
48
|
-
readed_lines = 0
|
49
|
-
lines = Array.new
|
50
|
-
begin
|
51
|
-
Timeout::timeout(plugin_timeout) do
|
52
|
-
File::Tail::Logfile.open(file, :backward => 0) do |log|
|
53
|
-
log.tail do |line|
|
54
|
-
readed_lines += 1
|
55
|
-
lines << line if line.match?(regexp)
|
56
|
-
return lines if readed_lines >= max_lines
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
rescue => e
|
61
|
-
helper_error("#{e.class} #{e}\n#{e.backtrace.join "\n"}")
|
62
|
-
end
|
63
|
-
return lines
|
64
|
-
end
|
65
|
-
|
66
|
-
def tcp_port_aviable?(ip, port)
|
67
|
-
begin
|
68
|
-
Timeout::timeout(plugin_timeout) do
|
69
|
-
begin
|
70
|
-
s = TCPSocket.new(ip, port)
|
71
|
-
s.close
|
72
|
-
return true
|
73
|
-
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
74
|
-
return false
|
75
|
-
end
|
76
|
-
end
|
77
|
-
rescue Timeout::Error
|
78
|
-
return false
|
79
|
-
end
|
80
|
-
false
|
81
|
-
end
|
82
|
-
|
83
|
-
# http rest
|
84
|
-
def rest_get(url)
|
85
|
-
begin
|
86
|
-
Timeout::timeout(plugin_timeout) do
|
87
|
-
begin
|
88
|
-
RestClient.get url
|
89
|
-
rescue
|
90
|
-
helper_error("Get from url: #{url} failed")
|
91
|
-
end
|
92
|
-
end
|
93
|
-
rescue Timeout::Error
|
94
|
-
helper_error("Get from url: #{url}, timeout error")
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# unix timestamp
|
99
|
-
def unixnow
|
100
|
-
Time.now.to_i
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'net/http/server'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
class Riemann::Responder
|
5
|
-
|
6
|
-
def initialize(port = 55755, logger)
|
7
|
-
@port = port
|
8
|
-
@logger = logger
|
9
|
-
@started_at = Time.now.to_i
|
10
|
-
end
|
11
|
-
|
12
|
-
def info
|
13
|
-
{
|
14
|
-
:version => Riemann::Babbler::VERSION,
|
15
|
-
:ruby => "#{RUBY_VERSION}-#{RUBY_PATCHLEVEL}",
|
16
|
-
:uptime => Time.now.to_i - @started_at
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def start
|
21
|
-
Thread.new {
|
22
|
-
@logger.unknown "Start responder 0.0.0.0:#{@port}"
|
23
|
-
Net::HTTP::Server.run(:port => @port) do |request, stream|
|
24
|
-
@logger.unknown "Responder request: #{request}"
|
25
|
-
[200, {'Content-Type' => 'application/json'}, [info.to_json]]
|
26
|
-
end
|
27
|
-
}
|
28
|
-
end
|
29
|
-
end
|
data/spec/config.yml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
riemann:
|
2
|
-
host: hostname_does_not_exists
|
3
|
-
port: 5555
|
4
|
-
proto: auto # auto use tcp + udp(max size 16384), tcp - tcp only
|
5
|
-
interval: 60 # update interval for all plugins
|
6
|
-
use_fqdn: true
|
7
|
-
|
8
|
-
logger:
|
9
|
-
level: FATAL
|
10
|
-
|
11
|
-
plugins:
|
12
|
-
dummy2:
|
13
|
-
parent: dummy
|
14
|
-
run: false
|
15
|
-
interval: 2000
|