bugsnag 6.20.0 → 6.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +110 -0
  3. data/VERSION +1 -1
  4. data/lib/bugsnag/breadcrumb_type.rb +14 -0
  5. data/lib/bugsnag/breadcrumbs/breadcrumb.rb +34 -1
  6. data/lib/bugsnag/breadcrumbs/breadcrumbs.rb +1 -0
  7. data/lib/bugsnag/breadcrumbs/on_breadcrumb_callback_list.rb +50 -0
  8. data/lib/bugsnag/cleaner.rb +31 -18
  9. data/lib/bugsnag/configuration.rb +243 -25
  10. data/lib/bugsnag/delivery/synchronous.rb +2 -2
  11. data/lib/bugsnag/delivery/thread_queue.rb +2 -2
  12. data/lib/bugsnag/endpoint_configuration.rb +11 -0
  13. data/lib/bugsnag/endpoint_validator.rb +80 -0
  14. data/lib/bugsnag/error.rb +25 -0
  15. data/lib/bugsnag/event.rb +7 -0
  16. data/lib/bugsnag/integrations/rack.rb +3 -3
  17. data/lib/bugsnag/integrations/rails/active_job.rb +102 -0
  18. data/lib/bugsnag/integrations/railtie.rb +43 -36
  19. data/lib/bugsnag/integrations/resque.rb +13 -3
  20. data/lib/bugsnag/middleware/active_job.rb +18 -0
  21. data/lib/bugsnag/middleware/delayed_job.rb +21 -2
  22. data/lib/bugsnag/middleware/exception_meta_data.rb +2 -0
  23. data/lib/bugsnag/middleware/rack_request.rb +84 -19
  24. data/lib/bugsnag/middleware/rails3_request.rb +2 -2
  25. data/lib/bugsnag/middleware/rake.rb +1 -1
  26. data/lib/bugsnag/middleware/session_data.rb +3 -1
  27. data/lib/bugsnag/middleware/sidekiq.rb +1 -1
  28. data/lib/bugsnag/middleware_stack.rb +6 -6
  29. data/lib/bugsnag/report.rb +166 -6
  30. data/lib/bugsnag/session_tracker.rb +52 -12
  31. data/lib/bugsnag/stacktrace.rb +10 -1
  32. data/lib/bugsnag/tasks/bugsnag.rake +1 -1
  33. data/lib/bugsnag/utility/duplicator.rb +124 -0
  34. data/lib/bugsnag/utility/metadata_delegate.rb +102 -0
  35. data/lib/bugsnag.rb +139 -7
  36. metadata +12 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cfe6701fa69f8d7c3c78476d17d127f921a6f730cdd3b618f92e6f7c2483da74
4
- data.tar.gz: '0857ab0742b7a33acfa39a60f4ecf9114f20b30293c78ef7bb1d1ba52ddef664'
3
+ metadata.gz: ee1b5d5046b6ba8e68cf45b4ccac412c02051c774bcf8e205c97b4254d058468
4
+ data.tar.gz: 787717ba06a5bba3266c0030e8de943bf02fe4c6a9c6d979ec4bf543aa7d82bd
5
5
  SHA512:
6
- metadata.gz: 3a917b2fc75798b3bd5e95416ab8c26f013133c84739f9d58df7bbd687de5b736184d11eae1e604944ba85267f214999f4a552e7beef1b271401e8598841a966
7
- data.tar.gz: abb394a0305a254ce1fda64eba446e49949142f42480e6adf176bf1e62e5cfe6a0280421afbfbefda48bfa3dab31f815891705de4eb1d0d59df2b520575aea93
6
+ metadata.gz: e53bfdf8c6c23f2a9e4412fbca888884936c3c26ff5f1262f80aa5081a8edb3ba51a6e0a64065c41490efc20c1fe32d8795ec841f09f733062d3691c0c007e2e
7
+ data.tar.gz: 3fe002c3a094014f0fbb56a1863ed309b50b4e733cd651df0136ad8af2f72c6759d122baf7f6bbb34607baf18631395000bd9fd7312eec432b7dce14482d9cef
data/CHANGELOG.md CHANGED
@@ -1,6 +1,116 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## v6.24.0 (6 October 2021)
5
+
6
+ ### Enhancements
7
+
8
+ * Allow overriding an event's unhandled flag
9
+ | [#698](https://github.com/bugsnag/bugsnag-ruby/pull/698)
10
+ * Add the ability to store metadata globally
11
+ | [#699](https://github.com/bugsnag/bugsnag-ruby/pull/699)
12
+ * Add `cookies`, `body` and `httpVersion` to the automatically captured request data for Rack apps
13
+ | [#700](https://github.com/bugsnag/bugsnag-ruby/pull/700)
14
+ * Add `Configuration#endpoints` for reading the notify and sessions endpoints and `Configuration#endpoints=` for setting them
15
+ | [#701](https://github.com/bugsnag/bugsnag-ruby/pull/701)
16
+ * Add `Configuration#redacted_keys`. This is like `meta_data_filters` but matches strings with case-insensitive equality, rather than matching based on inclusion
17
+ | [#703](https://github.com/bugsnag/bugsnag-ruby/pull/703)
18
+ * Allow pausing and resuming sessions, giving more control over the stability score
19
+ | [#704](https://github.com/bugsnag/bugsnag-ruby/pull/704)
20
+ * Add `Configuration#vendor_paths` to replace `Configuration#vendor_path`
21
+ | [#705](https://github.com/bugsnag/bugsnag-ruby/pull/705)
22
+
23
+ ### Deprecated
24
+
25
+ * In the next major release, `params` will only contain query string parameters. Currently it also contains the request body for form data requests, but this is deprecated in favour of the new `body` property
26
+ * The `Configuration#set_endpoints` method is now deprecated in favour of `Configuration#endpoints=`
27
+ * The `Configuration#meta_data_filters` option is now deprecated in favour of `Configuration#redacted_keys`
28
+ * The `Configuration#vendor_path` option is now deprecated in favour of `Configuration#vendor_paths`
29
+
30
+ ## v6.23.0 (21 September 2021)
31
+
32
+ ### Enhancements
33
+
34
+ * Sessions will now be delivered every 10 seconds, instead of every 30 seconds
35
+ | [#680](https://github.com/bugsnag/bugsnag-ruby/pull/680)
36
+ * Log errors that prevent delivery at `ERROR` level
37
+ | [#681](https://github.com/bugsnag/bugsnag-ruby/pull/681)
38
+ * Add `on_breadcrumb` callbacks to replace `before_breadcrumb_callbacks`
39
+ | [#686](https://github.com/bugsnag/bugsnag-ruby/pull/686)
40
+ * Add `context` attribute to configuration, which will be used as the default context for events. Using this option will disable automatic context setting
41
+ | [#687](https://github.com/bugsnag/bugsnag-ruby/pull/687)
42
+ | [#688](https://github.com/bugsnag/bugsnag-ruby/pull/688)
43
+ * Add `Bugsnag#breadcrumbs` getter to fetch the current list of breadcrumbs
44
+ | [#689](https://github.com/bugsnag/bugsnag-ruby/pull/689)
45
+ * Add `time` (an ISO8601 string in UTC) to `device` metadata
46
+ | [#690](https://github.com/bugsnag/bugsnag-ruby/pull/690)
47
+ * Add `errors` to `Report`/`Event` containing an array of `Error` objects. The `Error` object contains `error_class`, `error_message`, `stacktrace` and `type` (always "ruby")
48
+ | [#691](https://github.com/bugsnag/bugsnag-ruby/pull/691)
49
+ * Add `original_error` to `Report`/`Event` containing the original Exception instance
50
+ | [#692](https://github.com/bugsnag/bugsnag-ruby/pull/692)
51
+ * Add `request` to `Report`/`Event` containing HTTP request metadata
52
+ | [#693](https://github.com/bugsnag/bugsnag-ruby/pull/693)
53
+ * Add `add_metadata` and `clear_metadata` to `Report`/`Event`
54
+ | [#694](https://github.com/bugsnag/bugsnag-ruby/pull/694)
55
+ * Add `set_user` to `Report`/`Event`
56
+ | [#695](https://github.com/bugsnag/bugsnag-ruby/pull/695)
57
+
58
+ ### Fixes
59
+
60
+ * Avoid starting session delivery thread when the current release stage is not enabled
61
+ | [#677](https://github.com/bugsnag/bugsnag-ruby/pull/677)
62
+
63
+ ### Deprecated
64
+
65
+ * `before_breadcrumb_callbacks` have been deprecated in favour of `on_breadcrumb` callbacks and will be removed in the next major release
66
+ * For consistency with Bugsnag notifiers for other languages, a number of methods have been deprecated in this release. The old options will be removed in the next major version | [#676](https://github.com/bugsnag/bugsnag-ruby/pull/676)
67
+ * The `notify_release_stages` configuration option has been deprecated in favour of `enabled_release_stages`
68
+ * The `auto_capture_sessions` and `track_sessions` configuration options have been deprecated in favour of `auto_track_sessions`
69
+ * The `enabled_automatic_breadcrumb_types` configuration option has been deprecated in favour of `enabled_breadcrumb_types`
70
+ * The `Report` class has been deprecated in favour of the `Event` class
71
+ * The `Report#meta_data` attribute has been deprecated in favour of `Event#metadata`
72
+ * The `Breadcrumb#meta_data` attribute has been deprecated in favour of `Breadcrumb#metadata`
73
+ * The `Breadcrumb#name` attribute has been deprecated in favour of `Breadcrumb#message`
74
+ * The breadcrumb type constants in the `Bugsnag::Breadcrumbs` module has been deprecated in favour of the constants available in the `Bugsnag::BreadcrumbType` module
75
+ For example, `Bugsnag::Breadcrumbs::ERROR_BREADCRUMB_TYPE` is now available as `Bugsnag::BreadcrumbType::ERROR`
76
+ * `Report#exceptions` has been deprecated in favour of the new `errors` property
77
+ * `Report#raw_exceptions` has been deprecated in favour of the new `original_error` property
78
+ * Accessing request data via `Report#metadata` has been deprecated in favour of using the new `request` property. Request data will be moved out of metadata in the next major version
79
+ * The `Report#add_tab` and `Report#remove_tab` methods have been deprecated in favour of the new `add_metadata` and `clear_metadata` methods
80
+
81
+ ## v6.22.1 (11 August 2021)
82
+
83
+ ### Fixes
84
+
85
+ * Fix possible `LocalJumpError` introduced in v6.22.0
86
+ | [#675](https://github.com/bugsnag/bugsnag-ruby/pull/675)
87
+
88
+ ## v6.22.0 (10 August 2021)
89
+
90
+ ### Enhancements
91
+
92
+ * Add support for tracking exceptions and capturing metadata in Active Job, when not using an existing integration
93
+ | [#670](https://github.com/bugsnag/bugsnag-ruby/pull/670)
94
+
95
+ * Improve the report context when using Delayed Job or Resque as the Active Job queue adapter
96
+ | [#671](https://github.com/bugsnag/bugsnag-ruby/pull/671)
97
+
98
+ ## v6.21.0 (23 June 2021)
99
+
100
+ ### Enhancements
101
+
102
+ * Allow a `Method` or any object responding to `#call` to be used as an `on_error` callback or middleware
103
+ | [#662](https://github.com/bugsnag/bugsnag-ruby/pull/662)
104
+ | [odlp](https://github.com/odlp)
105
+
106
+ ### Fixes
107
+
108
+ * Deliver when an error is raised in the block argument to `notify`
109
+ | [#660](https://github.com/bugsnag/bugsnag-ruby/pull/660)
110
+ | [aki77](https://github.com/aki77)
111
+ * Fix potential `NoMethodError` in `Bugsnag::Railtie` when using `require: false` in a Gemfile
112
+ | [#666](https://github.com/bugsnag/bugsnag-ruby/pull/666)
113
+
4
114
  ## v6.20.0 (29 March 2021)
5
115
 
6
116
  ### Enhancements
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.20.0
1
+ 6.24.0
@@ -0,0 +1,14 @@
1
+ require "bugsnag/breadcrumbs/breadcrumbs"
2
+
3
+ module Bugsnag
4
+ module BreadcrumbType
5
+ ERROR = Bugsnag::Breadcrumbs::ERROR_BREADCRUMB_TYPE
6
+ LOG = Bugsnag::Breadcrumbs::LOG_BREADCRUMB_TYPE
7
+ MANUAL = Bugsnag::Breadcrumbs::MANUAL_BREADCRUMB_TYPE
8
+ NAVIGATION = Bugsnag::Breadcrumbs::NAVIGATION_BREADCRUMB_TYPE
9
+ PROCESS = Bugsnag::Breadcrumbs::PROCESS_BREADCRUMB_TYPE
10
+ REQUEST = Bugsnag::Breadcrumbs::REQUEST_BREADCRUMB_TYPE
11
+ STATE = Bugsnag::Breadcrumbs::STATE_BREADCRUMB_TYPE
12
+ USER = Bugsnag::Breadcrumbs::USER_BREADCRUMB_TYPE
13
+ end
14
+ end
@@ -1,11 +1,13 @@
1
1
  module Bugsnag::Breadcrumbs
2
2
  class Breadcrumb
3
+ # @deprecated Use {#message} instead
3
4
  # @return [String] the breadcrumb name
4
5
  attr_accessor :name
5
6
 
6
7
  # @return [String] the breadcrumb type
7
8
  attr_accessor :type
8
9
 
10
+ # @deprecated Use {#metadata} instead
9
11
  # @return [Hash, nil] metadata hash containing strings, numbers, or booleans, or nil
10
12
  attr_accessor :meta_data
11
13
 
@@ -23,7 +25,7 @@ module Bugsnag::Breadcrumbs
23
25
  # @api private
24
26
  #
25
27
  # @param name [String] the breadcrumb name
26
- # @param type [String] the breadcrumb type from Bugsnag::Breadcrumbs::VALID_BREADCRUMB_TYPES
28
+ # @param type [String] the breadcrumb type from Bugsnag::BreadcrumbType
27
29
  # @param meta_data [Hash, nil] a hash containing strings, numbers, or booleans, or nil
28
30
  # @param auto [Symbol] set to `:auto` if the breadcrumb is automatically generated
29
31
  def initialize(name, type, meta_data, auto)
@@ -72,5 +74,36 @@ module Bugsnag::Breadcrumbs
72
74
  :timestamp => @timestamp.iso8601(3)
73
75
  }
74
76
  end
77
+
78
+ # TODO: "message" and "metadata" can be simple attr_accessors when they
79
+ # replace "name" and "meta_data"
80
+ # NOTE: these are not aliases as YARD doesn't allow documenting the non-alias
81
+ # as deprecated without also marking the alias as deprecated
82
+
83
+ # The breadcrumb message
84
+ # @!attribute message
85
+ # @return [String]
86
+ def message
87
+ @name
88
+ end
89
+
90
+ # @param message [String]
91
+ # @return [void]
92
+ def message=(message)
93
+ @name = message
94
+ end
95
+
96
+ # A Hash containing arbitrary metadata associated with this breadcrumb
97
+ # @!attribute metadata
98
+ # @return [Hash, nil]
99
+ def metadata
100
+ @meta_data
101
+ end
102
+
103
+ # @param metadata [Hash, nil]
104
+ # @return [void]
105
+ def metadata=(metadata)
106
+ @meta_data = metadata
107
+ end
75
108
  end
76
109
  end
@@ -1,4 +1,5 @@
1
1
  module Bugsnag::Breadcrumbs
2
+ # @deprecated Use {Bugsnag::BreadcrumbType} instead
2
3
  VALID_BREADCRUMB_TYPES = [
3
4
  ERROR_BREADCRUMB_TYPE = "error",
4
5
  MANUAL_BREADCRUMB_TYPE = "manual",
@@ -0,0 +1,50 @@
1
+ require "set"
2
+
3
+ module Bugsnag::Breadcrumbs
4
+ class OnBreadcrumbCallbackList
5
+ def initialize(configuration)
6
+ @callbacks = Set.new
7
+ @mutex = Mutex.new
8
+ @configuration = configuration
9
+ end
10
+
11
+ ##
12
+ # @param callback [Proc, Method, #call]
13
+ # @return [void]
14
+ def add(callback)
15
+ @mutex.synchronize do
16
+ @callbacks.add(callback)
17
+ end
18
+ end
19
+
20
+ ##
21
+ # @param callback [Proc, Method, #call]
22
+ # @return [void]
23
+ def remove(callback)
24
+ @mutex.synchronize do
25
+ @callbacks.delete(callback)
26
+ end
27
+ end
28
+
29
+ ##
30
+ # @param breadcrumb [Breadcrumb]
31
+ # @return [void]
32
+ def call(breadcrumb)
33
+ @callbacks.each do |callback|
34
+ begin
35
+ should_continue = callback.call(breadcrumb)
36
+ rescue StandardError => e
37
+ @configuration.warn("Error occurred in on_breadcrumb callback: '#{e}'")
38
+ @configuration.warn("on_breadcrumb callback stacktrace: #{e.backtrace.inspect}")
39
+ end
40
+
41
+ # only stop if should_continue is explicity 'false' to allow callbacks
42
+ # to return 'nil'
43
+ if should_continue == false
44
+ breadcrumb.ignore!
45
+ break
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -25,7 +25,7 @@ module Bugsnag
25
25
  # @param url [String]
26
26
  # @return [String]
27
27
  def clean_url(url)
28
- return url if @configuration.meta_data_filters.empty?
28
+ return url if @configuration.meta_data_filters.empty? && @configuration.redacted_keys.empty?
29
29
 
30
30
  uri = URI(url)
31
31
  return url unless uri.query
@@ -43,6 +43,33 @@ module Bugsnag
43
43
  uri.to_s
44
44
  end
45
45
 
46
+ ##
47
+ # @param key [String, #to_s]
48
+ # @return [Boolean]
49
+ def filters_match?(key)
50
+ str = key.to_s
51
+
52
+ matched = @configuration.meta_data_filters.any? do |filter|
53
+ case filter
54
+ when Regexp
55
+ str.match(filter)
56
+ else
57
+ str.include?(filter.to_s)
58
+ end
59
+ end
60
+
61
+ return true if matched
62
+
63
+ @configuration.redacted_keys.any? do |redaction_pattern|
64
+ case redaction_pattern
65
+ when Regexp
66
+ str.match(redaction_pattern)
67
+ when String
68
+ str.downcase == redaction_pattern.downcase
69
+ end
70
+ end
71
+ end
72
+
46
73
  private
47
74
 
48
75
  ##
@@ -54,9 +81,11 @@ module Bugsnag
54
81
  #
55
82
  # @return [Boolean]
56
83
  def deep_filters?
57
- @configuration.meta_data_filters.any? do |filter|
84
+ is_deep_filter = proc do |filter|
58
85
  filter.is_a?(Regexp) && filter.to_s.include?("\\.".freeze)
59
86
  end
87
+
88
+ @configuration.meta_data_filters.any?(&is_deep_filter) || @configuration.redacted_keys.any?(&is_deep_filter)
60
89
  end
61
90
 
62
91
  def clean_string(str)
@@ -137,22 +166,6 @@ module Bugsnag
137
166
  value
138
167
  end
139
168
 
140
- ##
141
- # @param key [String, #to_s]
142
- # @return [Boolean]
143
- def filters_match?(key)
144
- str = key.to_s
145
-
146
- @configuration.meta_data_filters.any? do |filter|
147
- case filter
148
- when Regexp
149
- str.match(filter)
150
- else
151
- str.include?(filter.to_s)
152
- end
153
- end
154
- end
155
-
156
169
  ##
157
170
  # If someone has a Rails filter like /^stuff\.secret/, it won't match
158
171
  # "request.params.stuff.secret", so we try it both with and without the