sentry-rails 4.1.2 → 4.1.7

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: 8d6a1afa9da4c0ec517f7cf0b494f7965f9d6b30450ed005face3d28d541430e
4
- data.tar.gz: 21a9be637731b712e430eee4652a3b98d7eef0475c7027833172b2dfb8a414fd
3
+ metadata.gz: 1e101fa2f42e1bf68db025a8c02a391ee510cfb43d286c63156397efcbcc1f6a
4
+ data.tar.gz: 8673fc2ff559d18b09c41b05e373116feb1ae7b04cbe4de5f99637afaf05c8da
5
5
  SHA512:
6
- metadata.gz: 8d9c22704d42808bb82104540524468e696da6e24340b6e79216c1dfd0510a8e30099915fb9502c676ecc4f399d7bf29c48468708e2b29a2b9b656a771c8264d
7
- data.tar.gz: 4eaff646e0096e0221c4389ff65ce50cd80a8ed4c03673718c1a5990b7a02f5d4639dffcb02a8622bc5f1f5b563c8c0dcaad8af77a72577d577c1744c81529a5
6
+ metadata.gz: 156a36ae19a647b1b17e4278108296356339363f659d714b24dfcc095c14d59ae01ef85bc08c0c1a3331e401522bd7130214432a2a931f40fdeedff0ef6a0bcb
7
+ data.tar.gz: 897b9c2f0d82266b2725cbbd30bd8478fda5e1c3dae80927e6e3f73917d8ab417066c1be545b552a39d1ed6560f5ca8c16e0247cbf3199d3cabe110f41cd175c
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.1.7
4
+
5
+ - Use env to carry original transaction name [#1255](https://github.com/getsentry/sentry-ruby/pull/1255)
6
+ - Fix duration of tracing event in Rails 5 [#1254](https://github.com/getsentry/sentry-ruby/pull/1254) (by @abcang)
7
+ - Filter out static file transaction [#1247](https://github.com/getsentry/sentry-ruby/pull/1247)
8
+
9
+ ## 4.1.6
10
+
11
+ - Prevent exceptions app from overriding event's transaction name [#1230](https://github.com/getsentry/sentry-ruby/pull/1230)
12
+ - Fix project root detection [#1242](https://github.com/getsentry/sentry-ruby/pull/1242)
13
+ - Use sentry-ruby-core as the main SDK dependency [#1244](https://github.com/getsentry/sentry-ruby/pull/1244)
14
+
15
+ ## 4.1.5
16
+
17
+ - Add `ActionDispatch::Http::MimeNegotiation::InvalidType` to the list of default ignored Rails exceptions [#1215](https://github.com/getsentry/sentry-ruby/pull/1215) (by @agrobbin)
18
+ - Continue ActiveJob execution if Sentry is not initialized [#1217](https://github.com/getsentry/sentry-ruby/pull/1217)
19
+ - Fixes [#1211](https://github.com/getsentry/sentry-ruby/issues/1211) and [#1216](https://github.com/getsentry/sentry-ruby/issues/1216)
20
+ - Only extend ActiveJob when it's defined [#1218](https://github.com/getsentry/sentry-ruby/pull/1218)
21
+ - Fixes [#1210](https://github.com/getsentry/sentry-ruby/issues/1210)
22
+ - Filter out redundant event/payload from breadcrumbs logger [#1222](https://github.com/getsentry/sentry-ruby/pull/1222)
23
+ - Copy request env before Rails' ShowExceptions middleware [#1223](https://github.com/getsentry/sentry-ruby/pull/1223)
24
+ - Don't subscribe render_partial and render_collection events [#1224](https://github.com/getsentry/sentry-ruby/pull/1224)
25
+
26
+ ## 4.1.4
27
+
28
+ - Don't include headers & request info in tracing span or breadcrumb [#1199](https://github.com/getsentry/sentry-ruby/pull/1199)
29
+ - Don't run RescuedExceptionInterceptor unless Sentry is initialized [#1204](https://github.com/getsentry/sentry-ruby/pull/1204)
30
+
31
+ ## 4.1.3
32
+
33
+ - Remove DelayedJobAdapter from ignored list [#1179](https://github.com/getsentry/sentry-ruby/pull/1179)
34
+
3
35
  ## 4.1.2
4
36
 
5
37
  - Use middleware instead of method override to handle rescued exceptions [#1168](https://github.com/getsentry/sentry-ruby/pull/1168)
data/Gemfile CHANGED
@@ -11,6 +11,7 @@ gem "jdbc-sqlite3", platform: :jruby
11
11
  gem "sqlite3", platform: :ruby
12
12
 
13
13
  gem "rails", "~> #{rails_version}"
14
+ gem "sprockets-rails"
14
15
  gem "rspec-rails", "~> 4.0"
15
16
  gem "codecov", "0.2.12"
16
17
 
@@ -0,0 +1,3 @@
1
+ build:
2
+ bundle install
3
+ gem build sentry-rails.gemspec
data/README.md CHANGED
@@ -44,7 +44,7 @@ Sentry.init do |config|
44
44
  # the default value is true
45
45
  config.rails.report_rescued_exceptions = true
46
46
 
47
- # this gem also provides a new breadcrumb logger that accepts instrumentaions from ActiveSupport
47
+ # this gem also provides a new breadcrumb logger that accepts instrumentations from ActiveSupport
48
48
  # it's not activated by default, but you can enable it with
49
49
  config.breadcrumbs_logger = [:active_support_logger]
50
50
  end
@@ -3,18 +3,21 @@ module Sentry
3
3
  module ActiveJobExtensions
4
4
  ALREADY_SUPPORTED_SENTRY_ADAPTERS = %w(
5
5
  ActiveJob::QueueAdapters::SidekiqAdapter
6
- ActiveJob::QueueAdapters::DelayedJobAdapter
7
6
  ).freeze
8
7
 
9
8
  def self.included(base)
10
9
  base.class_eval do
11
10
  around_perform do |job, block|
12
- if already_supported_by_specific_integration?(job)
13
- block.call
14
- else
15
- Sentry.with_scope do
16
- capture_and_reraise_with_sentry(job, block)
11
+ if Sentry.initialized?
12
+ if already_supported_by_specific_integration?(job)
13
+ block.call
14
+ else
15
+ Sentry.with_scope do
16
+ capture_and_reraise_with_sentry(job, block)
17
+ end
17
18
  end
19
+ else
20
+ block.call
18
21
  end
19
22
  end
20
23
  end
@@ -3,7 +3,18 @@ module Sentry
3
3
  module Breadcrumb
4
4
  module ActiveSupportLogger
5
5
  class << self
6
+ IGNORED_DATA_TYPES = [:request, :headers, :exception, :exception_object]
7
+
6
8
  def add(name, started, _finished, _unique_id, data)
9
+ # skip Rails' internal events
10
+ return if name.start_with?("!")
11
+
12
+ if data.is_a?(Hash)
13
+ # we should only mutate the copy of the data
14
+ data = data.dup
15
+ cleanup_data(data)
16
+ end
17
+
7
18
  crumb = Sentry::Breadcrumb.new(
8
19
  data: data,
9
20
  category: name,
@@ -12,6 +23,12 @@ module Sentry
12
23
  Sentry.add_breadcrumb(crumb)
13
24
  end
14
25
 
26
+ def cleanup_data(data)
27
+ IGNORED_DATA_TYPES.each do |key|
28
+ data.delete(key) if data.key?(key)
29
+ end
30
+ end
31
+
15
32
  def inject
16
33
  @subscriber = ::ActiveSupport::Notifications.subscribe(/.*/) do |name, started, finished, unique_id, data|
17
34
  # we only record events that has a started timestamp
@@ -1,6 +1,14 @@
1
1
  module Sentry
2
2
  module Rails
3
3
  class CaptureExceptions < Sentry::Rack::CaptureExceptions
4
+ def initialize(app)
5
+ super
6
+
7
+ if defined?(::Sprockets::Rails)
8
+ @assets_regex = %r(\A/{0,2}#{::Rails.application.config.assets.prefix})
9
+ end
10
+ end
11
+
4
12
  private
5
13
 
6
14
  def collect_exception(env)
@@ -12,8 +20,21 @@ module Sentry
12
20
  end
13
21
 
14
22
  def capture_exception(exception)
23
+ current_scope = Sentry.get_current_scope
24
+
25
+ if original_transaction = current_scope.rack_env["sentry.original_transaction"]
26
+ current_scope.set_transaction_name(original_transaction)
27
+ end
28
+
15
29
  Sentry::Rails.capture_exception(exception)
16
30
  end
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
36
+ end
37
+ end
17
38
  end
18
39
  end
19
40
  end
@@ -20,6 +20,7 @@ module Sentry
20
20
  'ActionController::RoutingError',
21
21
  'ActionController::UnknownAction',
22
22
  'ActionController::UnknownFormat',
23
+ 'ActionDispatch::Http::MimeNegotiation::InvalidType',
23
24
  'ActionController::UnknownHttpMethod',
24
25
  'ActionDispatch::Http::Parameters::ParseError',
25
26
  'ActiveJob::DeserializationError', # Can cause infinite loops
@@ -0,0 +1,16 @@
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
@@ -4,8 +4,8 @@ require "sentry/rails/rescued_exception_interceptor"
4
4
  require "sentry/rails/backtrace_cleaner"
5
5
  require "sentry/rails/controller_methods"
6
6
  require "sentry/rails/controller_transaction"
7
- require "sentry/rails/active_job"
8
7
  require "sentry/rails/overrides/streaming_reporter"
8
+ require "sentry/rails/overrides/file_handler"
9
9
 
10
10
  module Sentry
11
11
  class Railtie < ::Rails::Railtie
@@ -17,23 +17,30 @@ module Sentry
17
17
  app.config.middleware.use(Sentry::Rails::RescuedExceptionInterceptor)
18
18
  end
19
19
 
20
- config.after_initialize do
20
+ config.after_initialize do |app|
21
21
  next unless Sentry.initialized?
22
22
 
23
+ configure_project_root
23
24
  configure_sentry_logger
24
25
  extend_controller_methods
25
- extend_active_job
26
+ extend_active_job if defined?(ActiveJob)
26
27
  override_streaming_reporter
28
+ override_file_handler if app.config.public_file_server.enabled
27
29
  setup_backtrace_cleanup_callback
28
30
  inject_breadcrumbs_logger
29
31
  activate_tracing
30
32
  end
31
33
 
34
+ def configure_project_root
35
+ Sentry.configuration.project_root = ::Rails.root.to_s
36
+ end
37
+
32
38
  def configure_sentry_logger
33
39
  Sentry.configuration.logger = ::Rails.logger
34
40
  end
35
41
 
36
42
  def extend_active_job
43
+ require "sentry/rails/active_job"
37
44
  ActiveJob::Base.send(:prepend, Sentry::Rails::ActiveJobExtensions)
38
45
  end
39
46
 
@@ -66,6 +73,12 @@ module Sentry
66
73
  end
67
74
  end
68
75
 
76
+ def override_file_handler
77
+ ActiveSupport.on_load :action_controller do
78
+ ActionDispatch::FileHandler.send(:prepend, Sentry::Rails::Overrides::FileHandler)
79
+ end
80
+ end
81
+
69
82
  def activate_tracing
70
83
  if Sentry.configuration.tracing_enabled?
71
84
  Sentry::Rails::Tracing.subscribe_tracing_events
@@ -6,9 +6,22 @@ module Sentry
6
6
  end
7
7
 
8
8
  def call(env)
9
+ return @app.call(env) unless Sentry.initialized?
10
+
9
11
  begin
10
12
  @app.call(env)
11
13
  rescue => e
14
+ request = ActionDispatch::Request.new(env)
15
+
16
+ # Rails' ShowExceptions#render_exception will mutate env for the exceptions app
17
+ # so we need to hold a copy of env to report the accurate data (like request's url)
18
+ if request.show_exceptions?
19
+ scope = Sentry.get_current_scope
20
+ copied_env = scope.rack_env.dup
21
+ copied_env["sentry.original_transaction"] = scope.transaction_name
22
+ scope.set_rack_env(copied_env)
23
+ end
24
+
12
25
  env["sentry.rescued_exception"] = e if Sentry.configuration.rails.report_rescued_exceptions
13
26
  raise e
14
27
  end
@@ -14,11 +14,11 @@ module Sentry
14
14
 
15
15
  def subscribe_to_event(event_name)
16
16
  if ::Rails.version.to_i == 5
17
- ActiveSupport::Notifications.subscribe(event_name) do |_, start, finish, _, payload|
17
+ ActiveSupport::Notifications.subscribe(event_name) do |*args|
18
18
  next unless Tracing.get_current_transaction
19
19
 
20
- duration = finish.to_f - start.to_f
21
- yield(event_name, duration, payload)
20
+ event = ActiveSupport::Notifications::Event.new(*args)
21
+ yield(event_name, event.duration, event.payload)
22
22
  end
23
23
  else
24
24
  ActiveSupport::Notifications.subscribe(event_name) do |event|
@@ -15,6 +15,9 @@ module Sentry
15
15
  description: "#{controller}##{action}",
16
16
  duration: duration
17
17
  ) do |span|
18
+ payload = payload.dup
19
+ payload.delete(:headers)
20
+ payload.delete(:request)
18
21
  span.set_data(:payload, payload)
19
22
  span.set_http_status(payload[:status])
20
23
  end
@@ -2,19 +2,11 @@ module Sentry
2
2
  module Rails
3
3
  module Tracing
4
4
  class ActionViewSubscriber < AbstractSubscriber
5
- EVENT_NAMES = ["render_template.action_view", "render_partial.action_view", "render_collection.action_view"]
5
+ EVENT_NAME = "render_template.action_view".freeze
6
6
 
7
7
  def self.subscribe!
8
- EVENT_NAMES.each do |event_name|
9
- subscribe_to_event(event_name) do |event_name, duration, payload|
10
- record_on_current_span(op: event_name, start_timestamp: payload[:start_timestamp], description: payload[:identifier], duration: duration)
11
- end
12
- end
13
- end
14
-
15
- def self.unsubscribe!
16
- EVENT_NAMES.each do |event_name|
17
- ActiveSupport::Notifications.unsubscribe(event_name)
8
+ subscribe_to_event(EVENT_NAME) do |event_name, duration, payload|
9
+ record_on_current_span(op: event_name, start_timestamp: payload[:start_timestamp], description: payload[:identifier], duration: duration)
18
10
  end
19
11
  end
20
12
  end
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Rails
3
- VERSION = "4.1.2"
3
+ VERSION = "4.1.7"
4
4
  end
5
5
  end
@@ -16,12 +16,12 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
19
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/sentry-rails/CHANGELOG.md"
20
20
 
21
21
  spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_dependency "rails", ">= 5.0"
26
- spec.add_dependency "sentry-ruby", "~> 4.1.2"
26
+ spec.add_dependency "sentry-ruby-core", "~> 4.1.2"
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.2
4
+ version: 4.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-30 00:00:00.000000000 Z
11
+ date: 2021-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sentry-ruby
28
+ name: sentry-ruby-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
@@ -49,11 +49,11 @@ files:
49
49
  - ".craft.yml"
50
50
  - ".gitignore"
51
51
  - ".rspec"
52
- - ".travis.yml"
53
52
  - CHANGELOG.md
54
53
  - CODE_OF_CONDUCT.md
55
54
  - Gemfile
56
55
  - LICENSE.txt
56
+ - Makefile
57
57
  - README.md
58
58
  - Rakefile
59
59
  - bin/console
@@ -67,6 +67,7 @@ files:
67
67
  - lib/sentry/rails/configuration.rb
68
68
  - lib/sentry/rails/controller_methods.rb
69
69
  - lib/sentry/rails/controller_transaction.rb
70
+ - lib/sentry/rails/overrides/file_handler.rb
70
71
  - lib/sentry/rails/overrides/streaming_reporter.rb
71
72
  - lib/sentry/rails/railtie.rb
72
73
  - lib/sentry/rails/rescued_exception_interceptor.rb
@@ -83,7 +84,7 @@ licenses:
83
84
  metadata:
84
85
  homepage_uri: https://github.com/getsentry/sentry-ruby
85
86
  source_code_uri: https://github.com/getsentry/sentry-ruby
86
- changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md
87
+ changelog_uri: https://github.com/getsentry/sentry-ruby/blob/master/sentry-rails/CHANGELOG.md
87
88
  post_install_message:
88
89
  rdoc_options: []
89
90
  require_paths:
@@ -1,6 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.6.5
6
- before_install: gem install bundler -v 2.1.1