sentry-rails 4.1.2 → 4.1.7
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 +4 -4
- data/CHANGELOG.md +32 -0
- data/Gemfile +1 -0
- data/Makefile +3 -0
- data/README.md +1 -1
- data/lib/sentry/rails/active_job.rb +9 -6
- data/lib/sentry/rails/breadcrumb/active_support_logger.rb +17 -0
- data/lib/sentry/rails/capture_exceptions.rb +21 -0
- data/lib/sentry/rails/configuration.rb +1 -0
- data/lib/sentry/rails/overrides/file_handler.rb +16 -0
- data/lib/sentry/rails/railtie.rb +16 -3
- data/lib/sentry/rails/rescued_exception_interceptor.rb +13 -0
- data/lib/sentry/rails/tracing/abstract_subscriber.rb +3 -3
- data/lib/sentry/rails/tracing/action_controller_subscriber.rb +3 -0
- data/lib/sentry/rails/tracing/action_view_subscriber.rb +3 -11
- data/lib/sentry/rails/version.rb +1 -1
- data/sentry-rails.gemspec +2 -2
- metadata +6 -5
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e101fa2f42e1bf68db025a8c02a391ee510cfb43d286c63156397efcbcc1f6a
|
4
|
+
data.tar.gz: 8673fc2ff559d18b09c41b05e373116feb1ae7b04cbe4de5f99637afaf05c8da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 156a36ae19a647b1b17e4278108296356339363f659d714b24dfcc095c14d59ae01ef85bc08c0c1a3331e401522bd7130214432a2a931f40fdeedff0ef6a0bcb
|
7
|
+
data.tar.gz: 897b9c2f0d82266b2725cbbd30bd8478fda5e1c3dae80927e6e3f73917d8ab417066c1be545b552a39d1ed6560f5ca8c16e0247cbf3199d3cabe110f41cd175c
|
data/CHANGELOG.md
CHANGED
@@ -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
data/Makefile
ADDED
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
|
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
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
data/lib/sentry/rails/railtie.rb
CHANGED
@@ -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 |
|
17
|
+
ActiveSupport::Notifications.subscribe(event_name) do |*args|
|
18
18
|
next unless Tracing.get_current_transaction
|
19
19
|
|
20
|
-
|
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
|
-
|
5
|
+
EVENT_NAME = "render_template.action_view".freeze
|
6
6
|
|
7
7
|
def self.subscribe!
|
8
|
-
|
9
|
-
|
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
|
data/lib/sentry/rails/version.rb
CHANGED
data/sentry-rails.gemspec
CHANGED
@@ -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.
|
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:
|
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:
|