bugsnag 4.2.1 → 5.0.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: c7a125074b0ce11af4b27fdec174ae254e9f93f6
4
- data.tar.gz: d9ec806e212474fb4a91ad7d743ba0e52a1e3eba
3
+ metadata.gz: 5403d5abb730249b3c5b9a55199be90907d0b09b
4
+ data.tar.gz: f7279565d7c9ff5f7de4573c70116dc5411fda66
5
5
  SHA512:
6
- metadata.gz: 00f9605f9d914345731261720b2b9d9c1a5ad9e51c137eacd87aa58c6d1fb87b54576d08f701f61dd0c0ffad2f796b484848b6860899d26d905b91642b3b6fb1
7
- data.tar.gz: 04094907d4eb4267e03ac1ab068eabf5ed07be81f6192c09376476faa56cfdcccd669cbce6f7c9e3a7dd0626eaac2c432a2c5c10a532ce1dc4a65785ba4c51b9
6
+ metadata.gz: a73f4524eb83ab779faa0ed7374440b07585ef70b59a8331405b64a7c42e40b699044144ccd209ba323f3f740e56b875d4f78c9b19aa5609bc2436d679afeee1
7
+ data.tar.gz: 404a4ef28199ae30b4a10cb9591699d218bc698f19316c9f78b8045da52b7a07339aeb8baa25be0b4d7063713819dccf40a6a73897da1a15de8e85cb2bbc4c31
@@ -1,6 +1,28 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## 5.0.0 (23 August 2016)
5
+
6
+ ### Enhancements
7
+
8
+ * Remove RoutingError from default ignore classes
9
+ | [#308](https://github.com/bugsnag/bugsnag-ruby/issues/308)
10
+ * Prefer BUGSNAG_RELEASE_STAGE over RAILS_ENV for release_stage
11
+ | [#298](https://github.com/bugsnag/bugsnag-ruby/issues/298)
12
+ * Apply grouping hash if method `bugsnag_grouping_hash` is available on the object
13
+ | [#318](https://github.com/bugsnag/bugsnag-ruby/issues/318)
14
+ | [#311](https://github.com/bugsnag/bugsnag-ruby/issues/311)
15
+ * Sidekiq improvements
16
+ | [#317](https://github.com/bugsnag/bugsnag-ruby/issues/317)
17
+ | [#282](https://github.com/bugsnag/bugsnag-ruby/issues/282)
18
+ | [#309](https://github.com/bugsnag/bugsnag-ruby/issues/309)
19
+ | [#306](https://github.com/bugsnag/bugsnag-ruby/issues/306)
20
+
21
+ ### Fixes
22
+
23
+ * Exception backtrace could be empty
24
+ | [#307](https://github.com/bugsnag/bugsnag-ruby/issues/307)
25
+
4
26
  ## 4.2.1 (23 Jun 2016)
5
27
 
6
28
  ### Fixes
data/README.md CHANGED
@@ -2,10 +2,7 @@
2
2
  [![build status](https://travis-ci.org/bugsnag/bugsnag-ruby.svg?branch=master)](https://travis-ci.org/bugsnag/bugsnag-ruby)
3
3
 
4
4
 
5
- The Bugsnag exception reporter for Ruby gives you instant notification of exceptions
6
- thrown from your **[Rails](https://bugsnag.com/platforms/rails)**, **Sinatra**, **Rack** or **plain Ruby** app.
7
- Any uncaught exceptions will trigger a notification to be sent to your
8
- Bugsnag project.
5
+ The Bugsnag exception reporter for Ruby gives you instant notification of exceptions thrown from your **[Rails](https://bugsnag.com/platforms/rails)**, **Sinatra**, **Rack** or **plain Ruby** app. Any uncaught exceptions will trigger a notification to be sent to your Bugsnag project.
9
6
 
10
7
  ## Features
11
8
 
@@ -40,11 +37,8 @@ Bugsnag project.
40
37
 
41
38
  ## Contributing
42
39
 
43
- All contributors are welcome! For information on how to build, test
44
- and release `bugsnag-ruby`, see our
45
- [contributing guide](https://github.com/bugsnag/bugsnag-ruby/blob/master/CONTRIBUTING.md). Feel free to comment on [existing issues](https://github.com/bugsnag/bugsnag-ruby/issues) for clarification or starting points.
40
+ All contributors are welcome! For information on how to build, test and release `bugsnag-ruby`, see our [contributing guide](https://github.com/bugsnag/bugsnag-ruby/blob/master/CONTRIBUTING.md). Feel free to comment on [existing issues](https://github.com/bugsnag/bugsnag-ruby/issues) for clarification or starting points.
46
41
 
47
42
  ## License
48
43
 
49
- The Bugsnag ruby notifier is free software released under the MIT License.
50
- See [LICENSE.txt](LICENSE.txt) for details.
44
+ The Bugsnag ruby notifier is free software released under the MIT License. See [LICENSE.txt](LICENSE.txt) for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.2.1
1
+ 5.0.0
@@ -11,7 +11,7 @@ module Bugsnag
11
11
  begin
12
12
  Bugsnag::Deploy.notify({
13
13
  :api_key => fetch(:bugsnag_api_key, ENV["BUGSNAG_API_KEY"]),
14
- :release_stage => fetch(:rails_env, ENV["BUGSNAG_RELEASE_STAGE"] || "production"),
14
+ :release_stage => ENV["BUGSNAG_RELEASE_STAGE"] || fetch(:rails_env, "production"),
15
15
  :revision => fetch(:current_revision, ENV["BUGSNAG_REVISION"]),
16
16
  :repository => fetch(:repository, ENV["BUGSNAG_REPOSITORY"]),
17
17
  :branch => fetch(:branch, ENV["BUGSNAG_BRANCH"],
@@ -50,7 +50,6 @@ module Bugsnag
50
50
  "AbstractController::ActionNotFound",
51
51
  "ActionController::InvalidAuthenticityToken",
52
52
  "ActionController::ParameterMissing",
53
- "ActionController::RoutingError",
54
53
  "ActionController::UnknownAction",
55
54
  "ActionController::UnknownFormat",
56
55
  "ActionController::UnknownHttpMethod",
@@ -2,6 +2,11 @@ require 'mailman'
2
2
 
3
3
  module Bugsnag
4
4
  class Mailman
5
+ def initialize
6
+ Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Mailman)
7
+ Bugsnag.configuration.app_type = "mailman"
8
+ end
9
+
5
10
  def call(mail)
6
11
  begin
7
12
 
@@ -23,6 +28,3 @@ end
23
28
  if Mailman.config.respond_to?(:middleware)
24
29
  Mailman.config.middleware.add ::Bugsnag::Mailman
25
30
  end
26
-
27
- Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Mailman)
28
- Bugsnag.configuration.app_type = "mailman"
@@ -3,5 +3,6 @@ module Bugsnag
3
3
  attr_accessor :bugsnag_meta_data
4
4
  attr_accessor :bugsnag_user_id
5
5
  attr_accessor :bugsnag_context
6
+ attr_accessor :bugsnag_grouping_hash
6
7
  end
7
8
  end
@@ -6,7 +6,10 @@ module Bugsnag::Middleware
6
6
 
7
7
  def call(notification)
8
8
  sidekiq = notification.request_data[:sidekiq]
9
- notification.add_tab(:sidekiq, sidekiq) if sidekiq
9
+ if sidekiq
10
+ notification.add_tab(:sidekiq, sidekiq)
11
+ notification.context ||= "#{sidekiq[:msg]['wrapper'] || sidekiq[:msg]['class']}@#{sidekiq[:msg]['queue']}"
12
+ end
10
13
  @bugsnag.call(notification)
11
14
  end
12
15
  end
@@ -198,6 +198,9 @@ module Bugsnag
198
198
  if exception.bugsnag_context.is_a?(String)
199
199
  self.context = exception.bugsnag_context
200
200
  end
201
+ if exception.bugsnag_grouping_hash.is_a?(String)
202
+ self.grouping_hash = exception.bugsnag_grouping_hash
203
+ end
201
204
  end
202
205
  end
203
206
 
@@ -343,7 +346,7 @@ module Bugsnag
343
346
  {
344
347
  :errorClass => error_class(exception),
345
348
  :message => exception.message,
346
- :stacktrace => stacktrace(exception)
349
+ :stacktrace => stacktrace(exception.backtrace)
347
350
  }
348
351
  end
349
352
  end
@@ -354,9 +357,9 @@ module Bugsnag
354
357
  (exception.is_a? Class) ? exception.name : exception.class.name
355
358
  end
356
359
 
357
- def stacktrace(exception)
358
- (exception.backtrace || caller).map do |trace|
359
-
360
+ def stacktrace(backtrace)
361
+ backtrace = caller if !backtrace || backtrace.empty?
362
+ backtrace.map do |trace|
360
363
  if trace.match(BACKTRACE_LINE_REGEX)
361
364
  file, line_str, method = [$1, $2, $3]
362
365
  elsif trace.match(JAVA_BACKTRACE_REGEX)
@@ -6,7 +6,7 @@ module Bugsnag
6
6
  # Configure bugsnag rack defaults
7
7
  Bugsnag.configure do |config|
8
8
  # Try to set the release_stage automatically if it hasn't already been set
9
- config.release_stage ||= ENV["RACK_ENV"] if ENV["RACK_ENV"]
9
+ config.release_stage ||= release_stage
10
10
 
11
11
  # Try to set the project_root if it hasn't already been set, or show a warning if we can't
12
12
  unless config.project_root && !config.project_root.to_s.empty?
@@ -49,5 +49,11 @@ module Bugsnag
49
49
  # Clear per-request data after processing the each request
50
50
  Bugsnag.clear_request_data
51
51
  end
52
+
53
+ private
54
+
55
+ def release_stage
56
+ ENV["BUGSNAG_RELEASE_STAGE"] || ENV["RACK_ENV"]
57
+ end
52
58
  end
53
59
  end
@@ -23,7 +23,7 @@ module Bugsnag
23
23
 
24
24
  Bugsnag.configure do |config|
25
25
  config.logger ||= rails_logger
26
- config.release_stage = rails_env if rails_env
26
+ config.release_stage = release_stage if release_stage
27
27
  config.project_root = rails_root if rails_root
28
28
 
29
29
  config.middleware.insert_before(Bugsnag::Middleware::Callbacks,Bugsnag::Middleware::Rails2Request)
@@ -45,6 +45,10 @@ module Bugsnag
45
45
  end
46
46
  end
47
47
 
48
+ def self.release_stage
49
+ ENV["BUGSNAG_RELEASE_STAGE"] || rails_env
50
+ end
51
+
48
52
  def self.rails_env
49
53
  if defined?(::Rails.env)
50
54
  ::Rails.env
@@ -7,8 +7,6 @@ require "bugsnag/middleware/rack_request"
7
7
 
8
8
  module Bugsnag
9
9
  class Railtie < Rails::Railtie
10
- cattr_accessor :running_as_dependency
11
-
12
10
  rake_tasks do
13
11
  require "bugsnag/rake"
14
12
  load "bugsnag/tasks/bugsnag.rake"
@@ -29,7 +27,7 @@ module Bugsnag
29
27
  # Configure bugsnag rails defaults
30
28
  Bugsnag.configure do |config|
31
29
  config.logger = ::Rails.logger
32
- config.release_stage = ::Rails.env.to_s
30
+ config.release_stage = ENV["BUGSNAG_RELEASE_STAGE"] || ::Rails.env.to_s
33
31
  config.project_root = ::Rails.root.to_s
34
32
  config.middleware.insert_before Bugsnag::Middleware::Callbacks, Bugsnag::Middleware::Rails3Request
35
33
  end
@@ -51,7 +49,7 @@ module Bugsnag
51
49
  ActiveRecord::Base.send(:include, Bugsnag::Rails::ActiveRecordRescue)
52
50
  end
53
51
 
54
- Bugsnag.configuration.app_type = "rails" unless Bugsnag::Railtie.running_as_dependency
52
+ Bugsnag.configuration.app_type = "rails"
55
53
  end
56
54
 
57
55
  # Configure params_filters after initialization, so that rails initializers
@@ -37,4 +37,7 @@ Resque::Failure::Bugsnag = Bugsnag::Resque
37
37
  # Auto-load the failure backend
38
38
  Bugsnag::Resque.add_failure_backend
39
39
 
40
- Bugsnag.configuration.app_type = "resque"
40
+ Resque.before_first_fork do
41
+ Bugsnag.configuration.app_type = "resque"
42
+ Bugsnag.configuration.delivery_method = :synchronous
43
+ end
@@ -2,9 +2,14 @@ require 'sidekiq'
2
2
 
3
3
  module Bugsnag
4
4
  class Sidekiq
5
+ def initialize
6
+ Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Sidekiq)
7
+ Bugsnag.configuration.app_type = "sidekiq"
8
+ Bugsnag.configuration.delivery_method = :synchronous
9
+ end
10
+
5
11
  def call(worker, msg, queue)
6
12
  begin
7
-
8
13
  # store msg/queue in thread local state to be read by Bugsnag::Middleware::Sidekiq
9
14
  Bugsnag.set_request_data :sidekiq, { :msg => msg, :queue => queue }
10
15
 
@@ -20,23 +25,8 @@ module Bugsnag
20
25
  end
21
26
  end
22
27
 
23
- if ::Sidekiq::VERSION < '3'
24
- ::Sidekiq.configure_server do |config|
25
- config.server_middleware do |chain|
26
- chain.add ::Bugsnag::Sidekiq
27
- end
28
+ ::Sidekiq.configure_server do |config|
29
+ config.server_middleware do |chain|
30
+ chain.add ::Bugsnag::Sidekiq
28
31
  end
29
- else
30
- ::Sidekiq.configure_server do |config|
31
- config.error_handlers << lambda do |ex, ctx|
32
- Bugsnag.auto_notify(ex, :sidekiq => ctx, :context => "#{ctx['class']}@#{ctx['queue']}")
33
- end
34
- end
35
- end
36
-
37
- Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Sidekiq)
38
- Bugsnag.configuration.app_type = "sidekiq"
39
-
40
- if defined?(::Sidekiq::CLI) && defined?(Bugsnag::Railtie)
41
- Bugsnag::Railtie.running_as_dependency = true
42
32
  end
@@ -28,7 +28,7 @@ namespace :bugsnag do
28
28
  begin
29
29
  Bugsnag::Deploy.notify({
30
30
  :api_key => fetch(:bugsnag_api_key, ENV["BUGSNAG_API_KEY"]),
31
- :release_stage => fetch(:bugsnag_env) || fetch(:rails_env) || fetch(:stage) || ENV["BUGSNAG_RELEASE_STAGE"] || "production",
31
+ :release_stage => fetch(:bugsnag_env) || ENV["BUGSNAG_RELEASE_STAGE"] || fetch(:rails_env) || fetch(:stage) || "production",
32
32
  :revision => fetch(:current_revision, ENV["BUGSNAG_REVISION"]),
33
33
  :repository => fetch(:repo_url, ENV["BUGSNAG_REPOSITORY"]),
34
34
  :branch => fetch(:branch, ENV["BUGSNAG_BRANCH"]),
@@ -223,6 +223,18 @@ describe Bugsnag::Notification do
223
223
  }
224
224
  end
225
225
 
226
+ it "accepts grouping_hash from an exception that mixes in Bugsnag::MetaData" do
227
+ exception = BugsnagTestExceptionWithMetaData.new("It crashed")
228
+ exception.bugsnag_grouping_hash = "exception_hash"
229
+
230
+ Bugsnag.notify(exception)
231
+
232
+ expect(Bugsnag).to have_sent_notification{ |payload|
233
+ event = get_event_from_payload(payload)
234
+ expect(event["groupingHash"]).to eq("exception_hash")
235
+ }
236
+ end
237
+
226
238
  it "accept contexts from an exception that mixes in Bugsnag::MetaData, but override using the overrides" do
227
239
 
228
240
  exception = BugsnagTestExceptionWithMetaData.new("It crashed")
@@ -857,6 +869,21 @@ describe Bugsnag::Notification do
857
869
  }
858
870
  end
859
871
 
872
+ it 'should handle exceptions with empty backtrace' do
873
+ begin
874
+ err = RuntimeError.new
875
+ err.set_backtrace([])
876
+ raise err
877
+ rescue
878
+ Bugsnag.notify $!
879
+ end
880
+
881
+ expect(Bugsnag).to have_sent_notification { |payload|
882
+ exception = get_exception_from_payload(payload)
883
+ expect(exception['stacktrace'].size).to be > 0
884
+ }
885
+ end
886
+
860
887
  if defined?(JRUBY_VERSION)
861
888
 
862
889
  it "should work with java.lang.Throwables" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bugsnag
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.1
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-23 00:00:00.000000000 Z
11
+ date: 2016-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -188,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
188
  version: '0'
189
189
  requirements: []
190
190
  rubyforge_project:
191
- rubygems_version: 2.4.5
191
+ rubygems_version: 2.2.2
192
192
  signing_key:
193
193
  specification_version: 4
194
194
  summary: Ruby notifier for bugsnag.com