sensu-extensions 1.1.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4bc92d117b837c89057ba3c0dec38b2bd76db80
4
- data.tar.gz: f3fc9a6727262dca6e5d84991e767d0e5c91fdcb
3
+ metadata.gz: 04d00508af30e89a1a38b0650a63f074e811ada1
4
+ data.tar.gz: 5083b62566dba206901dc347e25c62ab3194d381
5
5
  SHA512:
6
- metadata.gz: 9cfeb24e06c88fb9966a8f882a70a5554bc92b33e9fd42986585a140890a9ac567cb36674fde37e147f6ba8019552edf09753bc9e59bc735dad71fd66b6e19a5
7
- data.tar.gz: fb778e2d246b5764e37d25142b85a23ead28bd2001f5b40461b2e426d645e85d41248264bd5fdf1d3c23cdf589f7491f85b7927a17188a6163710a0c5ae1327e
6
+ metadata.gz: 0946b60f6b1cfd83a3f0cf8752be939efc4486de04d59c479c5a46ceafd72327de614d671de30c8f872a77a9a3556528f826b856bbf2439a17f8c9eb00d87081
7
+ data.tar.gz: a199a58d8a12fcbc7156426da9f2d71fbf12d0821d9b696c683a8f564c0dde70c1fc94a5bcb911235c5c66f054d2c8115c7cd73ad008252f8ba418b529a04ccd
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
3
4
  - 1.8.7
@@ -80,7 +80,7 @@ module Sensu
80
80
  def load_directory(directory)
81
81
  warning("loading extension files from directory", :directory => directory)
82
82
  path = directory.gsub(/\\(?=\S)/, "/")
83
- Dir.glob(File.join(path, "**/*.rb")).each do |file|
83
+ Dir.glob(File.join(path, "**{,/*/**}/*.rb")).each do |file|
84
84
  load_file(file)
85
85
  end
86
86
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "sensu-extensions"
5
- spec.version = "1.1.0"
5
+ spec.version = "1.2.0"
6
6
  spec.authors = ["Sean Porter"]
7
7
  spec.email = ["portertech@gmail.com"]
8
8
  spec.summary = "The Sensu extension loader library"
@@ -1,11 +1 @@
1
- {
2
- "filters": {
3
- "production": {
4
- "attributes": {
5
- "client": {
6
- "environment": "production"
7
- }
8
- }
9
- }
10
- }
11
- }
1
+ {}
@@ -0,0 +1,17 @@
1
+ module Sensu
2
+ module Extension
3
+ class SymlinkedCheck < Check
4
+ def name
5
+ "symlinked_check"
6
+ end
7
+
8
+ def description
9
+ "returns 'foo'"
10
+ end
11
+
12
+ def run
13
+ yield "foo", 0
14
+ end
15
+ end
16
+ end
17
+ end
@@ -40,21 +40,20 @@ describe "Sensu::Extensions" do
40
40
 
41
41
  it "can load extensions from a directory" do
42
42
  extensions = Sensu::Extensions.load(:extension_dir => @extension_dir)
43
- expect(extensions.loaded_files.size).to eq(2)
43
+ expect(extensions.loaded_files.size).to eq(3)
44
44
  expect(extensions.handler_exists?("test")).to be(true)
45
45
  expect(extensions.check_exists?("mock_check")).to be(true)
46
46
  end
47
47
 
48
48
  it "can load extensions from one or more directories" do
49
49
  extensions = Sensu::Extensions.load(:extension_dirs => [@extension_dir])
50
- expect(extensions.loaded_files.size).to eq(2)
50
+ expect(extensions.loaded_files.size).to eq(3)
51
51
  expect(extensions.handler_exists?("test")).to be(true)
52
52
  expect(extensions.check_exists?("mock_check")).to be(true)
53
53
  end
54
54
 
55
55
  it "can load the built-in extensions" do
56
56
  extensions = Sensu::Extensions.load
57
- expect(extensions.filter_exists?("attributes")).to be(true)
58
57
  expect(extensions.mutator_exists?("json")).to be(true)
59
58
  expect(extensions.mutator_exists?("ruby_hash")).to be(true)
60
59
  expect(extensions.mutator_exists?("only_check_output")).to be(true)
data/spec/loader_spec.rb CHANGED
@@ -39,10 +39,10 @@ describe "Sensu::Extensions::Loader" do
39
39
  expect(@loader.loaded_files).to be_empty
40
40
  end
41
41
 
42
- it "can load extensions from a directory" do
42
+ it "can load extensions from a directory containing directory symlinks" do
43
43
  @loader.load_directory(@extension_dir)
44
- expect(@loader.warnings.size).to eq(6)
45
- expect(@loader.loaded_files.size).to eq(2)
44
+ expect(@loader.warnings.size).to eq(7)
45
+ expect(@loader.loaded_files.size).to eq(3)
46
46
  extension = Sensu::Extension::Test.new
47
47
  expect(extension).to respond_to(:name, :description, :definition, :safe_run, :stop, :has_key?, :[])
48
48
  extension = Sensu::Extension::MockCheck.new
@@ -79,7 +79,6 @@ describe "Sensu::Extensions::Loader" do
79
79
  expect(@loader.all).to include(extension)
80
80
  expect(@loader.handler_exists?("debug")).to be(true)
81
81
  expect(@loader.mutator_exists?("only_check_output")).to be(true)
82
- expect(@loader.filter_exists?("attributes")).to be(true)
83
82
  end
84
83
 
85
84
  it "can load specific extension categories for a sensu client" do
@@ -93,7 +92,6 @@ describe "Sensu::Extensions::Loader" do
93
92
  @loader.load_instances("server")
94
93
  expect(@loader.handler_exists?("debug")).to be(true)
95
94
  expect(@loader.mutator_exists?("only_check_output")).to be(true)
96
- expect(@loader.filter_exists?("attributes")).to be(true)
97
95
  expect(@loader.check_exists?("mock_check")).to be(false)
98
96
  end
99
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Porter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-03 00:00:00.000000000 Z
11
+ date: 2015-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-em
@@ -164,7 +164,6 @@ files:
164
164
  - README.md
165
165
  - Rakefile
166
166
  - lib/sensu/extensions.rb
167
- - lib/sensu/extensions/filters/attributes.rb
168
167
  - lib/sensu/extensions/handlers/debug.rb
169
168
  - lib/sensu/extensions/loader.rb
170
169
  - lib/sensu/extensions/mutators/json.rb
@@ -175,8 +174,8 @@ files:
175
174
  - spec/assets/extensions/error.rb
176
175
  - spec/assets/extensions/mock_check.rb
177
176
  - spec/assets/extensions/test.rb
177
+ - spec/assets/extensions_symlinked/symlinked_check.rb
178
178
  - spec/extensions_spec.rb
179
- - spec/filters/attributes_spec.rb
180
179
  - spec/handlers/debug_spec.rb
181
180
  - spec/helpers.rb
182
181
  - spec/loader_spec.rb
@@ -212,8 +211,8 @@ test_files:
212
211
  - spec/assets/extensions/error.rb
213
212
  - spec/assets/extensions/mock_check.rb
214
213
  - spec/assets/extensions/test.rb
214
+ - spec/assets/extensions_symlinked/symlinked_check.rb
215
215
  - spec/extensions_spec.rb
216
- - spec/filters/attributes_spec.rb
217
216
  - spec/handlers/debug_spec.rb
218
217
  - spec/helpers.rb
219
218
  - spec/loader_spec.rb
@@ -1,71 +0,0 @@
1
- require "sensu/extension"
2
-
3
- module Sensu
4
- module Sandbox
5
- def self.eval(eval_string, value=nil)
6
- result = Proc.new do
7
- $SAFE = (RUBY_VERSION < "2.1.0" ? 4 : 3)
8
- Kernel.eval(eval_string)
9
- end
10
- result.call
11
- end
12
- end
13
-
14
- module Extension
15
- class Attributes < Filter
16
- def name
17
- "attributes"
18
- end
19
-
20
- def description
21
- "filters events using event attributes"
22
- end
23
-
24
- def run(event, options)
25
- status = filter_event?(options[:filter_name], event) ? 0 : 1
26
- yield "", status
27
- end
28
-
29
- def eval_attribute_value(raw_eval_string, value)
30
- begin
31
- eval_string = raw_eval_string.gsub(/^eval:(\s+)?/, "")
32
- !!Sandbox.eval(eval_string, value)
33
- rescue => error
34
- @logger.error("filter attribute eval error", {
35
- :raw_eval_string => raw_eval_string,
36
- :value => value,
37
- :error => error.to_s
38
- })
39
- false
40
- end
41
- end
42
-
43
- def attributes_match?(hash_one, hash_two)
44
- hash_one.all? do |key, value_one|
45
- value_two = hash_two[key]
46
- case
47
- when value_one == value_two
48
- true
49
- when value_one.is_a?(Hash) && value_two.is_a?(Hash)
50
- attributes_match?(value_one, value_two)
51
- when value_one.is_a?(String) && value_one.start_with?("eval:")
52
- eval_attribute_value(value_one, value_two)
53
- else
54
- false
55
- end
56
- end
57
- end
58
-
59
- def filter_event?(filter_name, event)
60
- if @settings.filter_exists?(filter_name)
61
- filter = @settings[:filters][filter_name]
62
- matched = attributes_match?(filter[:attributes], event)
63
- filter[:negate] ? matched : !matched
64
- else
65
- @logger.error("unknown filter", :filter_name => filter_name)
66
- false
67
- end
68
- end
69
- end
70
- end
71
- end
@@ -1,53 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "..", "helpers")
2
- require "sensu/extensions/filters/attributes"
3
-
4
- describe "Sensu::Extension::Attributes" do
5
- include Helpers
6
-
7
- before do
8
- @extension = Sensu::Extension::Attributes.new
9
- @extension.logger = logger
10
- @extension.settings = settings
11
- end
12
-
13
- it "can determine if filter attributes match an event" do
14
- attributes = {
15
- :occurrences => 1
16
- }
17
- event = event_template
18
- expect(@extension.attributes_match?(attributes, event)).to be(true)
19
- event[:occurrences] = 2
20
- expect(@extension.attributes_match?(attributes, event)).to be(false)
21
- attributes[:occurrences] = "eval: value == 1 || value % 60 == 0"
22
- event[:occurrences] = 1
23
- expect(@extension.attributes_match?(attributes, event)).to be(true)
24
- event[:occurrences] = 2
25
- expect(@extension.attributes_match?(attributes, event)).to be(false)
26
- event[:occurrences] = 120
27
- expect(@extension.attributes_match?(attributes, event)).to be(true)
28
- end
29
-
30
- it "can run, filtering an event with a nonexistent filter" do
31
- event = event_template
32
- options = {:filter_name => "nonexistent"}
33
- @extension.safe_run(event, options) do |output, status|
34
- expect(output).to eq("")
35
- expect(status).to eq(1)
36
- end
37
- end
38
-
39
- it "can run, filtering an event with a filter" do
40
- event = event_template
41
- event[:client][:environment] = "development"
42
- options = {:filter_name => "production"}
43
- @extension.safe_run(event, options) do |output, status|
44
- expect(output).to eq("")
45
- expect(status).to eq(0)
46
- event[:client][:environment] = "production"
47
- @extension.safe_run(event, options) do |output, status|
48
- expect(output).to eq("")
49
- expect(status).to eq(1)
50
- end
51
- end
52
- end
53
- end