sensu-extensions 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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