sentry-rails 4.3.4 → 4.4.0.pre.beta.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
  SHA256:
3
- metadata.gz: 48f0349352e2f19b3be18c7ea0e5b7a600ad72d01ed1d2ce4052e55b7df471c3
4
- data.tar.gz: 7f2c6d5f3e2f2ec40cd797e81856951beced5fde6897cc993dfa8c2046ba7800
3
+ metadata.gz: 1abbd4e00c660384cf961b09d8d8a2d98148336adf9ed7b766f73ca24c08cf33
4
+ data.tar.gz: ca6bba663f5db7948e5078e77e38e7dbfb30bf9849c885fd5645a62e422bbb97
5
5
  SHA512:
6
- metadata.gz: 0eef4c4a1a50168a669fdf786f78842ca45c6c0d04e1ec1b9f783ad86f0a70bf94a40b6207ab8334a6cfaec953bdbdbe7dc8f04c3301dbf62a02656ebb0e24b8
7
- data.tar.gz: c5d28ee621ed6ad90a520a6e5c8fce8047a38907a493c706c5bb9f77304884b70e0564ddc90689214a0e919e6a8f6ea5d3ecbfea44de3c32bf934a74dd9459ec
6
+ metadata.gz: 2a05541ee2a1441ed70055b909d3c04b87b931df16c70e0c076d2ed44cda60146e1680c4326fb0e55a96dd598b1171cd4fcb6cbcaeab9110936c7a6a9048601b
7
+ data.tar.gz: 9374e863588b2a926c05b8e2e0ed295d46813d9ebae9b98061e1dcc6329cb2ffcd3c617f66ef77e2c171e5a30c401fbefde0beed2717d382289bf2c161649fb2
data/.craft.yml CHANGED
@@ -11,9 +11,10 @@ artifactProvider:
11
11
  name: github
12
12
  targets:
13
13
  - name: gem
14
- - name: github
15
- tagPrefix: sentry-rails-v
16
14
  - name: registry
17
15
  type: sdk
18
16
  config:
19
17
  canonical: 'gem:sentry-rails'
18
+ - name: github
19
+ tagPrefix: sentry-rails-v
20
+ changelog: sentry-rails/CHANGELOG.md
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.4.0-beta.0
4
+
5
+ ### Features
6
+
7
+ - Make tracing subscribers configurable [#1344](https://github.com/getsentry/sentry-ruby/pull/1344)
8
+
9
+ ```ruby
10
+ # current default:
11
+ # - Sentry::Rails::Tracing::ActionControllerSubscriber
12
+ # - Sentry::Rails::Tracing::ActionViewSubscriber
13
+ # - Sentry::Rails::Tracing::ActiveRecordSubscriber
14
+
15
+ # you can add a new subscriber
16
+ config.rails.tracing_subscribers << MySubscriber
17
+ # or replace the set completely
18
+ config.rails.tracing_subscribers = [MySubscriber]
19
+ ```
20
+
21
+ ### Bug Fixes
22
+
23
+ - Report exceptions from the interceptor middleware for exceptions app [#1379](https://github.com/getsentry/sentry-ruby/pull/1379)
24
+ - Fixes [#1371](https://github.com/getsentry/sentry-ruby/issues/1371)
25
+ - Re-position CaptureExceptions middleware to reduce tracing noise [#1405](https://github.com/getsentry/sentry-ruby/pull/1405)
26
+
3
27
  ## 4.3.4
4
28
 
5
29
  - Don't assign Rails.logger if it's not present [#1387](https://github.com/getsentry/sentry-ruby/pull/1387)
@@ -12,6 +12,7 @@ module Sentry
12
12
  private
13
13
 
14
14
  def collect_exception(env)
15
+ return nil if env["sentry.already_captured"]
15
16
  super || env["action_dispatch.exception"] || env["sentry.rescued_exception"]
16
17
  end
17
18
 
@@ -30,15 +31,15 @@ module Sentry
30
31
  end
31
32
 
32
33
  def start_transaction(env, scope)
33
- transaction = super
34
+ sentry_trace = env["HTTP_SENTRY_TRACE"]
35
+ options = { name: scope.transaction_name, op: transaction_op }
34
36
 
35
- return unless transaction
36
-
37
- if @assets_regex && transaction.name.match?(@assets_regex)
38
- transaction.instance_variable_set(:@sampled, false)
37
+ if @assets_regex && scope.transaction_name.match?(@assets_regex)
38
+ options.merge!(sampled: false)
39
39
  end
40
40
 
41
- transaction
41
+ transaction = Sentry::Transaction.from_sentry_trace(sentry_trace, **options) if sentry_trace
42
+ Sentry.start_transaction(transaction: transaction, **options)
42
43
  end
43
44
  end
44
45
  end
@@ -1,3 +1,7 @@
1
+ require "sentry/rails/tracing/action_controller_subscriber"
2
+ require "sentry/rails/tracing/action_view_subscriber"
3
+ require "sentry/rails/tracing/active_record_subscriber"
4
+
1
5
  module Sentry
2
6
  class Configuration
3
7
  attr_reader :rails
@@ -47,10 +51,16 @@ module Sentry
47
51
  # In those cases, we should skip ActiveJob's reporting to avoid duplicated reports.
48
52
  attr_accessor :skippable_job_adapters
49
53
 
54
+ attr_accessor :tracing_subscribers
55
+
50
56
  def initialize
51
57
  @report_rescued_exceptions = true
52
- # TODO: Remove this in 4.2.0
53
58
  @skippable_job_adapters = []
59
+ @tracing_subscribers = Set.new([
60
+ Sentry::Rails::Tracing::ActionControllerSubscriber,
61
+ Sentry::Rails::Tracing::ActionViewSubscriber,
62
+ Sentry::Rails::Tracing::ActiveRecordSubscriber
63
+ ])
54
64
  end
55
65
  end
56
66
  end
@@ -6,8 +6,8 @@ module Sentry
6
6
  class Railtie < ::Rails::Railtie
7
7
  # middlewares can't be injected after initialize
8
8
  initializer "sentry.use_rack_middleware" do |app|
9
- # need to be placed at first to capture as many errors as possible
10
- app.config.middleware.insert 0, Sentry::Rails::CaptureExceptions
9
+ # placed after all the file-sending middlewares so we can avoid unnecessary transactions
10
+ app.config.middleware.insert_after ActionDispatch::Executor, Sentry::Rails::CaptureExceptions
11
11
  # need to be placed at last to smuggle app exceptions via env
12
12
  app.config.middleware.use(Sentry::Rails::RescuedExceptionInterceptor)
13
13
  end
@@ -21,7 +21,6 @@ module Sentry
21
21
  extend_active_job if defined?(ActiveJob)
22
22
  patch_background_worker if defined?(ActiveRecord)
23
23
  override_streaming_reporter if defined?(ActionView)
24
- override_file_handler if defined?(ActionDispatch) && app.config.public_file_server.enabled
25
24
  setup_backtrace_cleanup_callback
26
25
  inject_breadcrumbs_logger
27
26
  activate_tracing
@@ -79,16 +78,10 @@ module Sentry
79
78
  end
80
79
  end
81
80
 
82
- def override_file_handler
83
- require "sentry/rails/overrides/file_handler"
84
-
85
- ActiveSupport.on_load :action_controller do
86
- ActionDispatch::FileHandler.send(:prepend, Sentry::Rails::Overrides::FileHandler)
87
- end
88
- end
89
-
90
81
  def activate_tracing
91
82
  if Sentry.configuration.tracing_enabled?
83
+ subscribers = Sentry.configuration.rails.tracing_subscribers
84
+ Sentry::Rails::Tracing.register_subscribers(subscribers)
92
85
  Sentry::Rails::Tracing.subscribe_tracing_events
93
86
  Sentry::Rails::Tracing.patch_active_support_notifications
94
87
  end
@@ -20,12 +20,21 @@ module Sentry
20
20
  copied_env = scope.rack_env.dup
21
21
  copied_env["sentry.original_transaction"] = scope.transaction_name
22
22
  scope.set_rack_env(copied_env)
23
+
24
+ if report_rescued_exceptions?
25
+ Sentry::Rails.capture_exception(e)
26
+ env["sentry.already_captured"] = true
27
+ end
23
28
  end
24
29
 
25
- env["sentry.rescued_exception"] = e if Sentry.configuration.rails.report_rescued_exceptions
30
+ env["sentry.rescued_exception"] = e if report_rescued_exceptions?
26
31
  raise e
27
32
  end
28
33
  end
34
+
35
+ def report_rescued_exceptions?
36
+ Sentry.configuration.rails.report_rescued_exceptions
37
+ end
29
38
  end
30
39
  end
31
40
  end
@@ -1,18 +1,19 @@
1
- require "sentry/rails/tracing/abstract_subscriber"
2
- require "sentry/rails/tracing/active_record_subscriber"
3
- require "sentry/rails/tracing/action_controller_subscriber"
4
- require "sentry/rails/tracing/action_view_subscriber"
5
-
6
1
  module Sentry
7
2
  module Rails
8
3
  module Tracing
9
- AVAILABLE_SUBSCRIBERS = [ActionViewSubscriber, ActiveRecordSubscriber, ActionControllerSubscriber]
4
+ def self.register_subscribers(subscribers)
5
+ @subscribers = subscribers
6
+ end
7
+
8
+ def self.subscribers
9
+ @subscribers
10
+ end
10
11
 
11
12
  def self.subscribe_tracing_events
12
13
  # need to avoid duplicated subscription
13
14
  return if @subscribed
14
15
 
15
- AVAILABLE_SUBSCRIBERS.each(&:subscribe!)
16
+ subscribers.each(&:subscribe!)
16
17
 
17
18
  @subscribed = true
18
19
  end
@@ -20,7 +21,7 @@ module Sentry
20
21
  def self.unsubscribe_tracing_events
21
22
  return unless @subscribed
22
23
 
23
- AVAILABLE_SUBSCRIBERS.each(&:unsubscribe!)
24
+ subscribers.each(&:unsubscribe!)
24
25
 
25
26
  @subscribed = false
26
27
  end
@@ -1,3 +1,5 @@
1
+ require "sentry/rails/tracing/abstract_subscriber"
2
+
1
3
  module Sentry
2
4
  module Rails
3
5
  module Tracing
@@ -1,3 +1,5 @@
1
+ require "sentry/rails/tracing/abstract_subscriber"
2
+
1
3
  module Sentry
2
4
  module Rails
3
5
  module Tracing
@@ -1,3 +1,5 @@
1
+ require "sentry/rails/tracing/abstract_subscriber"
2
+
1
3
  module Sentry
2
4
  module Rails
3
5
  module Tracing
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Rails
3
- VERSION = "4.3.4"
3
+ VERSION = "4.4.0-beta.0"
4
4
  end
5
5
  end
data/sentry-rails.gemspec CHANGED
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_dependency "railties", ">= 5.0"
26
- spec.add_dependency "sentry-ruby-core", "~> 4.3.0"
26
+ spec.add_dependency "sentry-ruby-core", "~> 4.4.0.pre.beta"
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.4
4
+ version: 4.4.0.pre.beta.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-06 00:00:00.000000000 Z
11
+ date: 2021-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 4.3.0
33
+ version: 4.4.0.pre.beta
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 4.3.0
40
+ version: 4.4.0.pre.beta
41
41
  description: A gem that provides Rails integration for the Sentry error logger
42
42
  email: accounts@sentry.io
43
43
  executables: []
@@ -70,7 +70,6 @@ files:
70
70
  - lib/sentry/rails/controller_methods.rb
71
71
  - lib/sentry/rails/controller_transaction.rb
72
72
  - lib/sentry/rails/engine.rb
73
- - lib/sentry/rails/overrides/file_handler.rb
74
73
  - lib/sentry/rails/overrides/streaming_reporter.rb
75
74
  - lib/sentry/rails/railtie.rb
76
75
  - lib/sentry/rails/rescued_exception_interceptor.rb
@@ -99,9 +98,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
98
  version: '2.4'
100
99
  required_rubygems_version: !ruby/object:Gem::Requirement
101
100
  requirements:
102
- - - ">="
101
+ - - ">"
103
102
  - !ruby/object:Gem::Version
104
- version: '0'
103
+ version: 1.3.1
105
104
  requirements: []
106
105
  rubygems_version: 3.0.3.1
107
106
  signing_key:
@@ -1,16 +0,0 @@
1
- module Sentry
2
- module Rails
3
- module Overrides
4
- module FileHandler
5
- def serve(*args)
6
- if Sentry.initialized? && current_transaction = Sentry.get_current_scope.span
7
- # we don't want to expose a setter for @sampled just for this case
8
- current_transaction.instance_variable_set(:@sampled, false)
9
- end
10
-
11
- super
12
- end
13
- end
14
- end
15
- end
16
- end