sensu-plugin 2.1.0 → 2.2.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.
- checksums.yaml +4 -4
- data/lib/sensu-handler.rb +34 -49
- data/lib/sensu-mutator.rb +8 -11
- data/lib/sensu-plugin.rb +2 -2
- data/lib/sensu-plugin/check/cli.rb +4 -6
- data/lib/sensu-plugin/cli.rb +8 -10
- data/lib/sensu-plugin/metric/cli.rb +7 -10
- data/lib/sensu-plugin/utils.rb +18 -20
- data/test/cast_bool_value_test.rb +1 -1
- data/test/deep_merge_test.rb +8 -8
- data/test/external_check_test.rb +12 -11
- data/test/external_handler_argument_test.rb +4 -3
- data/test/external_handler_test.rb +4 -4
- data/test/external_metric_test.rb +3 -6
- data/test/handle_filter_test.rb +20 -19
- data/test/handle_helper_test.rb +5 -4
- data/test/mutator_test.rb +3 -2
- data/test/test_helper.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5779d44ecb71e0614dc179fb8ba0db3cd39a3111
|
4
|
+
data.tar.gz: 10795a0823625575f4b1638984a603a65e406eb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b00f35a4eb526215f5c1f13f3732ebb35519491176be7a87495d30279389d4d72b843c1004312fface38633bb5a6d20c9dabb135f99c309a90d3e417ce68d7fc
|
7
|
+
data.tar.gz: 37d95a80143a85142c43b25d7b5651abc71a5fbc6832ee8e2c8350ef443ae8bec75dede44b76541c37082cd24e2b8a30074cfebd4c2dafa16f2387f3ebd5d759
|
data/lib/sensu-handler.rb
CHANGED
@@ -6,7 +6,6 @@ require 'sensu-plugin/utils'
|
|
6
6
|
require 'mixlib/cli'
|
7
7
|
|
8
8
|
module Sensu
|
9
|
-
|
10
9
|
class Handler
|
11
10
|
include Sensu::Plugin::Utils
|
12
11
|
include Mixlib::CLI
|
@@ -24,22 +23,19 @@ module Sensu
|
|
24
23
|
puts 'ignoring event -- no handler defined'
|
25
24
|
end
|
26
25
|
|
27
|
-
|
28
26
|
# Filters exit the proccess if the event should not be handled.
|
29
27
|
#
|
30
28
|
# Filtering events is deprecated and will be removed in a future release.
|
31
29
|
#
|
32
30
|
def filter
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
31
|
+
return unless deprecated_filtering_enabled?
|
32
|
+
puts 'warning: event filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin'
|
33
|
+
filter_disabled
|
34
|
+
filter_silenced
|
35
|
+
filter_dependencies
|
36
|
+
return unless deprecated_occurrence_filtering_enabled?
|
37
|
+
puts 'warning: occurrence filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin'
|
38
|
+
filter_repeated
|
43
39
|
end
|
44
40
|
|
45
41
|
# Evaluates whether the event should be processed by any of the
|
@@ -48,7 +44,7 @@ module Sensu
|
|
48
44
|
#
|
49
45
|
# @return [TrueClass, FalseClass]
|
50
46
|
def deprecated_filtering_enabled?
|
51
|
-
@event['check'].fetch('enable_deprecated_filtering', false).to_s ==
|
47
|
+
@event['check'].fetch('enable_deprecated_filtering', false).to_s == 'true'
|
52
48
|
end
|
53
49
|
|
54
50
|
# Evaluates whether the event should be processed by the
|
@@ -57,7 +53,7 @@ module Sensu
|
|
57
53
|
#
|
58
54
|
# @return [TrueClass, FalseClass]
|
59
55
|
def deprecated_occurrence_filtering_enabled?
|
60
|
-
@event['check'].fetch('enable_deprecated_occurrence_filtering', false).to_s ==
|
56
|
+
@event['check'].fetch('enable_deprecated_occurrence_filtering', false).to_s == 'true'
|
61
57
|
end
|
62
58
|
|
63
59
|
# This works just like Plugin::CLI's autorun.
|
@@ -65,9 +61,7 @@ module Sensu
|
|
65
61
|
@@autorun = self
|
66
62
|
class << self
|
67
63
|
def method_added(name)
|
68
|
-
if name == :handle
|
69
|
-
@@autorun = self
|
70
|
-
end
|
64
|
+
@@autorun = self if name == :handle
|
71
65
|
end
|
72
66
|
end
|
73
67
|
|
@@ -86,7 +80,7 @@ module Sensu
|
|
86
80
|
|
87
81
|
# Helpers and filters.
|
88
82
|
|
89
|
-
def event_summary(trim_at=100)
|
83
|
+
def event_summary(trim_at = 100)
|
90
84
|
summary = @event['check']['notification'] || @event['check']['description']
|
91
85
|
if summary.nil?
|
92
86
|
source = @event['check']['source'] || @event['client']['name']
|
@@ -112,8 +106,7 @@ module Sensu
|
|
112
106
|
# @return [Hash]
|
113
107
|
def api_settings
|
114
108
|
return @api_settings if @api_settings
|
115
|
-
|
116
|
-
when ENV['SENSU_API_URL']
|
109
|
+
if ENV['SENSU_API_URL']
|
117
110
|
uri = URI(ENV['SENSU_API_URL'])
|
118
111
|
@api_settings = {
|
119
112
|
'host' => uri.host,
|
@@ -129,9 +122,9 @@ module Sensu
|
|
129
122
|
@api_settings
|
130
123
|
end
|
131
124
|
|
132
|
-
def api_request(method, path, &
|
125
|
+
def api_request(method, path, &_blk)
|
133
126
|
if api_settings.nil?
|
134
|
-
raise
|
127
|
+
raise 'api.json settings not found.'
|
135
128
|
end
|
136
129
|
domain = api_settings['host'].start_with?('http') ? api_settings['host'] : 'http://' + api_settings['host']
|
137
130
|
uri = URI("#{domain}:#{api_settings['port']}#{path}")
|
@@ -140,16 +133,14 @@ module Sensu
|
|
140
133
|
req.basic_auth(api_settings['user'], api_settings['password'])
|
141
134
|
end
|
142
135
|
yield(req) if block_given?
|
143
|
-
res = Net::HTTP.start(uri.hostname, uri.port, :
|
136
|
+
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
144
137
|
http.request(req)
|
145
138
|
end
|
146
139
|
res
|
147
140
|
end
|
148
141
|
|
149
142
|
def filter_disabled
|
150
|
-
if @event['check']['alert'] == false
|
151
|
-
bail 'alert disabled'
|
152
|
-
end
|
143
|
+
bail 'alert disabled' if @event['check']['alert'] == false
|
153
144
|
end
|
154
145
|
|
155
146
|
def filter_repeated
|
@@ -169,12 +160,10 @@ module Sensu
|
|
169
160
|
if @event['occurrences'] < occurrences
|
170
161
|
bail 'not enough occurrences'
|
171
162
|
end
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
end
|
177
|
-
end
|
163
|
+
return unless @event['occurrences'] > occurrences && @event['action'] == 'create'
|
164
|
+
number = refresh.fdiv(interval).to_i
|
165
|
+
return if number.zero? || ((@event['occurrences'] - occurrences) % number).zero?
|
166
|
+
bail 'only handling every ' + number.to_s + ' occurrences'
|
178
167
|
end
|
179
168
|
|
180
169
|
def stash_exists?(path)
|
@@ -207,27 +196,23 @@ module Sensu
|
|
207
196
|
end
|
208
197
|
|
209
198
|
def filter_dependencies
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
end
|
220
|
-
end
|
221
|
-
rescue Errno::ECONNREFUSED
|
222
|
-
puts 'connection refused attempting to query the sensu api for an event'
|
223
|
-
rescue Timeout::Error
|
224
|
-
puts 'timed out while attempting to query the sensu api for an event'
|
199
|
+
return unless @event['check'].key?('dependencies')
|
200
|
+
return unless @event['check']['dependencies'].is_a?(Array)
|
201
|
+
@event['check']['dependencies'].each do |dependency|
|
202
|
+
begin
|
203
|
+
next if dependency.to_s.empty?
|
204
|
+
Timeout.timeout(2) do
|
205
|
+
check, client = dependency.split('/').reverse
|
206
|
+
if event_exists?(client || @event['client']['name'], check)
|
207
|
+
bail 'check dependency event exists'
|
225
208
|
end
|
226
209
|
end
|
210
|
+
rescue Errno::ECONNREFUSED
|
211
|
+
puts 'connection refused attempting to query the sensu api for an event'
|
212
|
+
rescue Timeout::Error
|
213
|
+
puts 'timed out while attempting to query the sensu api for an event'
|
227
214
|
end
|
228
215
|
end
|
229
216
|
end
|
230
|
-
|
231
217
|
end
|
232
|
-
|
233
218
|
end
|
data/lib/sensu-mutator.rb
CHANGED
@@ -6,12 +6,12 @@
|
|
6
6
|
# DESCRIPTION:
|
7
7
|
# Base mutator class. All you need to do is extend this class and implement a
|
8
8
|
# #mutate function. Uses the autorun feature just like sensu-handler and sensu-plugin/cli
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Example Implementation: described https://sensuapp.org/docs/latest/mutators#example-mutator-plugin
|
11
11
|
#
|
12
12
|
# class Helper < Sensu::Mutator
|
13
13
|
# def mutate
|
14
|
-
# @event.merge!(:
|
14
|
+
# @event.merge!(mutated: true)
|
15
15
|
# end
|
16
16
|
# end
|
17
17
|
#
|
@@ -55,9 +55,7 @@ module Sensu
|
|
55
55
|
@@autorun = self
|
56
56
|
class << self
|
57
57
|
def method_added(name)
|
58
|
-
if name == :mutate
|
59
|
-
@@autorun = self
|
60
|
-
end
|
58
|
+
@@autorun = self if name == :mutate
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
@@ -66,12 +64,11 @@ module Sensu
|
|
66
64
|
end
|
67
65
|
|
68
66
|
at_exit do
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
67
|
+
return unless @@autorun
|
68
|
+
mutator = @@autorun.new
|
69
|
+
mutator.read_event(STDIN)
|
70
|
+
mutator.mutate
|
71
|
+
mutator.dump
|
75
72
|
end
|
76
73
|
end
|
77
74
|
end
|
data/lib/sensu-plugin.rb
CHANGED
@@ -4,13 +4,12 @@ module Sensu
|
|
4
4
|
module Plugin
|
5
5
|
class Check
|
6
6
|
class CLI < Sensu::Plugin::CLI
|
7
|
-
|
8
7
|
class << self
|
9
|
-
def check_name(name=nil)
|
8
|
+
def check_name(name = nil)
|
10
9
|
if name
|
11
10
|
@check_name = name
|
12
11
|
else
|
13
|
-
@check_name ||
|
12
|
+
@check_name || to_s
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|
@@ -19,10 +18,9 @@ module Sensu
|
|
19
18
|
@message = msg
|
20
19
|
end
|
21
20
|
|
22
|
-
def output(msg
|
23
|
-
puts "#{self.class.check_name} #{@status}" + (msg ? ": #{msg}" :
|
21
|
+
def output(msg = @message)
|
22
|
+
puts "#{self.class.check_name} #{@status}" + (msg ? ": #{msg}" : '')
|
24
23
|
end
|
25
|
-
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|
data/lib/sensu-plugin/cli.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'sensu-plugin'
|
2
2
|
require 'mixlib/cli'
|
3
|
+
require 'English'
|
3
4
|
|
4
5
|
module Sensu
|
5
6
|
module Plugin
|
@@ -8,9 +9,9 @@ module Sensu
|
|
8
9
|
|
9
10
|
attr_accessor :argv
|
10
11
|
|
11
|
-
def initialize(argv=ARGV)
|
12
|
+
def initialize(argv = ARGV)
|
12
13
|
super()
|
13
|
-
self.argv =
|
14
|
+
self.argv = parse_options(argv)
|
14
15
|
end
|
15
16
|
|
16
17
|
# Implementing classes should override this to produce appropriate
|
@@ -34,7 +35,7 @@ module Sensu
|
|
34
35
|
# Implementing classes must override this.
|
35
36
|
|
36
37
|
def run
|
37
|
-
unknown
|
38
|
+
unknown 'Not implemented! You should override Sensu::Plugin::CLI#run.'
|
38
39
|
end
|
39
40
|
|
40
41
|
# Behind-the-scenes stuff below. If you do something crazy like
|
@@ -44,14 +45,12 @@ module Sensu
|
|
44
45
|
@@autorun = self
|
45
46
|
class << self
|
46
47
|
def method_added(name)
|
47
|
-
if name == :run
|
48
|
-
@@autorun = self
|
49
|
-
end
|
48
|
+
@@autorun = self if name == :run
|
50
49
|
end
|
51
50
|
end
|
52
51
|
|
53
52
|
at_exit do
|
54
|
-
exit 3 if
|
53
|
+
exit 3 if $ERROR_INFO
|
55
54
|
if @@autorun
|
56
55
|
begin
|
57
56
|
check = @@autorun.new
|
@@ -61,15 +60,14 @@ module Sensu
|
|
61
60
|
rescue OptionParser::InvalidOption => e
|
62
61
|
puts "Invalid check argument(s): #{e.message}, #{e.backtrace}"
|
63
62
|
exit 3
|
64
|
-
rescue Exception => e
|
63
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
65
64
|
# This can't call check.critical, as the check may have failed to construct
|
66
65
|
puts "Check failed to run: #{e.message}, #{e.backtrace}"
|
67
66
|
exit 3
|
68
67
|
end
|
69
|
-
check.warning
|
68
|
+
check.warning 'Check did not exit! You should call an exit code method.'
|
70
69
|
end
|
71
70
|
end
|
72
|
-
|
73
71
|
end
|
74
72
|
end
|
75
73
|
end
|
@@ -5,9 +5,8 @@ module Sensu
|
|
5
5
|
module Plugin
|
6
6
|
class Metric
|
7
7
|
class CLI
|
8
|
-
|
9
8
|
class JSON < Sensu::Plugin::CLI
|
10
|
-
def output(obj=nil)
|
9
|
+
def output(obj = nil)
|
11
10
|
if obj.is_a?(String) || obj.is_a?(Exception)
|
12
11
|
puts obj.to_s
|
13
12
|
elsif obj.is_a?(Hash)
|
@@ -19,13 +18,12 @@ module Sensu
|
|
19
18
|
|
20
19
|
class Graphite < Sensu::Plugin::CLI
|
21
20
|
def output(*args)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
21
|
+
return if args.empty?
|
22
|
+
if args[0].is_a?(Exception) || args[1].nil?
|
23
|
+
puts args[0].to_s
|
24
|
+
else
|
25
|
+
args[2] ||= Time.now.to_i
|
26
|
+
puts args[0..2].join("\s")
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -40,7 +38,6 @@ module Sensu
|
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
43
|
-
|
44
41
|
end
|
45
42
|
end
|
46
43
|
end
|
data/lib/sensu-plugin/utils.rb
CHANGED
@@ -3,7 +3,6 @@ require 'json'
|
|
3
3
|
module Sensu
|
4
4
|
module Plugin
|
5
5
|
module Utils
|
6
|
-
|
7
6
|
def config_files
|
8
7
|
if ENV['SENSU_LOADED_TEMPFILE'] && File.file?(ENV['SENSU_LOADED_TEMPFILE'])
|
9
8
|
IO.read(ENV['SENSU_LOADED_TEMPFILE']).split(':')
|
@@ -15,23 +14,23 @@ module Sensu
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def load_config(filename)
|
18
|
-
JSON.parse(File.open(filename, 'r').read)
|
17
|
+
JSON.parse(File.open(filename, 'r').read)
|
18
|
+
rescue
|
19
|
+
{}
|
19
20
|
end
|
20
21
|
|
21
22
|
def settings
|
22
|
-
@settings ||= config_files.map {|f| load_config(f) }.reduce {|a, b| deep_merge(a, b) }
|
23
|
+
@settings ||= config_files.map { |f| load_config(f) }.reduce { |a, b| deep_merge(a, b) }
|
23
24
|
end
|
24
25
|
|
25
26
|
def read_event(file)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
exit 0
|
34
|
-
end
|
27
|
+
@event = ::JSON.parse(file.read)
|
28
|
+
@event['occurrences'] ||= 1
|
29
|
+
@event['check'] ||= {}
|
30
|
+
@event['client'] ||= {}
|
31
|
+
rescue => e
|
32
|
+
puts 'error reading event: ' + e.message
|
33
|
+
exit 0
|
35
34
|
end
|
36
35
|
|
37
36
|
def net_http_req_class(method)
|
@@ -50,14 +49,13 @@ module Sensu
|
|
50
49
|
def deep_merge(hash_one, hash_two)
|
51
50
|
merged = hash_one.dup
|
52
51
|
hash_two.each do |key, value|
|
53
|
-
merged[key] =
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
52
|
+
merged[key] = if hash_one[key].is_a?(Hash) && value.is_a?(Hash)
|
53
|
+
deep_merge(hash_one[key], value)
|
54
|
+
elsif hash_one[key].is_a?(Array) && value.is_a?(Array)
|
55
|
+
hash_one[key].concat(value).uniq
|
56
|
+
else
|
57
|
+
value
|
58
|
+
end
|
61
59
|
end
|
62
60
|
merged
|
63
61
|
end
|
data/test/deep_merge_test.rb
CHANGED
@@ -6,22 +6,22 @@ class TestDeepMerge < MiniTest::Test
|
|
6
6
|
include Sensu::Plugin::Utils
|
7
7
|
|
8
8
|
def test_hash
|
9
|
-
merged = deep_merge({:a
|
10
|
-
assert(merged == {:
|
9
|
+
merged = deep_merge({ a: 'a' }, b: 'b')
|
10
|
+
assert(merged == { a: 'a', b: 'b' })
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_nested_hash
|
14
|
-
merged = deep_merge({:
|
15
|
-
assert(merged == {:
|
14
|
+
merged = deep_merge({ a: { b: 'c' } }, a: { d: 'e' })
|
15
|
+
assert(merged == { a: { b: 'c', d: 'e' } })
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_nested_array
|
19
|
-
merged = deep_merge({:
|
20
|
-
assert(merged,
|
19
|
+
merged = deep_merge({ a: ['b'] }, a: ['c'])
|
20
|
+
assert(merged, a: %w[b c])
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_conflicting_types
|
24
|
-
merged = deep_merge({:
|
25
|
-
assert(merged,
|
24
|
+
merged = deep_merge({ a: { b: 'c' } }, a: ['d'])
|
25
|
+
assert(merged, a: { b: 'c' })
|
26
26
|
end
|
27
27
|
end
|
data/test/external_check_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'English'
|
2
3
|
|
3
4
|
class TestCheckExternal < MiniTest::Test
|
4
5
|
include SensuPluginTestHelper
|
@@ -9,53 +10,53 @@ class TestCheckExternal < MiniTest::Test
|
|
9
10
|
|
10
11
|
def test_ok
|
11
12
|
run_script '-o'
|
12
|
-
assert
|
13
|
+
assert $CHILD_STATUS.success?
|
13
14
|
end
|
14
15
|
|
15
16
|
def test_warning
|
16
17
|
run_script '-w'
|
17
|
-
assert
|
18
|
+
assert $CHILD_STATUS.exitstatus == 1
|
18
19
|
end
|
19
20
|
|
20
21
|
def test_critical
|
21
22
|
run_script '-c'
|
22
|
-
assert
|
23
|
+
assert $CHILD_STATUS.exitstatus == 2
|
23
24
|
end
|
24
25
|
|
25
26
|
def test_unknown
|
26
27
|
run_script '-u'
|
27
|
-
assert
|
28
|
+
assert $CHILD_STATUS.exitstatus == 3
|
28
29
|
end
|
29
30
|
|
30
31
|
def test_override
|
31
32
|
output = run_script '-O'
|
32
|
-
assert
|
33
|
+
assert $CHILD_STATUS.success? && !output.include?('argv =')
|
33
34
|
end
|
34
35
|
|
35
36
|
def test_fallthrough
|
36
37
|
run_script
|
37
|
-
assert
|
38
|
+
assert $CHILD_STATUS.exitstatus == 1
|
38
39
|
end
|
39
40
|
|
40
41
|
def test_exception
|
41
42
|
output = run_script '-f'
|
42
|
-
assert
|
43
|
+
assert $CHILD_STATUS.exitstatus == 3 && output.include?('failed')
|
43
44
|
end
|
44
45
|
|
45
46
|
def test_argv
|
46
47
|
output = run_script '-o', 'foo'
|
47
|
-
assert
|
48
|
+
assert $CHILD_STATUS.success? && output.include?('argv = foo')
|
48
49
|
end
|
49
50
|
|
50
51
|
def test_bad_commandline
|
51
52
|
output = run_script '--doesnotexist'
|
52
|
-
assert
|
53
|
+
assert $CHILD_STATUS.exitstatus == 3 && output.include?('doesnotexist') && output.include?('invalid option')
|
53
54
|
end
|
54
55
|
|
55
56
|
def test_bad_require
|
56
|
-
set_script 'external/bad-require' # TODO better way to switch scripts?
|
57
|
+
set_script 'external/bad-require' # TODO: better way to switch scripts?
|
57
58
|
output = run_script '2>&1'
|
58
|
-
assert_equal(
|
59
|
+
assert_equal($CHILD_STATUS.exitstatus, 3)
|
59
60
|
assert_match(/LoadError/, output)
|
60
61
|
end
|
61
62
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'English'
|
2
3
|
require 'minitest/autorun'
|
3
4
|
require 'json'
|
4
5
|
|
@@ -8,18 +9,18 @@ class TestHandlerArgumentExternal < MiniTest::Test
|
|
8
9
|
def test_default
|
9
10
|
set_script 'external/handle-argument'
|
10
11
|
output = run_script_with_input(JSON.generate({}))
|
11
|
-
assert
|
12
|
+
assert $CHILD_STATUS.success? && output =~ /Value:\sfoo/
|
12
13
|
end
|
13
14
|
|
14
15
|
def test_short
|
15
16
|
set_script 'external/handle-argument -t bar'
|
16
17
|
output = run_script_with_input(JSON.generate({}))
|
17
|
-
assert
|
18
|
+
assert $CHILD_STATUS.success? && output =~ /Value:\sbar/
|
18
19
|
end
|
19
20
|
|
20
21
|
def test_long
|
21
22
|
set_script 'external/handle-argument --test bar'
|
22
23
|
output = run_script_with_input(JSON.generate({}))
|
23
|
-
assert
|
24
|
+
assert $CHILD_STATUS.success? && output =~ /Value:\sbar/
|
24
25
|
end
|
25
26
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'English'
|
2
3
|
require 'json'
|
3
4
|
|
4
5
|
class TestHandlerExternal < MiniTest::Test
|
@@ -12,16 +13,15 @@ class TestHandlerExternal < MiniTest::Test
|
|
12
13
|
event = {
|
13
14
|
'client' => { 'name' => 'test' },
|
14
15
|
'check' => { 'name' => 'test' },
|
15
|
-
'occurrences' => 1
|
16
|
+
'occurrences' => 1
|
16
17
|
}
|
17
18
|
output = run_script_with_input(JSON.generate(event))
|
18
|
-
assert
|
19
|
+
assert $CHILD_STATUS.success? && output =~ /Event:.*test/
|
19
20
|
end
|
20
21
|
|
21
22
|
def test_missing_keys
|
22
23
|
event = {}
|
23
24
|
output = run_script_with_input(JSON.generate(event))
|
24
|
-
assert
|
25
|
+
assert $CHILD_STATUS.success? && output =~ /Event:/
|
25
26
|
end
|
26
|
-
|
27
27
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'English'
|
2
3
|
|
3
4
|
class TestMetricExternal < MiniTest::Test
|
4
5
|
include SensuPluginTestHelper
|
@@ -9,9 +10,8 @@ class TestMetricExternal < MiniTest::Test
|
|
9
10
|
|
10
11
|
def test_ok
|
11
12
|
output = JSON.parse(run_script)
|
12
|
-
assert
|
13
|
+
assert $CHILD_STATUS.success? && output.key?('timestamp')
|
13
14
|
end
|
14
|
-
|
15
15
|
end
|
16
16
|
|
17
17
|
class TestGraphiteMetricExternal < MiniTest::Test
|
@@ -23,9 +23,8 @@ class TestGraphiteMetricExternal < MiniTest::Test
|
|
23
23
|
|
24
24
|
def test_multi
|
25
25
|
lines = run_script.split("\n")
|
26
|
-
assert lines.size == 2 && lines.all? {|line| line.split("\s").size == 3 }
|
26
|
+
assert lines.size == 2 && lines.all? { |line| line.split("\s").size == 3 }
|
27
27
|
end
|
28
|
-
|
29
28
|
end
|
30
29
|
|
31
30
|
class TestStatsdMetricExternal < MiniTest::Test
|
@@ -43,6 +42,4 @@ class TestStatsdMetricExternal < MiniTest::Test
|
|
43
42
|
assert line.split('|').first.split(':').size == 2
|
44
43
|
end
|
45
44
|
end
|
46
|
-
|
47
45
|
end
|
48
|
-
|
data/test/handle_filter_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'English'
|
2
3
|
require 'tempfile'
|
3
4
|
|
4
5
|
class TestFilterExternal < MiniTest::Test
|
@@ -21,7 +22,7 @@ class TestFilterExternal < MiniTest::Test
|
|
21
22
|
'action' => 'create'
|
22
23
|
}
|
23
24
|
output = run_script_with_input(JSON.generate(event))
|
24
|
-
assert_equal(0,
|
25
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
25
26
|
assert_match(/^not enough occurrences/, output)
|
26
27
|
end
|
27
28
|
|
@@ -38,7 +39,7 @@ class TestFilterExternal < MiniTest::Test
|
|
38
39
|
'action' => 'create'
|
39
40
|
}
|
40
41
|
output = run_script_with_input(JSON.generate(event))
|
41
|
-
assert_equal(0,
|
42
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
42
43
|
assert_match(/^Event:/, output)
|
43
44
|
end
|
44
45
|
|
@@ -55,7 +56,7 @@ class TestFilterExternal < MiniTest::Test
|
|
55
56
|
'action' => 'resolve'
|
56
57
|
}
|
57
58
|
output = run_script_with_input(JSON.generate(event))
|
58
|
-
assert_equal(0,
|
59
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
59
60
|
assert_match(/^not enough occurrences/, output)
|
60
61
|
end
|
61
62
|
|
@@ -71,7 +72,7 @@ class TestFilterExternal < MiniTest::Test
|
|
71
72
|
'action' => 'resolve'
|
72
73
|
}
|
73
74
|
output = run_script_with_input(JSON.generate(event))
|
74
|
-
assert_equal(0,
|
75
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
75
76
|
assert_match(/^Event:/, output)
|
76
77
|
end
|
77
78
|
|
@@ -87,7 +88,7 @@ class TestFilterExternal < MiniTest::Test
|
|
87
88
|
'action' => 'create'
|
88
89
|
}
|
89
90
|
output = run_script_with_input(JSON.generate(event))
|
90
|
-
assert_equal(0,
|
91
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
91
92
|
assert_match(/^Event:/, output)
|
92
93
|
end
|
93
94
|
|
@@ -103,7 +104,7 @@ class TestFilterExternal < MiniTest::Test
|
|
103
104
|
'action' => 'create'
|
104
105
|
}
|
105
106
|
output = run_script_with_input(JSON.generate(event))
|
106
|
-
assert_equal(0,
|
107
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
107
108
|
assert_match(/^only handling every/, output)
|
108
109
|
end
|
109
110
|
|
@@ -115,7 +116,7 @@ class TestFilterExternal < MiniTest::Test
|
|
115
116
|
'action' => 'create'
|
116
117
|
}
|
117
118
|
output = run_script_with_input(JSON.generate(event))
|
118
|
-
assert_equal(0,
|
119
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
119
120
|
assert_match(/^Event:/, output)
|
120
121
|
end
|
121
122
|
|
@@ -127,7 +128,7 @@ class TestFilterExternal < MiniTest::Test
|
|
127
128
|
'action' => 'create'
|
128
129
|
}
|
129
130
|
output = run_script_with_input(JSON.generate(event))
|
130
|
-
assert_equal(0,
|
131
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
131
132
|
assert_match(/^Event:/, output)
|
132
133
|
end
|
133
134
|
|
@@ -142,7 +143,7 @@ class TestFilterExternal < MiniTest::Test
|
|
142
143
|
'occurrences' => 1
|
143
144
|
}
|
144
145
|
output = run_script_with_input(JSON.generate(event))
|
145
|
-
assert_equal(0,
|
146
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
146
147
|
assert_match(/dependency event exists/, output)
|
147
148
|
end
|
148
149
|
|
@@ -158,7 +159,7 @@ class TestFilterExternal < MiniTest::Test
|
|
158
159
|
'action' => 'create'
|
159
160
|
}
|
160
161
|
output = run_script_with_input(JSON.generate(event))
|
161
|
-
assert_equal(0,
|
162
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
162
163
|
refute_match(/#{filter_deprecation_string}/, output)
|
163
164
|
end
|
164
165
|
|
@@ -170,7 +171,7 @@ class TestFilterExternal < MiniTest::Test
|
|
170
171
|
'action' => 'create'
|
171
172
|
}
|
172
173
|
output = run_script_with_input(JSON.generate(event))
|
173
|
-
assert_equal(0,
|
174
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
174
175
|
assert_match(/#{filter_deprecation_string}/, output)
|
175
176
|
end
|
176
177
|
|
@@ -183,10 +184,10 @@ class TestFilterExternal < MiniTest::Test
|
|
183
184
|
'enable_deprecated_filtering' => false
|
184
185
|
},
|
185
186
|
'occurrences' => 60,
|
186
|
-
'action' => 'create'
|
187
|
+
'action' => 'create'
|
187
188
|
}
|
188
189
|
output = run_script_with_input(JSON.generate(event))
|
189
|
-
assert_equal(0,
|
190
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
190
191
|
refute_match(/#{filter_deprecation_string}/, output)
|
191
192
|
end
|
192
193
|
|
@@ -198,7 +199,7 @@ class TestFilterExternal < MiniTest::Test
|
|
198
199
|
'refresh' => 30
|
199
200
|
},
|
200
201
|
'occurrences' => 60,
|
201
|
-
'action' => 'create'
|
202
|
+
'action' => 'create'
|
202
203
|
}
|
203
204
|
|
204
205
|
settings_file = Tempfile.new('global_filter_disable')
|
@@ -207,7 +208,7 @@ class TestFilterExternal < MiniTest::Test
|
|
207
208
|
ENV['SENSU_CONFIG_FILES'] = settings_file.path
|
208
209
|
output = run_script_in_env_with_input(JSON.generate(event), ENV)
|
209
210
|
ENV['SENSU_CONFIG_FILES'] = nil
|
210
|
-
assert_equal(0,
|
211
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
211
212
|
refute_match(/#{filter_deprecation_string}/, output)
|
212
213
|
end
|
213
214
|
|
@@ -223,7 +224,7 @@ class TestFilterExternal < MiniTest::Test
|
|
223
224
|
'action' => 'create'
|
224
225
|
}
|
225
226
|
output = run_script_with_input(JSON.generate(event))
|
226
|
-
assert_equal(0,
|
227
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
227
228
|
refute_match(/#{occurrence_filter_deprecation_string}/, output)
|
228
229
|
end
|
229
230
|
|
@@ -240,7 +241,7 @@ class TestFilterExternal < MiniTest::Test
|
|
240
241
|
'action' => 'create'
|
241
242
|
}
|
242
243
|
output = run_script_with_input(JSON.generate(event))
|
243
|
-
assert_equal(0,
|
244
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
244
245
|
assert_match(/#{occurrence_filter_deprecation_string}/, output)
|
245
246
|
end
|
246
247
|
|
@@ -254,10 +255,10 @@ class TestFilterExternal < MiniTest::Test
|
|
254
255
|
'enable_deprecated_occurrence_filtering' => false
|
255
256
|
},
|
256
257
|
'occurrences' => 60,
|
257
|
-
'action' => 'create'
|
258
|
+
'action' => 'create'
|
258
259
|
}
|
259
260
|
output = run_script_with_input(JSON.generate(event))
|
260
|
-
assert_equal(0,
|
261
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
261
262
|
refute_match(/#{occurrence_filter_deprecation_string}/, output)
|
262
263
|
end
|
263
264
|
end
|
data/test/handle_helper_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'English'
|
2
3
|
|
3
4
|
class TestHandleHelpers < MiniTest::Test
|
4
5
|
include SensuPluginTestHelper
|
@@ -21,19 +22,19 @@ class TestHandleHelpers < MiniTest::Test
|
|
21
22
|
'action' => 'create'
|
22
23
|
}
|
23
24
|
output = run_script_with_input(JSON.generate(event))
|
24
|
-
assert_equal(0,
|
25
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
25
26
|
assert_match("test/test : test\n", output)
|
26
27
|
event['check']['source'] = 'switch-x'
|
27
28
|
output = run_script_with_input(JSON.generate(event))
|
28
|
-
assert_equal(0,
|
29
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
29
30
|
assert_match("switch-x/test : test\n", output)
|
30
31
|
event['check']['description'] = 'y is broken'
|
31
32
|
output = run_script_with_input(JSON.generate(event))
|
32
|
-
assert_equal(0,
|
33
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
33
34
|
assert_match("y is broken\n", output)
|
34
35
|
event['check']['notification'] = 'z is broken'
|
35
36
|
output = run_script_with_input(JSON.generate(event))
|
36
|
-
assert_equal(0,
|
37
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
37
38
|
assert_match("z is broken\n", output)
|
38
39
|
end
|
39
40
|
end
|
data/test/mutator_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'English'
|
2
3
|
|
3
4
|
require 'test_helper'
|
4
5
|
|
@@ -9,7 +10,7 @@ class TestMutatorHelpers < MiniTest::Test
|
|
9
10
|
set_script 'external/mutator-trivial'
|
10
11
|
event = JSON.parse(fixture('basic_event.json').read)
|
11
12
|
output = run_script_with_input(JSON.generate(event))
|
12
|
-
assert_equal(0,
|
13
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
13
14
|
assert_equal(event, JSON.parse(output))
|
14
15
|
end
|
15
16
|
|
@@ -17,7 +18,7 @@ class TestMutatorHelpers < MiniTest::Test
|
|
17
18
|
set_script 'external/mutator-helpers'
|
18
19
|
event = JSON.parse(fixture('basic_event.json').read)
|
19
20
|
output = run_script_with_input(JSON.generate(event))
|
20
|
-
assert_equal(0,
|
21
|
+
assert_equal(0, $CHILD_STATUS.exitstatus)
|
21
22
|
assert_equal(true, JSON.parse(output)['mutated'])
|
22
23
|
end
|
23
24
|
end
|
data/test/test_helper.rb
CHANGED
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: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Decklin Foster
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-08-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -53,6 +53,20 @@ dependencies:
|
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rubocop
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.49.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.49.0
|
56
70
|
- !ruby/object:Gem::Dependency
|
57
71
|
name: minitest
|
58
72
|
requirement: !ruby/object:Gem::Requirement
|