sensu-plugin 0.0.6 → 0.1.0
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/lib/sensu-plugin.rb +1 -1
- data/lib/sensu-plugin/check/cli.rb +6 -2
- data/lib/sensu-plugin/cli.rb +4 -4
- data/lib/sensu-plugin/metric/cli.rb +16 -4
- data/lib/sensu-plugin/util/procs.rb +0 -11
- data/test/external_check_test.rb +7 -9
- data/test/external_handler_test.rb +4 -13
- data/test/external_metric_test.rb +30 -0
- data/test/helper.rb +24 -0
- metadata +10 -6
data/lib/sensu-plugin.rb
CHANGED
@@ -15,8 +15,12 @@ module Sensu
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
18
|
+
def message(msg)
|
19
|
+
@message = msg
|
20
|
+
end
|
21
|
+
|
22
|
+
def output(msg=@message)
|
23
|
+
puts "#{self.class.check_name} #{@status}" + (msg ? ": #{msg}" : "")
|
20
24
|
end
|
21
25
|
|
22
26
|
end
|
data/lib/sensu-plugin/cli.rb
CHANGED
@@ -11,8 +11,7 @@ module Sensu
|
|
11
11
|
# Implementing classes should override this to produce appropriate
|
12
12
|
# output for their handler.
|
13
13
|
|
14
|
-
def
|
15
|
-
output
|
14
|
+
def output(*args)
|
16
15
|
end
|
17
16
|
|
18
17
|
# This will define 'ok', 'warning', 'critical', and 'unknown'
|
@@ -20,7 +19,8 @@ module Sensu
|
|
20
19
|
|
21
20
|
Sensu::Plugin::EXIT_CODES.each do |status, code|
|
22
21
|
define_method(status.downcase) do |*args|
|
23
|
-
|
22
|
+
@status = status
|
23
|
+
output(*args)
|
24
24
|
exit(code)
|
25
25
|
end
|
26
26
|
end
|
@@ -52,7 +52,7 @@ module Sensu
|
|
52
52
|
rescue SystemExit => e
|
53
53
|
exit e.status
|
54
54
|
rescue Exception => e
|
55
|
-
self.new.critical "Check failed to run: #{e}"
|
55
|
+
self.new.critical "Check failed to run: #{e.message}, #{e.backtrace}"
|
56
56
|
end
|
57
57
|
self.new.warning "Check did not exit! You should call an exit code method."
|
58
58
|
end
|
@@ -4,11 +4,23 @@ require 'json'
|
|
4
4
|
module Sensu
|
5
5
|
module Plugin
|
6
6
|
class Metric
|
7
|
-
class CLI
|
7
|
+
class CLI
|
8
8
|
|
9
|
-
|
10
|
-
output
|
11
|
-
|
9
|
+
class JSON < Sensu::Plugin::CLI
|
10
|
+
def output(obj=nil)
|
11
|
+
unless obj.nil? || obj.is_a?(String) || obj.is_a?(Exception)
|
12
|
+
obj['timestamp'] ||= Time.now.to_i
|
13
|
+
puts ::JSON.generate(obj)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Graphite < Sensu::Plugin::CLI
|
19
|
+
def output(path=nil, value=nil, timestamp=Time.now.to_i)
|
20
|
+
unless path.nil? || path.is_a?(Exception) || value.nil?
|
21
|
+
puts [path, value, timestamp].join("\t")
|
22
|
+
end
|
23
|
+
end
|
12
24
|
end
|
13
25
|
|
14
26
|
end
|
@@ -6,17 +6,6 @@ module Sensu
|
|
6
6
|
module Procs
|
7
7
|
|
8
8
|
class << self
|
9
|
-
def get_procs
|
10
|
-
`which tasklist`; $? == 0 ? `tasklist` : `ps aux`
|
11
|
-
end
|
12
|
-
|
13
|
-
def find_proc(name)
|
14
|
-
get_procs.split("\n").find {|ln| ln.include?(name) }
|
15
|
-
end
|
16
|
-
|
17
|
-
def find_proc_regex(pat)
|
18
|
-
get_procs.split("\n").find {|ln| ln =~ pat }
|
19
|
-
end
|
20
9
|
end
|
21
10
|
|
22
11
|
end
|
data/test/external_check_test.rb
CHANGED
@@ -1,18 +1,11 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'minitest/autorun'
|
5
3
|
|
6
4
|
class TestCheckExternal < MiniTest::Unit::TestCase
|
5
|
+
include SensuPluginTestHelper
|
7
6
|
|
8
7
|
def setup
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def run_script(*args)
|
13
|
-
IO.popen([@script] + args, 'r+') do |child|
|
14
|
-
child.read
|
15
|
-
end
|
8
|
+
set_script 'external/check-options'
|
16
9
|
end
|
17
10
|
|
18
11
|
def test_ok
|
@@ -35,6 +28,11 @@ class TestCheckExternal < MiniTest::Unit::TestCase
|
|
35
28
|
assert $?.exitstatus == 3
|
36
29
|
end
|
37
30
|
|
31
|
+
def test_override
|
32
|
+
output = run_script '-O'
|
33
|
+
assert $?.exitstatus == 0 && !output.include?('argv =')
|
34
|
+
end
|
35
|
+
|
38
36
|
def test_fallthrough
|
39
37
|
run_script
|
40
38
|
assert $?.exitstatus == 1
|
@@ -1,21 +1,12 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'minitest/autorun'
|
5
3
|
require 'json'
|
6
4
|
|
7
5
|
class TestHandlerExternal < MiniTest::Unit::TestCase
|
6
|
+
include SensuPluginTestHelper
|
8
7
|
|
9
8
|
def setup
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def run_script(event)
|
14
|
-
output = IO.popen(@script, 'r+') do |child|
|
15
|
-
child.puts JSON.generate(event)
|
16
|
-
child.close_write
|
17
|
-
child.read
|
18
|
-
end
|
9
|
+
set_script 'external/handle-nofilter'
|
19
10
|
end
|
20
11
|
|
21
12
|
def test_handled
|
@@ -24,13 +15,13 @@ class TestHandlerExternal < MiniTest::Unit::TestCase
|
|
24
15
|
'check' => { 'name' => 'test' },
|
25
16
|
'occurrences' => 1,
|
26
17
|
}
|
27
|
-
output =
|
18
|
+
output = run_script_with_input(JSON.generate(event))
|
28
19
|
assert $?.exitstatus == 0 && output =~ /Event:.*test/
|
29
20
|
end
|
30
21
|
|
31
22
|
def test_missing_keys
|
32
23
|
event = {}
|
33
|
-
output =
|
24
|
+
output = run_script_with_input(JSON.generate(event))
|
34
25
|
assert $?.exitstatus == 0 && output =~ /Event:/
|
35
26
|
end
|
36
27
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
class TestMetricExternal < MiniTest::Unit::TestCase
|
5
|
+
include SensuPluginTestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
set_script 'external/trivial-metric'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_ok
|
12
|
+
output = JSON.parse(run_script)
|
13
|
+
assert $?.exitstatus == 0 && output.key?('timestamp')
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class TestGraphiteMetricExternal < MiniTest::Unit::TestCase
|
19
|
+
include SensuPluginTestHelper
|
20
|
+
|
21
|
+
def setup
|
22
|
+
set_script 'external/multi-output'
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_multi
|
26
|
+
lines = run_script.split("\n")
|
27
|
+
assert lines.size == 2 && lines.all? {|line| line.split("\t").size == 3 }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
module SensuPluginTestHelper
|
5
|
+
|
6
|
+
def set_script(script)
|
7
|
+
@script = File.join(File.dirname(__FILE__), script)
|
8
|
+
end
|
9
|
+
|
10
|
+
def run_script(*args)
|
11
|
+
IO.popen([@script] + args, 'r+') do |child|
|
12
|
+
child.read
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def run_script_with_input(input, *args)
|
17
|
+
IO.popen([@script] + args, 'r+') do |child|
|
18
|
+
child.puts input
|
19
|
+
child.close_write
|
20
|
+
child.read
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement: &
|
16
|
+
requirement: &70146182369580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70146182369580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mixlib-cli
|
27
|
-
requirement: &
|
27
|
+
requirement: &70146182367580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 1.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70146182367580
|
36
36
|
description: Plugins and helper libraries for Sensu, a monitoring framework
|
37
37
|
email:
|
38
38
|
- decklin@red-bean.com
|
@@ -48,6 +48,8 @@ files:
|
|
48
48
|
- lib/sensu-plugin.rb
|
49
49
|
- test/external_check_test.rb
|
50
50
|
- test/external_handler_test.rb
|
51
|
+
- test/external_metric_test.rb
|
52
|
+
- test/helper.rb
|
51
53
|
homepage: https://github.com/sonian/sensu-plugin
|
52
54
|
licenses:
|
53
55
|
- MIT
|
@@ -76,3 +78,5 @@ summary: Sensu Plugins
|
|
76
78
|
test_files:
|
77
79
|
- test/external_check_test.rb
|
78
80
|
- test/external_handler_test.rb
|
81
|
+
- test/external_metric_test.rb
|
82
|
+
- test/helper.rb
|