sentry-rails 4.2.2 → 4.3.3

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: e22a278e6c74ad09c754d5270c227c1dd0989c90654d2f3f55d3ca06e06ad577
4
- data.tar.gz: c3bed6941cf8abdc306d20fd6ef7ebcecf08bb246b05921002423ac984a20d2b
3
+ metadata.gz: f1790a49cf858500aa57dd9290d37e794bb969b7b961e11047e8df61a090ec95
4
+ data.tar.gz: a9626020e87f157e1eed1c2f49296f796406958e789c379915fbecf5da49ff9a
5
5
  SHA512:
6
- metadata.gz: bdda28d73217516a73ffdf82ddc81687649255623a38ebcd3f9aa52d98bdf6ced7882a13c1d9dae8509eda5e1bc82a99c2762c8c5e89cd27153a98e81ba7d691
7
- data.tar.gz: 396aaacdf3db30251891de7bf4c5e6e5c27f5ce69eb6c9fc157f5fc70dada5c4fa782dac0dcf6050c6a8cf2474f680d801f4a7dac555b20f990aca077e8cfbc9
6
+ metadata.gz: 7d2d760f4fa7ac34e39294169f8be9c19d9ff7e19fb1c7a89d3205ff843b626bf90f89ee516b248539d180ac347c907ca23c55953033eb1d8588fd15e57f833c
7
+ data.tar.gz: 3fd609010fba1eef3a56ce52a5f09e7d58ad5f43f1c3b039d4deed3bdb89f276da434a2e76d2b6f06d79ae85c4ebb7daa24179503b607d3b6be23808005565ce
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  /doc/
6
6
  /pkg/
7
7
  /spec/reports/
8
+ /spec/support/test_rails_app/db
8
9
  /tmp/
9
10
 
10
11
  # rspec failure tracking
data/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.3.3
4
+
5
+ - Correctly set the SDK's logger in sentry-rails [#1363](https://github.com/getsentry/sentry-ruby/pull/1363)
6
+ - Fixes [#1361](https://github.com/getsentry/sentry-ruby/issues/1361)
7
+
8
+ ## 4.3.3-beta.0
9
+
10
+ - Minimize sentry-rails' dependency requirement [#1352](https://github.com/getsentry/sentry-ruby/pull/1352)
11
+
12
+ ## 4.3.2
13
+
14
+ - Avoid recording SendEventJob's transaction [#1351](https://github.com/getsentry/sentry-ruby/pull/1351)
15
+ - Fixes [#1348](https://github.com/getsentry/sentry-ruby/issues/1348)
16
+
17
+ ## 4.3.1
18
+
19
+ - Only apply background worker patch if ActiveRecord is loaded [#1350](https://github.com/getsentry/sentry-ruby/pull/1350)
20
+ - Fixes [#1342](https://github.com/getsentry/sentry-ruby/issues/1342) and [#1346](https://github.com/getsentry/sentry-ruby/issues/1346)
21
+
22
+ ## 4.3.0
23
+
24
+ ### Features
25
+
26
+ - Support performance monitoring on ActiveJob execution [#1304](https://github.com/getsentry/sentry-ruby/pull/1304)
27
+
28
+ ### Bug Fixes
29
+
30
+ - Prevent background workers from holding ActiveRecord connections [#1320](https://github.com/getsentry/sentry-ruby/pull/1320)
31
+
3
32
  ## 4.2.2
4
33
 
5
34
  - Always define Sentry::SendEventJob to avoid eager load issues [#1286](https://github.com/getsentry/sentry-ruby/pull/1286)
data/Gemfile CHANGED
@@ -17,11 +17,13 @@ end
17
17
 
18
18
  gem "rails", "~> #{rails_version}"
19
19
  gem "sprockets-rails"
20
+
21
+ gem "rspec", "~> 3.0"
22
+ gem "rspec-retry"
20
23
  gem "rspec-rails", "~> 4.0"
21
24
  gem "codecov", "0.2.12"
22
25
 
23
26
  gem "rake", "~> 12.0"
24
- gem "rspec", "~> 3.0"
25
27
 
26
28
  # TODO: Remove this if https://github.com/jruby/jruby/issues/6547 is addressed
27
29
  gem "i18n", "<= 1.8.7"
@@ -22,6 +22,11 @@ if defined?(ActiveJob)
22
22
  end
23
23
 
24
24
  def perform(event, hint = {})
25
+ # users don't need the tracing result of this job
26
+ if transaction = Sentry.get_current_scope.span
27
+ transaction.instance_variable_set(:@sampled, false)
28
+ end
29
+
25
30
  Sentry.send_event(event, hint)
26
31
  end
27
32
  end
data/lib/sentry/rails.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "rails"
1
2
  require "sentry-ruby"
2
3
  require "sentry/integrable"
3
4
  require "sentry/rails/configuration"
@@ -8,8 +8,8 @@ module Sentry
8
8
  if already_supported_by_specific_integration?(job)
9
9
  block.call
10
10
  else
11
- Sentry.with_scope do
12
- capture_and_reraise_with_sentry(job, block)
11
+ Sentry.with_scope do |scope|
12
+ capture_and_reraise_with_sentry(job, scope, block)
13
13
  end
14
14
  end
15
15
  else
@@ -19,10 +19,18 @@ module Sentry
19
19
  end
20
20
  end
21
21
 
22
- def capture_and_reraise_with_sentry(job, block)
22
+ def capture_and_reraise_with_sentry(job, scope, block)
23
+ scope.set_transaction_name(job.class.name)
24
+ transaction = Sentry.start_transaction(name: scope.transaction_name, op: "active_job")
25
+
26
+ scope.set_span(transaction) if transaction
27
+
23
28
  block.call
29
+
30
+ finish_transaction(transaction, 200)
24
31
  rescue Exception => e # rubocop:disable Lint/RescueException
25
32
  rescue_handler_result = rescue_with_handler(e)
33
+ finish_transaction(transaction, 500)
26
34
  return rescue_handler_result if rescue_handler_result
27
35
 
28
36
  Sentry::Rails.capture_exception(
@@ -36,6 +44,13 @@ module Sentry
36
44
  raise e
37
45
  end
38
46
 
47
+ def finish_transaction(transaction, status)
48
+ return unless transaction
49
+
50
+ transaction.set_http_status(status)
51
+ transaction.finish
52
+ end
53
+
39
54
  def already_supported_by_specific_integration?(job)
40
55
  Sentry.configuration.rails.skippable_job_adapters.include?(job.class.queue_adapter.class.to_s)
41
56
  end
@@ -0,0 +1,12 @@
1
+ module Sentry
2
+ class BackgroundWorker
3
+ def perform(&block)
4
+ @executor.post do
5
+ # make sure the background worker returns AR connection if it accidentally acquire one during serialization
6
+ ActiveRecord::Base.connection_pool.with_connection do
7
+ block.call
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -29,11 +29,16 @@ module Sentry
29
29
  Sentry::Rails.capture_exception(exception)
30
30
  end
31
31
 
32
- def finish_span(span, status_code)
33
- if @assets_regex.nil? || !span.name.match?(@assets_regex)
34
- span.set_http_status(status_code)
35
- span.finish
32
+ def start_transaction(env, scope)
33
+ transaction = super
34
+
35
+ return unless transaction
36
+
37
+ if @assets_regex && transaction.name.match?(@assets_regex)
38
+ transaction.instance_variable_set(:@sampled, false)
36
39
  end
40
+
41
+ transaction
37
42
  end
38
43
  end
39
44
  end
@@ -5,6 +5,7 @@ module Sentry
5
5
  add_post_initialization_callback do
6
6
  @rails = Sentry::Rails::Configuration.new
7
7
  @excluded_exceptions = @excluded_exceptions.concat(Sentry::Rails::IGNORE_DEFAULT)
8
+ @logger = ::Rails.logger
8
9
  end
9
10
  end
10
11
 
@@ -1,11 +1,6 @@
1
- require "rails"
2
1
  require "sentry/rails/capture_exceptions"
3
2
  require "sentry/rails/rescued_exception_interceptor"
4
3
  require "sentry/rails/backtrace_cleaner"
5
- require "sentry/rails/controller_methods"
6
- require "sentry/rails/controller_transaction"
7
- require "sentry/rails/overrides/streaming_reporter"
8
- require "sentry/rails/overrides/file_handler"
9
4
 
10
5
  module Sentry
11
6
  class Railtie < ::Rails::Railtie
@@ -21,12 +16,12 @@ module Sentry
21
16
  next unless Sentry.initialized?
22
17
 
23
18
  configure_project_root
24
- configure_sentry_logger
25
19
  configure_trusted_proxies
26
- extend_controller_methods
20
+ extend_controller_methods if defined?(ActionController)
27
21
  extend_active_job if defined?(ActiveJob)
28
- override_streaming_reporter
29
- override_file_handler if app.config.public_file_server.enabled
22
+ patch_background_worker if defined?(ActiveRecord)
23
+ override_streaming_reporter if defined?(ActionView)
24
+ override_file_handler if defined?(ActionDispatch) && app.config.public_file_server.enabled
30
25
  setup_backtrace_cleanup_callback
31
26
  inject_breadcrumbs_logger
32
27
  activate_tracing
@@ -36,10 +31,6 @@ module Sentry
36
31
  Sentry.configuration.project_root = ::Rails.root.to_s
37
32
  end
38
33
 
39
- def configure_sentry_logger
40
- Sentry.configuration.logger = ::Rails.logger
41
- end
42
-
43
34
  def configure_trusted_proxies
44
35
  Sentry.configuration.trusted_proxies += Array(::Rails.application.config.action_dispatch.trusted_proxies)
45
36
  end
@@ -50,6 +41,10 @@ module Sentry
50
41
  end
51
42
 
52
43
  def extend_controller_methods
44
+ require "sentry/rails/controller_methods"
45
+ require "sentry/rails/controller_transaction"
46
+ require "sentry/rails/overrides/streaming_reporter"
47
+
53
48
  ActiveSupport.on_load :action_controller do
54
49
  include Sentry::Rails::ControllerMethods
55
50
  include Sentry::Rails::ControllerTransaction
@@ -57,6 +52,10 @@ module Sentry
57
52
  end
58
53
  end
59
54
 
55
+ def patch_background_worker
56
+ require "sentry/rails/background_worker"
57
+ end
58
+
60
59
  def inject_breadcrumbs_logger
61
60
  if Sentry.configuration.breadcrumbs_logger.include?(:active_support_logger)
62
61
  require 'sentry/rails/breadcrumb/active_support_logger'
@@ -73,12 +72,16 @@ module Sentry
73
72
  end
74
73
 
75
74
  def override_streaming_reporter
75
+ require "sentry/rails/overrides/streaming_reporter"
76
+
76
77
  ActiveSupport.on_load :action_view do
77
78
  ActionView::StreamingTemplateRenderer::Body.send(:prepend, Sentry::Rails::Overrides::StreamingReporter)
78
79
  end
79
80
  end
80
81
 
81
82
  def override_file_handler
83
+ require "sentry/rails/overrides/file_handler"
84
+
82
85
  ActiveSupport.on_load :action_controller do
83
86
  ActionDispatch::FileHandler.send(:prepend, Sentry::Rails::Overrides::FileHandler)
84
87
  end
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Rails
3
- VERSION = "4.2.2"
3
+ VERSION = "4.3.3"
4
4
  end
5
5
  end
data/sentry-rails.gemspec CHANGED
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency "rails", ">= 5.0"
26
- spec.add_dependency "sentry-ruby-core", "~> 4.2.0"
25
+ spec.add_dependency "railties", ">= 5.0"
26
+ spec.add_dependency "sentry-ruby-core", "~> 4.3.0"
27
27
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.2
4
+ version: 4.3.3
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-02-18 00:00:00.000000000 Z
11
+ date: 2021-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 4.2.0
33
+ version: 4.3.0
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.2.0
40
+ version: 4.3.0
41
41
  description: A gem that provides Rails integration for the Sentry error logger
42
42
  email: accounts@sentry.io
43
43
  executables: []
@@ -62,6 +62,7 @@ files:
62
62
  - lib/sentry-rails.rb
63
63
  - lib/sentry/rails.rb
64
64
  - lib/sentry/rails/active_job.rb
65
+ - lib/sentry/rails/background_worker.rb
65
66
  - lib/sentry/rails/backtrace_cleaner.rb
66
67
  - lib/sentry/rails/breadcrumb/active_support_logger.rb
67
68
  - lib/sentry/rails/capture_exceptions.rb