sensu-plugin 1.3.0 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2730e59c7a3b4d3dbc9d167d84a5ca0a7e428ae7
4
- data.tar.gz: 4922478ec5392ab0efb0e41bfee2076c175aee7a
3
+ metadata.gz: 3e879511e4d506f0d50d2ecd328eb8cab2c99b35
4
+ data.tar.gz: 717ac6db50d476cb67dcc4268d0d00340117bf35
5
5
  SHA512:
6
- metadata.gz: 76dd04a3e1c2819c4cff3daefbb1f6ffeb250820b8e7d3fcbfa9e9a4f467074b3b25839c3fc166cda4b6131743465bcb12946e8b2de033afb84391897fbe05a2
7
- data.tar.gz: bfdf09aff3a445ffc1a9f94d21d46a28193812e633b8d0c91fb5354d0c3f3b07f50a347cfead92f7d06d6db1c910ac1e461e02d64d7e1ca9b9ee85a829a76703
6
+ metadata.gz: 4321bb33eb3f14d9a971372de91da411417ae352e4c52fd0f671ef71c31d6902f1940f97c9c987dc397a61770da5293aa6902cfccfe6ed03c88639b46ecbb1d9
7
+ data.tar.gz: 5876be24bccca229feafc5f250136fe81f3e4cc20651fef37ad5f09718415eaf2d76d2de3d684cb6a3a845813855a65d57185d7f438aaa575f92765aac77fabd
@@ -24,14 +24,38 @@ module Sensu
24
24
  puts 'ignoring event -- no handler defined'
25
25
  end
26
26
 
27
- # Filters exit the proccess if the event should not be handled.
28
- # Implementation of the default filters is below.
29
27
 
28
+ # Filters exit the proccess if the event should not be handled.
29
+ #
30
+ # Filtering events is deprecated and will be removed in a future release.
31
+ #
30
32
  def filter
31
- filter_disabled
32
- filter_repeated
33
- filter_silenced
34
- filter_dependencies
33
+ if deprecated_filtering_enabled?
34
+ puts 'warning: event filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin'
35
+ filter_disabled
36
+ filter_silenced
37
+ filter_dependencies
38
+ if deprecated_occurrence_filtering_enabled?
39
+ puts 'warning: occurrence filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin'
40
+ filter_repeated
41
+ end
42
+ end
43
+ end
44
+
45
+ # Evaluates whether the event should be processed by any of the filter methods in
46
+ # this library. Defaults to true (i.e. deprecated filters are run by default.)
47
+ #
48
+ # @return [TrueClass, FalseClass]
49
+ def deprecated_filtering_enabled?
50
+ @event['check']['enable_deprecated_filtering'].nil? || @event['check']['enable_deprecated_filtering'] == true
51
+ end
52
+
53
+ # Evaluates whether the event should be processed by the filter_repeated method. Defaults to true (i.e.
54
+ # filter_repeated will filter events by default)
55
+ #
56
+ # @return [TrueClass, FalseClass]
57
+ def deprecated_occurrence_filtering_enabled?
58
+ @event['check']['enable_deprecated_occurrence_filtering'].nil? || @event['check']['enable_deprecated_occurrence_filtering'] == true
35
59
  end
36
60
 
37
61
  # This works just like Plugin::CLI's autorun.
@@ -79,18 +103,28 @@ module Sensu
79
103
  exit 0
80
104
  end
81
105
 
106
+ # Return a hash of API settings derived first from ENV['SENSU_API_URL'] if set,
107
+ # then Sensu config `api` scope if configured, and finally falling back to
108
+ # to ipv4 localhost address on default API port.
109
+ #
110
+ # @return [Hash]
82
111
  def api_settings
83
- @api_settings ||= if ENV['SENSU_API_URL']
112
+ return @api_settings if @api_settings
113
+ case
114
+ when ENV['SENSU_API_URL']
84
115
  uri = URI(ENV['SENSU_API_URL'])
85
- {
116
+ @api_settings = {
86
117
  'host' => uri.host,
87
118
  'port' => uri.port,
88
119
  'user' => uri.user,
89
120
  'password' => uri.password
90
121
  }
91
122
  else
92
- settings['api']
123
+ @api_settings = settings['api'] || {}
124
+ @api_settings['host'] ||= '127.0.0.1'
125
+ @api_settings['port'] ||= 4567
93
126
  end
127
+ @api_settings
94
128
  end
95
129
 
96
130
  def api_request(method, path, &blk)
@@ -98,7 +132,7 @@ module Sensu
98
132
  raise "api.json settings not found."
99
133
  end
100
134
  domain = api_settings['host'].start_with?('http') ? api_settings['host'] : 'http://' + api_settings['host']
101
- uri = URI("#{domain}:#{api_settings['port']}#{path}")
135
+ uri = URI("#{domain}:#{api_settings['port']}#{path}")
102
136
  req = net_http_req_class(method).new(uri)
103
137
  if api_settings['user'] && api_settings['password']
104
138
  req.basic_auth(api_settings['user'], api_settings['password'])
@@ -1,6 +1,6 @@
1
1
  module Sensu
2
2
  module Plugin
3
- VERSION = "1.3.0"
3
+ VERSION = "1.4.0"
4
4
  EXIT_CODES = {
5
5
  'OK' => 0,
6
6
  'WARNING' => 1,
@@ -51,6 +51,7 @@ module Sensu
51
51
  end
52
52
 
53
53
  at_exit do
54
+ exit 3 if $!
54
55
  if @@autorun
55
56
  begin
56
57
  check = @@autorun.new
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module Sensu
2
4
  module Plugin
3
5
  module Utils
@@ -17,7 +19,7 @@ module Sensu
17
19
  end
18
20
 
19
21
  def settings
20
- @settings ||= config_files.map {|f| load_config(f) }.reduce {|a, b| a.deep_merge(b) }
22
+ @settings ||= config_files.map {|f| load_config(f) }.reduce {|a, b| deep_merge(a, b) }
21
23
  end
22
24
 
23
25
  def read_event(file)
@@ -44,23 +46,21 @@ module Sensu
44
46
  Net::HTTP::Put
45
47
  end
46
48
  end
47
- end
48
- end
49
- end
50
-
51
- # Monkey Patching.
52
49
 
53
- class Array
54
- def deep_merge(other_array, &merger)
55
- concat(other_array).uniq
56
- end
57
- end
58
-
59
- class Hash
60
- def deep_merge(other_hash, &merger)
61
- merger ||= proc do |key, old_value, new_value|
62
- old_value.deep_merge(new_value, &merger) rescue new_value
50
+ def deep_merge(hash_one, hash_two)
51
+ merged = hash_one.dup
52
+ hash_two.each do |key, value|
53
+ merged[key] = case
54
+ when hash_one[key].is_a?(Hash) && value.is_a?(Hash)
55
+ deep_merge(hash_one[key], value)
56
+ when hash_one[key].is_a?(Array) && value.is_a?(Array)
57
+ hash_one[key].concat(value).uniq
58
+ else
59
+ value
60
+ end
61
+ end
62
+ merged
63
+ end
63
64
  end
64
- merge(other_hash, &merger)
65
65
  end
66
66
  end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+ require 'sensu-plugin/utils'
3
+
4
+ class TestDeepMerge < MiniTest::Test
5
+ include SensuPluginTestHelper
6
+ include Sensu::Plugin::Utils
7
+
8
+ def test_hash
9
+ merged = deep_merge({:a => "a"}, {:b => "b"})
10
+ assert(merged == {:a => "a", :b => "b"})
11
+ end
12
+
13
+ def test_nested_hash
14
+ merged = deep_merge({:a => {:b => "c"}}, {:a => {:d => "e"}})
15
+ assert(merged == {:a => {:b => "c", :d => "e"}})
16
+ end
17
+
18
+ def test_nested_array
19
+ merged = deep_merge({:a => ["b"]}, {:a => ["c"]})
20
+ assert(merged, {:a => ["b", "c"]})
21
+ end
22
+
23
+ def test_conflicting_types
24
+ merged = deep_merge({:a => {:b => "c"}}, {:a => ["d"]})
25
+ assert(merged, {:a => {:b => "c"}})
26
+ end
27
+ end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestCheckExternal < MiniTest::Unit::TestCase
3
+ class TestCheckExternal < MiniTest::Test
4
4
  include SensuPluginTestHelper
5
5
 
6
6
  def setup
@@ -51,4 +51,11 @@ class TestCheckExternal < MiniTest::Unit::TestCase
51
51
  output = run_script '--doesnotexist'
52
52
  assert $?.exitstatus == 1 && output.include?('doesnotexist') && output.include?('invalid option')
53
53
  end
54
+
55
+ def test_bad_require
56
+ set_script 'external/bad-require' # TODO better way to switch scripts?
57
+ output = run_script '2>&1'
58
+ assert_equal($?.exitstatus, 3)
59
+ assert_match(/LoadError/, output)
60
+ end
54
61
  end
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'minitest/autorun'
3
3
  require 'json'
4
4
 
5
- class TestHandlerArgumentExternal < MiniTest::Unit::TestCase
5
+ class TestHandlerArgumentExternal < MiniTest::Test
6
6
  include SensuPluginTestHelper
7
7
 
8
8
  def test_default
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
  require 'json'
3
3
 
4
- class TestHandlerExternal < MiniTest::Unit::TestCase
4
+ class TestHandlerExternal < MiniTest::Test
5
5
  include SensuPluginTestHelper
6
6
 
7
7
  def setup
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestMetricExternal < MiniTest::Unit::TestCase
3
+ class TestMetricExternal < MiniTest::Test
4
4
  include SensuPluginTestHelper
5
5
 
6
6
  def setup
@@ -14,7 +14,7 @@ class TestMetricExternal < MiniTest::Unit::TestCase
14
14
 
15
15
  end
16
16
 
17
- class TestGraphiteMetricExternal < MiniTest::Unit::TestCase
17
+ class TestGraphiteMetricExternal < MiniTest::Test
18
18
  include SensuPluginTestHelper
19
19
 
20
20
  def setup
@@ -28,7 +28,7 @@ class TestGraphiteMetricExternal < MiniTest::Unit::TestCase
28
28
 
29
29
  end
30
30
 
31
- class TestStatsdMetricExternal < MiniTest::Unit::TestCase
31
+ class TestStatsdMetricExternal < MiniTest::Test
32
32
  include SensuPluginTestHelper
33
33
 
34
34
  def setup
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestFilterExternal < MiniTest::Unit::TestCase
3
+ class TestFilterExternal < MiniTest::Test
4
4
  include SensuPluginTestHelper
5
5
 
6
6
  def setup
@@ -113,4 +113,96 @@ class TestFilterExternal < MiniTest::Unit::TestCase
113
113
  assert_equal(0, $?.exitstatus)
114
114
  assert_match(/dependency event exists/, output)
115
115
  end
116
+
117
+ def filter_deprecation_string
118
+ 'warning: event filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin'
119
+ end
120
+
121
+ def test_filter_deprecation_warning_exists_by_default
122
+ event = {
123
+ 'client' => { 'name' => 'test' },
124
+ 'check' => { 'name' => 'test', 'refresh' => 30 },
125
+ 'occurrences' => 60,
126
+ 'action' => 'create'
127
+ }
128
+ output = run_script_with_input(JSON.generate(event))
129
+ assert_equal(0, $?.exitstatus)
130
+ assert_match(/#{filter_deprecation_string}/, output)
131
+ end
132
+
133
+ def test_filter_deprecation_warning_exists_when_explicitly_enabled
134
+ event = {
135
+ 'client' => { 'name' => 'test' },
136
+ 'check' => { 'name' => 'test', 'refresh' => 30, 'enable_deprecated_filtering' => true },
137
+ 'occurrences' => 60,
138
+ 'action' => 'create'
139
+ }
140
+ output = run_script_with_input(JSON.generate(event))
141
+ assert_equal(0, $?.exitstatus)
142
+ assert_match(/#{filter_deprecation_string}/, output)
143
+ end
144
+
145
+ def test_filter_deprecation_warning_does_not_exist_when_explicitly_disabled
146
+ event = {
147
+ 'client' => { 'name' => 'test' },
148
+ 'check' => {
149
+ 'name' => 'unfiltered test',
150
+ 'refresh' => 30,
151
+ 'enable_deprecated_filtering' => false
152
+ },
153
+ 'occurrences' => 60,
154
+ 'action' => 'create',
155
+ }
156
+ output = run_script_with_input(JSON.generate(event))
157
+ assert_equal(0, $?.exitstatus)
158
+ refute_match(/#{filter_deprecation_string}/, output)
159
+ end
160
+
161
+ def occurrence_filter_deprecation_string
162
+ 'warning: occurrence filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin'
163
+ end
164
+
165
+ def test_occurrence_filter_deprecation_warning_exists_by_default
166
+ event = {
167
+ 'client' => { 'name' => 'test' },
168
+ 'check' => { 'name' => 'test', 'refresh' => 30 },
169
+ 'occurrences' => 60,
170
+ 'action' => 'create'
171
+ }
172
+ output = run_script_with_input(JSON.generate(event))
173
+ assert_equal(0, $?.exitstatus)
174
+ assert_match(/#{occurrence_filter_deprecation_string}/, output)
175
+ end
176
+
177
+ def test_occurrence_filter_deprecation_warning_exists_when_explicitly_enabled
178
+ event = {
179
+ 'client' => { 'name' => 'test' },
180
+ 'check' => {
181
+ 'name' => 'test',
182
+ 'refresh' => 30,
183
+ 'enable_deprecated_occurrence_filtering' => true
184
+ },
185
+ 'occurrences' => 60,
186
+ 'action' => 'create'
187
+ }
188
+ output = run_script_with_input(JSON.generate(event))
189
+ assert_equal(0, $?.exitstatus)
190
+ assert_match(/#{occurrence_filter_deprecation_string}/, output)
191
+ end
192
+
193
+ def test_occurrence_filter_deprecation_warning_does_not_exist_when_explicitly_disabled
194
+ event = {
195
+ 'client' => { 'name' => 'test' },
196
+ 'check' => {
197
+ 'name' => 'unfiltered test',
198
+ 'refresh' => 30,
199
+ 'enable_deprecated_occurrence_filtering' => false
200
+ },
201
+ 'occurrences' => 60,
202
+ 'action' => 'create',
203
+ }
204
+ output = run_script_with_input(JSON.generate(event))
205
+ assert_equal(0, $?.exitstatus)
206
+ refute_match(/#{occurrence_filter_deprecation_string}/, output)
207
+ end
116
208
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestHandleHelpers < MiniTest::Unit::TestCase
3
+ class TestHandleHelpers < MiniTest::Test
4
4
  include SensuPluginTestHelper
5
5
 
6
6
  def setup
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: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Decklin Foster
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-06-06 00:00:00.000000000 Z
12
+ date: 2016-07-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "<="
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: 2.0.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "<="
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: 2.0.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: mixlib-cli
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -82,6 +82,7 @@ files:
82
82
  - lib/sensu-plugin/cli.rb
83
83
  - lib/sensu-plugin/metric/cli.rb
84
84
  - lib/sensu-plugin/utils.rb
85
+ - test/deep_merge_test.rb
85
86
  - test/external_check_test.rb
86
87
  - test/external_handler_argument_test.rb
87
88
  - test/external_handler_test.rb
@@ -110,17 +111,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
111
  version: '0'
111
112
  requirements: []
112
113
  rubyforge_project:
113
- rubygems_version: 2.6.3
114
+ rubygems_version: 2.4.5.1
114
115
  signing_key:
115
116
  specification_version: 4
116
117
  summary: Sensu Plugins
117
118
  test_files:
118
- - test/external_metric_test.rb
119
- - test/handle_helper_test.rb
119
+ - test/deep_merge_test.rb
120
+ - test/external_check_test.rb
120
121
  - test/external_handler_argument_test.rb
121
- - test/handle_filter_test.rb
122
122
  - test/external_handler_test.rb
123
+ - test/external_metric_test.rb
124
+ - test/handle_filter_test.rb
125
+ - test/handle_helper_test.rb
123
126
  - test/mutator_test.rb
124
- - test/external_check_test.rb
125
127
  - test/test_helper.rb
126
128
  has_rdoc: false