sentry-rails 4.1.7 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e101fa2f42e1bf68db025a8c02a391ee510cfb43d286c63156397efcbcc1f6a
4
- data.tar.gz: 8673fc2ff559d18b09c41b05e373116feb1ae7b04cbe4de5f99637afaf05c8da
3
+ metadata.gz: 88b2f50f7497ed668cc86fda80d8bbd653e3e01b3a7d3c3f7643e5de81de697c
4
+ data.tar.gz: e2ee2b20c9a85f947f4fcfe4f5c68b82226336aa54c73b5c116e767307bb4cd0
5
5
  SHA512:
6
- metadata.gz: 156a36ae19a647b1b17e4278108296356339363f659d714b24dfcc095c14d59ae01ef85bc08c0c1a3331e401522bd7130214432a2a931f40fdeedff0ef6a0bcb
7
- data.tar.gz: 897b9c2f0d82266b2725cbbd30bd8478fda5e1c3dae80927e6e3f73917d8ab417066c1be545b552a39d1ed6560f5ca8c16e0247cbf3199d3cabe110f41cd175c
6
+ metadata.gz: 1c86549b0348fec623ed863f9f11147d6cf04c20a7c8cd4ba96755959084f8d8436a8ee768edf5011230b7dfe62155aafcca7f1aaebf298a30d2dff1799c9310
7
+ data.tar.gz: f6ee86657ef5960e22fe72c826b86ee0992a16769416429ab791821b2d974672ebe83d3c8fead135554ad2acdda6c0f59ad4a1c291d0ae3e6e7dc8d1584dfee4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.2.0
4
+
5
+ ### Features
6
+
7
+ - Make sentry-rails a Rails engine and provide default job class for async [#1181](https://github.com/getsentry/sentry-ruby/pull/1181)
8
+
9
+ `sentry-rails` now provides a default ActiveJob class for sending events asynchronously. You can use it directly without define your own one:
10
+
11
+ ```ruby
12
+ config.async = lambda { |event, hint| Sentry::SendEventJob.perform_later(event, hint) }
13
+ ```
14
+
15
+ - Add configuration option for trusted proxies [#1126](https://github.com/getsentry/sentry-ruby/pull/1126)
16
+
17
+ `sentry-rails` now injects `Rails.application.config.action_dispatch.trusted_proxies` into `Sentry.configuration.trusted_proxies` automatically.
18
+
19
+ - Allow users to configure ActiveJob adapters to ignore [#1256](https://github.com/getsentry/sentry-ruby/pull/1256)
20
+
21
+ ```ruby
22
+ # sentry-rails will skip active_job reporting for jobs that use ActiveJob::QueueAdapters::SidekiqAdapter
23
+ # you should use this option when:
24
+ # - you don't want to see events from a certain adapter
25
+ # - you already have a better reporting setup for the adapter (like having `sentry-sidekiq` installed)
26
+ config.rails.skippable_job_adapters = ["ActiveJob::QueueAdapters::SidekiqAdapter"]
27
+ ```
28
+
29
+ - Tag `job_id` and `provider_job_id` on ActiveJob events [#1259](https://github.com/getsentry/sentry-ruby/pull/1259)
30
+
31
+ <img width="1330" alt="example of tagged event" src="https://user-images.githubusercontent.com/5079556/106389781-3a03f100-6420-11eb-810c-a99869eb26dd.png">
32
+
33
+ - Use another method for post initialization callback [#1261](https://github.com/getsentry/sentry-ruby/pull/1261)
34
+
35
+ ### Bug Fixes
36
+
37
+ - Inspect exception cause by default & don't exclude ActiveJob::DeserializationError [#1180](https://github.com/getsentry/sentry-ruby/pull/1180)
38
+ - Fixes [#1071](https://github.com/getsentry/sentry-ruby/issues/1071)
39
+
3
40
  ## 4.1.7
4
41
 
5
42
  - Use env to carry original transaction name [#1255](https://github.com/getsentry/sentry-ruby/pull/1255)
@@ -75,4 +112,3 @@ Release test
75
112
  ## 0.1.0
76
113
 
77
114
  First version
78
-
data/Gemfile CHANGED
@@ -18,6 +18,9 @@ gem "codecov", "0.2.12"
18
18
  gem "rake", "~> 12.0"
19
19
  gem "rspec", "~> 3.0"
20
20
 
21
+ # TODO: Remove this if https://github.com/jruby/jruby/issues/6547 is addressed
22
+ gem "i18n", "<= 1.8.7"
23
+
21
24
  gem "sidekiq"
22
25
 
23
26
  gem "sentry-ruby", path: "../sentry-ruby"
@@ -0,0 +1,20 @@
1
+ return unless defined?(ActiveJob)
2
+
3
+ module Sentry
4
+ parent_job =
5
+ if defined?(ApplicationJob)
6
+ ApplicationJob
7
+ else
8
+ ActiveJob::Base
9
+ end
10
+
11
+ class SendEventJob < parent_job
12
+ self.log_arguments = false if ::Rails.version.to_f >= 6.1
13
+ discard_on ActiveJob::DeserializationError # this will prevent infinite loop when there's an issue deserializing SentryJob
14
+
15
+ def perform(event, hint = {})
16
+ Sentry.send_event(event, hint)
17
+ end
18
+ end
19
+ end
20
+
data/lib/sentry/rails.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "sentry-ruby"
2
2
  require "sentry/integrable"
3
3
  require "sentry/rails/configuration"
4
+ require "sentry/rails/engine"
4
5
  require "sentry/rails/railtie"
5
6
  require "sentry/rails/tracing"
6
7
 
@@ -1,10 +1,6 @@
1
1
  module Sentry
2
2
  module Rails
3
3
  module ActiveJobExtensions
4
- ALREADY_SUPPORTED_SENTRY_ADAPTERS = %w(
5
- ActiveJob::QueueAdapters::SidekiqAdapter
6
- ).freeze
7
-
8
4
  def self.included(base)
9
5
  base.class_eval do
10
6
  around_perform do |job, block|
@@ -29,28 +25,30 @@ module Sentry
29
25
  rescue_handler_result = rescue_with_handler(e)
30
26
  return rescue_handler_result if rescue_handler_result
31
27
 
32
- Sentry::Rails.capture_exception(e, extra: sentry_context(job))
28
+ Sentry::Rails.capture_exception(
29
+ e,
30
+ extra: sentry_context(job),
31
+ tags: {
32
+ job_id: job.job_id,
33
+ provider_job_id: job.provider_job_id
34
+ }
35
+ )
33
36
  raise e
34
37
  end
35
38
 
36
39
  def already_supported_by_specific_integration?(job)
37
- ALREADY_SUPPORTED_SENTRY_ADAPTERS.include?(job.class.queue_adapter.class.to_s)
40
+ Sentry.configuration.rails.skippable_job_adapters.include?(job.class.queue_adapter.class.to_s)
38
41
  end
39
42
 
40
43
  def sentry_context(job)
41
- ctx = {
42
- :active_job => job.class.name,
43
- :arguments => job.arguments,
44
- :scheduled_at => job.scheduled_at,
45
- :job_id => job.job_id,
46
- :locale => job.locale
44
+ {
45
+ active_job: job.class.name,
46
+ arguments: job.arguments,
47
+ scheduled_at: job.scheduled_at,
48
+ job_id: job.job_id,
49
+ provider_job_id: job.provider_job_id,
50
+ locale: job.locale
47
51
  }
48
- # Add provider_job_id details if Rails 5
49
- if job.respond_to?(:provider_job_id)
50
- ctx[:provider_job_id] = job.provider_job_id
51
- end
52
-
53
- ctx
54
52
  end
55
53
  end
56
54
  end
@@ -2,7 +2,7 @@ module Sentry
2
2
  class Configuration
3
3
  attr_reader :rails
4
4
 
5
- def post_initialization_callback
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
8
  end
@@ -23,7 +23,6 @@ module Sentry
23
23
  'ActionDispatch::Http::MimeNegotiation::InvalidType',
24
24
  'ActionController::UnknownHttpMethod',
25
25
  'ActionDispatch::Http::Parameters::ParseError',
26
- 'ActiveJob::DeserializationError', # Can cause infinite loops
27
26
  'ActiveRecord::RecordNotFound'
28
27
  ].freeze
29
28
  class Configuration
@@ -33,8 +32,14 @@ module Sentry
33
32
  # will report exceptions even when they are rescued by these middlewares.
34
33
  attr_accessor :report_rescued_exceptions
35
34
 
35
+ # Some adapters, like sidekiq, already have their own sentry integration.
36
+ # In those cases, we should skip ActiveJob's reporting to avoid duplicated reports.
37
+ attr_accessor :skippable_job_adapters
38
+
36
39
  def initialize
37
40
  @report_rescued_exceptions = true
41
+ # TODO: Remove this in 4.2.0
42
+ @skippable_job_adapters = []
38
43
  end
39
44
  end
40
45
  end
@@ -0,0 +1,5 @@
1
+ module Sentry
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Sentry
4
+ end
5
+ end
@@ -22,6 +22,7 @@ module Sentry
22
22
 
23
23
  configure_project_root
24
24
  configure_sentry_logger
25
+ configure_trusted_proxies
25
26
  extend_controller_methods
26
27
  extend_active_job if defined?(ActiveJob)
27
28
  override_streaming_reporter
@@ -39,6 +40,10 @@ module Sentry
39
40
  Sentry.configuration.logger = ::Rails.logger
40
41
  end
41
42
 
43
+ def configure_trusted_proxies
44
+ Sentry.configuration.trusted_proxies += Array(::Rails.application.config.action_dispatch.trusted_proxies)
45
+ end
46
+
42
47
  def extend_active_job
43
48
  require "sentry/rails/active_job"
44
49
  ActiveJob::Base.send(:prepend, Sentry::Rails::ActiveJobExtensions)
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Rails
3
- VERSION = "4.1.7"
3
+ VERSION = "4.2.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 "rails", ">= 5.0"
26
- spec.add_dependency "sentry-ruby-core", "~> 4.1.2"
26
+ spec.add_dependency "sentry-ruby-core", "~> 4.2.0"
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.1.7
4
+ version: 4.2.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-02-01 00:00:00.000000000 Z
11
+ date: 2021-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 4.1.2
33
+ version: 4.2.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.1.2
40
+ version: 4.2.0
41
41
  description: A gem that provides Rails integration for the Sentry error logger
42
42
  email: accounts@sentry.io
43
43
  executables: []
@@ -56,6 +56,7 @@ files:
56
56
  - Makefile
57
57
  - README.md
58
58
  - Rakefile
59
+ - app/jobs/sentry/send_event_job.rb
59
60
  - bin/console
60
61
  - bin/setup
61
62
  - lib/sentry-rails.rb
@@ -67,6 +68,7 @@ files:
67
68
  - lib/sentry/rails/configuration.rb
68
69
  - lib/sentry/rails/controller_methods.rb
69
70
  - lib/sentry/rails/controller_transaction.rb
71
+ - lib/sentry/rails/engine.rb
70
72
  - lib/sentry/rails/overrides/file_handler.rb
71
73
  - lib/sentry/rails/overrides/streaming_reporter.rb
72
74
  - lib/sentry/rails/railtie.rb