airbrake_handler 0.2.1 → 0.3.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/.travis.yml CHANGED
@@ -3,3 +3,4 @@ notifications:
3
3
  rvm:
4
4
  - 1.8.7
5
5
  - 1.9.2
6
+ - 1.9.3
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source "https://rubygems.org"
2
2
 
3
3
  gem "minitest", :platform => :ruby_18
4
4
  gem "rake"
@@ -1,6 +1,6 @@
1
1
  # Airbrake handler for Chef
2
2
 
3
- Report [Chef](http://www.opscode.com/chef) exceptions to [Airbrake](http://airbrakeapp.com)
3
+ Report [Chef](http://www.opscode.com/chef) exceptions to [Airbrake](http://airbrake.io)
4
4
 
5
5
  Works fine with chef versions: 0.9.x and 0.10.x
6
6
 
@@ -23,10 +23,22 @@ You can pass more options to AirbrakeHander initializer, i.e:
23
23
  AirbrakeHandler.new(:api_key => "your-airbrake-api-key", :framework_env => "production")
24
24
  ```
25
25
 
26
+ If you want to ignore specific exceptions, you can do this like that:
27
+
28
+ ```ruby
29
+ airbrake_handler = AirbrakeHandler.new(:api_key => "your-airbrake-api-key", :framework_env => "production")
30
+ airbrake_handler.ignore << {:class => "SystemExit"}
31
+ airbrake_handler.ignore << {:class => "Errno::ECONNRESET", :message => /Connection reset by peer/}
32
+ ```
33
+
26
34
  ## Continuous Integration
27
35
 
28
36
  [![Build Status](https://secure.travis-ci.org/morgoth/airbrake_handler.png)](http://travis-ci.org/morgoth/airbrake_handler)
29
37
 
38
+ ## Contributors
39
+
40
+ * [Anton Mironov](https://github.com/mironov)
41
+
30
42
  ## Copyright
31
43
 
32
- Copyright (c) 2011 Adam Jacob, Wojciech Wnętrzak See LICENSE for details.
44
+ Copyright (c) 2012 Adam Jacob, Wojciech Wnętrzak See LICENSE for details.
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "airbrake_handler"
6
- s.version = "0.2.1"
6
+ s.version = "0.3.0"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Adam Jacob", "Wojciech Wnętrzak"]
9
9
  s.email = ["w.wnetrzak@gmail.com"]
@@ -20,23 +20,30 @@ require "chef/handler"
20
20
  require "toadhopper"
21
21
 
22
22
  class AirbrakeHandler < Chef::Handler
23
- VERSION = "0.2.1"
23
+ VERSION = "0.3.0"
24
24
 
25
- attr_accessor :options, :api_key
25
+ attr_accessor :options, :api_key, :ignore
26
26
 
27
27
  def initialize(options={})
28
28
  @api_key = options.delete(:api_key)
29
+ @ignore = options.delete(:ignore) || []
29
30
  @options = options
30
31
  end
31
32
 
32
33
  def report
33
- if run_status.failed?
34
+ if run_status.failed? && !ignore_exception?(run_status.exception)
34
35
  Chef::Log.error("Creating Airbrake exception report")
35
36
 
36
37
  client.post!(run_status.exception, airbrake_params)
37
38
  end
38
39
  end
39
40
 
41
+ def ignore_exception?(exception)
42
+ ignore.any? do |ignore_case|
43
+ ignore_case[:class] == exception.class.name && (!ignore_case.key?(:message) || !!ignore_case[:message].match(exception.message))
44
+ end
45
+ end
46
+
40
47
  def airbrake_params
41
48
  {
42
49
  :notifier_name => "Chef Airbrake Notifier", :notifier_version => VERSION, :notifier_url => "https://github.com/morgoth/airbrake_handler",
@@ -17,17 +17,65 @@ describe AirbrakeHandler do
17
17
  end
18
18
 
19
19
  it "should report exception using client" do
20
- run_status = stub(:failed? => true, :exception => "Exception")
20
+ exception = Exception.new
21
+ run_status = stub(:failed? => true, :exception => exception)
21
22
  client = mock
22
23
  handler = AirbrakeHandler.new(:api_key => "fake")
23
24
  handler.stubs(:run_status).returns(run_status)
24
25
  handler.stubs(:client).returns(client)
25
26
  handler.stubs(:airbrake_params).returns({})
26
27
 
27
- client.expects(:post!).with("Exception", {})
28
+ client.expects(:post!).with(exception, {})
28
29
  handler.report
29
30
  end
30
31
 
32
+ it "should not report ignored exception" do
33
+ run_status = stub(:failed? => true, :exception => Exception.new)
34
+ client = mock
35
+ handler = AirbrakeHandler.new(:api_key => "fake")
36
+ handler.ignore << {:class => "Exception"}
37
+ handler.stubs(:run_status).returns(run_status)
38
+ handler.stubs(:client).returns(client)
39
+ handler.stubs(:airbrake_params).returns({})
40
+
41
+ client.expects(:post!).never
42
+ handler.report
43
+ end
44
+
45
+ it "should not report ignored exception with specific message" do
46
+ run_status = stub(:failed? => true, :exception => Exception.new("error"))
47
+ client = mock
48
+ handler = AirbrakeHandler.new(:api_key => "fake")
49
+ handler.ignore << {:class => "Exception", :message => /error/}
50
+ handler.stubs(:run_status).returns(run_status)
51
+ handler.stubs(:client).returns(client)
52
+ handler.stubs(:airbrake_params).returns({})
53
+
54
+ client.expects(:post!).never
55
+ handler.report
56
+ end
57
+
58
+ it "should report exception if its message doesn't match any message of ignored exceptions" do
59
+ run_status = stub(:failed? => true, :exception => Exception.new("important error"))
60
+ client = mock
61
+ handler = AirbrakeHandler.new(:api_key => "fake")
62
+ handler.ignore << {:class => "Exception", :message => /not important error/}
63
+ handler.ignore << {:class => "Exception", :message => /some error/}
64
+ handler.stubs(:run_status).returns(run_status)
65
+ handler.stubs(:client).returns(client)
66
+ handler.stubs(:airbrake_params).returns({})
67
+
68
+ client.expects(:post!).once
69
+ handler.report
70
+ end
71
+
72
+ it "should ignore exception by message regexp" do
73
+ handler = AirbrakeHandler.new(:api_key => "fake")
74
+ handler.ignore << {:class => "Exception", :message => /catch me if you can/}
75
+
76
+ assert handler.ignore_exception?(Exception.new("catch me if you can"))
77
+ end
78
+
31
79
  it "should return Airbrake params" do
32
80
  node = stub(:name => "node-name", :run_list => "cookbook::recipe")
33
81
  run_status = stub(:node => node, :start_time => Time.mktime(2011,1,1),
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake_handler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-08-27 00:00:00.000000000Z
13
+ date: 2012-01-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: chef
17
- requirement: &8231860 !ruby/object:Gem::Requirement
17
+ requirement: &72635450 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.9.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *8231860
25
+ version_requirements: *72635450
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: toadhopper
28
- requirement: &8227860 !ruby/object:Gem::Requirement
28
+ requirement: &72634600 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *8227860
36
+ version_requirements: *72634600
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: mocha
39
- requirement: &8226840 !ruby/object:Gem::Requirement
39
+ requirement: &72634200 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *8226840
47
+ version_requirements: *72634200
48
48
  description: Chef handler for sending exceptions to Airbrake
49
49
  email:
50
50
  - w.wnetrzak@gmail.com
@@ -52,12 +52,11 @@ executables: []
52
52
  extensions: []
53
53
  extra_rdoc_files: []
54
54
  files:
55
- - .document
56
55
  - .gitignore
57
56
  - .travis.yml
58
57
  - Gemfile
59
58
  - LICENSE
60
- - README.markdown
59
+ - README.md
61
60
  - Rakefile
62
61
  - airbrake_handler.gemspec
63
62
  - lib/airbrake_handler.rb
@@ -83,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
82
  version: '0'
84
83
  requirements: []
85
84
  rubyforge_project: airbrake_handler
86
- rubygems_version: 1.8.10
85
+ rubygems_version: 1.8.15
87
86
  signing_key:
88
87
  specification_version: 3
89
88
  summary: Chef handler for sending exceptions to Airbrake
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE