bugsnag 1.3.8 → 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.
- data/CHANGELOG.md +15 -0
- data/README.md +12 -0
- data/VERSION +1 -1
- data/bugsnag.gemspec +2 -2
- data/lib/bugsnag/configuration.rb +5 -1
- data/lib/bugsnag/helpers.rb +1 -1
- data/lib/bugsnag/middleware_stack.rb +13 -3
- data/lib/bugsnag/notification.rb +16 -4
- data/lib/bugsnag/rack.rb +2 -2
- data/lib/bugsnag/rails.rb +1 -1
- data/lib/bugsnag/railtie.rb +1 -1
- data/lib/bugsnag/rake.rb +1 -1
- data/spec/notification_spec.rb +22 -0
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
1.4.0
|
5
|
+
-----
|
6
|
+
- Add ignore_user_agents to ignore certain user agents
|
7
|
+
- Change bugsnag middleware order to have Callbacks last
|
8
|
+
- Allow nil values to be sent to bugsnag
|
9
|
+
|
10
|
+
1.3.8
|
11
|
+
-----
|
12
|
+
- Add truncated only when a field has been truncated
|
13
|
+
|
14
|
+
1.3.7
|
15
|
+
-----
|
16
|
+
- Fix warden bug where user id is an array of ids
|
17
|
+
- Filter get params from URLs as well as meta_data
|
18
|
+
|
4
19
|
1.3.6
|
5
20
|
-----
|
6
21
|
- Filter out meta-data keys containing the word 'secret' by default
|
data/README.md
CHANGED
@@ -311,6 +311,18 @@ By default, `ignore_classes` contains the following:
|
|
311
311
|
]
|
312
312
|
```
|
313
313
|
|
314
|
+
###ignore_user_agents
|
315
|
+
|
316
|
+
Sets an array of Regexps that can be used to ignore exceptions from
|
317
|
+
certain user agents.
|
318
|
+
|
319
|
+
```ruby
|
320
|
+
config.ignore_user_agents << %r{Chrome}
|
321
|
+
```
|
322
|
+
|
323
|
+
By default, `ignore_user_agents` is empty, so exceptions caused by all
|
324
|
+
user agents are reported.
|
325
|
+
|
314
326
|
###logger
|
315
327
|
|
316
328
|
Sets which logger to use for Bugsnag log messages. In rails apps, this is
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/bugsnag.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bugsnag}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Smith"]
|
12
|
-
s.date = %q{2013-
|
12
|
+
s.date = %q{2013-07-09}
|
13
13
|
s.description = %q{Ruby notifier for bugsnag.com}
|
14
14
|
s.email = %q{james@bugsnag.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -13,6 +13,7 @@ module Bugsnag
|
|
13
13
|
attr_accessor :app_version
|
14
14
|
attr_accessor :params_filters
|
15
15
|
attr_accessor :ignore_classes
|
16
|
+
attr_accessor :ignore_user_agents
|
16
17
|
attr_accessor :endpoint
|
17
18
|
attr_accessor :logger
|
18
19
|
attr_accessor :middleware
|
@@ -35,6 +36,8 @@ module Bugsnag
|
|
35
36
|
"Mongoid::Errors::DocumentNotFound"
|
36
37
|
].freeze
|
37
38
|
|
39
|
+
DEFAULT_IGNORE_USER_AGENTS = [].freeze
|
40
|
+
|
38
41
|
def initialize
|
39
42
|
# Set up the defaults
|
40
43
|
self.release_stage = nil
|
@@ -43,6 +46,7 @@ module Bugsnag
|
|
43
46
|
self.use_ssl = false
|
44
47
|
self.params_filters = Set.new(DEFAULT_PARAMS_FILTERS)
|
45
48
|
self.ignore_classes = Set.new(DEFAULT_IGNORE_CLASSES)
|
49
|
+
self.ignore_user_agents = Set.new(DEFAULT_IGNORE_USER_AGENTS)
|
46
50
|
self.endpoint = DEFAULT_ENDPOINT
|
47
51
|
|
48
52
|
# Set up logging
|
@@ -74,4 +78,4 @@ module Bugsnag
|
|
74
78
|
Thread.current[THREAD_LOCAL_NAME] = nil
|
75
79
|
end
|
76
80
|
end
|
77
|
-
end
|
81
|
+
end
|
data/lib/bugsnag/helpers.rb
CHANGED
@@ -14,7 +14,12 @@ module Bugsnag
|
|
14
14
|
def insert_after(after, new_middleware)
|
15
15
|
return if @disabled_middleware.include?(new_middleware)
|
16
16
|
|
17
|
-
|
17
|
+
if after.is_a? Array
|
18
|
+
index = @middlewares.rindex {|el| after.include?(el)}
|
19
|
+
else
|
20
|
+
index = @middlewares.rindex(after)
|
21
|
+
end
|
22
|
+
|
18
23
|
if index.nil?
|
19
24
|
@middlewares << new_middleware
|
20
25
|
else
|
@@ -25,8 +30,13 @@ module Bugsnag
|
|
25
30
|
def insert_before(before, new_middleware)
|
26
31
|
return if @disabled_middleware.include?(new_middleware)
|
27
32
|
|
28
|
-
|
29
|
-
|
33
|
+
if before.is_a? Array
|
34
|
+
index = @middlewares.index {|el| before.include?(el)}
|
35
|
+
else
|
36
|
+
index = @middlewares.index(before)
|
37
|
+
end
|
38
|
+
|
39
|
+
@middlewares.insert index || @middlewares.length, new_middleware
|
30
40
|
end
|
31
41
|
|
32
42
|
def disable(*middlewares)
|
data/lib/bugsnag/notification.rb
CHANGED
@@ -176,10 +176,7 @@ module Bugsnag
|
|
176
176
|
end
|
177
177
|
|
178
178
|
def ignore?
|
179
|
-
|
180
|
-
@configuration.ignore_classes.any? do |to_ignore|
|
181
|
-
to_ignore.is_a?(Proc) ? to_ignore.call(ex) : to_ignore == error_class(ex)
|
182
|
-
end
|
179
|
+
ignore_exception_class? || ignore_user_agent?
|
183
180
|
end
|
184
181
|
|
185
182
|
def request_data
|
@@ -192,6 +189,21 @@ module Bugsnag
|
|
192
189
|
|
193
190
|
private
|
194
191
|
|
192
|
+
def ignore_exception_class?
|
193
|
+
ex = @exceptions.last
|
194
|
+
@configuration.ignore_classes.any? do |to_ignore|
|
195
|
+
to_ignore.is_a?(Proc) ? to_ignore.call(ex) : to_ignore == error_class(ex)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def ignore_user_agent?
|
200
|
+
if @configuration.request_data && @configuration.request_data[:rack_env] && (agent = @configuration.request_data[:rack_env]["HTTP_USER_AGENT"])
|
201
|
+
@configuration.ignore_user_agents.any? do |to_ignore|
|
202
|
+
agent =~ to_ignore
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
195
207
|
# Generate the meta data from both the request configuration, the overrides and the exceptions for this notification
|
196
208
|
def generate_meta_data(exceptions, overrides)
|
197
209
|
# Copy the request meta data so we dont edit it by mistake
|
data/lib/bugsnag/rack.rb
CHANGED
@@ -23,8 +23,8 @@ module Bugsnag
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Hook up rack-based notification middlewares
|
26
|
-
config.middleware.insert_before(Bugsnag::Middleware::Rails3Request, Bugsnag::Middleware::RackRequest) if defined?(::Rack)
|
27
|
-
config.middleware.
|
26
|
+
config.middleware.insert_before([Bugsnag::Middleware::Rails3Request,Bugsnag::Middleware::Callbacks], Bugsnag::Middleware::RackRequest) if defined?(::Rack)
|
27
|
+
config.middleware.insert_before(Bugsnag::Middleware::Callbacks, Bugsnag::Middleware::WardenUser) if defined?(Warden)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
data/lib/bugsnag/rails.rb
CHANGED
@@ -28,7 +28,7 @@ module Bugsnag
|
|
28
28
|
config.release_stage = RAILS_ENV if defined?(RAILS_ENV)
|
29
29
|
config.project_root = RAILS_ROOT if defined?(RAILS_ROOT)
|
30
30
|
|
31
|
-
config.middleware.
|
31
|
+
config.middleware.insert_before(Bugsnag::Middleware::Callbacks,Bugsnag::Middleware::Rails2Request)
|
32
32
|
end
|
33
33
|
|
34
34
|
# Auto-load configuration settings from config/bugsnag.yml if it exists
|
data/lib/bugsnag/railtie.rb
CHANGED
@@ -18,7 +18,7 @@ module Bugsnag
|
|
18
18
|
config.release_stage = Rails.env.to_s
|
19
19
|
config.project_root = Rails.root.to_s
|
20
20
|
config.params_filters += Rails.configuration.filter_parameters
|
21
|
-
config.middleware.
|
21
|
+
config.middleware.insert_before Bugsnag::Middleware::Callbacks, Bugsnag::Middleware::Rails3Request
|
22
22
|
end
|
23
23
|
|
24
24
|
# Auto-load configuration settings from config/bugsnag.yml if it exists
|
data/lib/bugsnag/rake.rb
CHANGED
data/spec/notification_spec.rb
CHANGED
@@ -368,6 +368,18 @@ describe Bugsnag::Notification do
|
|
368
368
|
Bugsnag.notify(BugsnagTestException.new("It crashed"), {:request => {:params => {:password => "1234", :other_password => "123456", :other_data => "123456"}}})
|
369
369
|
end
|
370
370
|
|
371
|
+
it "should not filter params from payload hashes if their values are nil" do
|
372
|
+
Bugsnag::Notification.should_receive(:deliver_exception_payload) do |endpoint, payload|
|
373
|
+
event = get_event_from_payload(payload)
|
374
|
+
event[:metaData].should_not be_nil
|
375
|
+
event[:metaData][:request].should_not be_nil
|
376
|
+
event[:metaData][:request][:params].should_not be_nil
|
377
|
+
event[:metaData][:request][:params].should have_key(:nil_param)
|
378
|
+
end
|
379
|
+
|
380
|
+
Bugsnag.notify(BugsnagTestException.new("It crashed"), {:request => {:params => {:nil_param => nil}}})
|
381
|
+
end
|
382
|
+
|
371
383
|
it "should not notify if the exception class is in the default ignore_classes list" do
|
372
384
|
Bugsnag::Notification.should_not_receive(:deliver_exception_payload)
|
373
385
|
|
@@ -390,6 +402,16 @@ describe Bugsnag::Notification do
|
|
390
402
|
Bugsnag.notify_or_ignore(BugsnagTestException.new("It crashed"))
|
391
403
|
end
|
392
404
|
|
405
|
+
it "should not notify if the user agent is present and matches a regex in ignore_user_agents" do
|
406
|
+
Bugsnag.configuration.ignore_user_agents << %r{BugsnagUserAgent}
|
407
|
+
|
408
|
+
Bugsnag::Notification.should_not_receive(:deliver_exception_payload)
|
409
|
+
|
410
|
+
((Thread.current["bugsnag_req_data"] ||= {})[:rack_env] ||= {})["HTTP_USER_AGENT"] = "BugsnagUserAgent"
|
411
|
+
|
412
|
+
Bugsnag.notify_or_ignore(BugsnagTestException.new("It crashed"))
|
413
|
+
end
|
414
|
+
|
393
415
|
it "should not unwrap the same exception twice" do
|
394
416
|
Bugsnag::Notification.should_receive(:deliver_exception_payload) do |endpoint, payload|
|
395
417
|
event = get_event_from_payload(payload)
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 1.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- James Smith
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2013-
|
17
|
+
date: 2013-07-09 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|