sentry-rails 4.9.2 → 5.1.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 +4 -4
- data/Gemfile +1 -1
- data/lib/sentry/rails/active_job.rb +15 -2
- data/lib/sentry/rails/error_subscriber.rb +20 -0
- data/lib/sentry/rails/railtie.rb +7 -0
- data/lib/sentry/rails/tracing/action_view_subscriber.rb +2 -1
- data/lib/sentry/rails/tracing/active_record_subscriber.rb +2 -1
- data/lib/sentry/rails/version.rb +1 -1
- data/sentry-rails.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f45143dd79cff19a0e7338912f235cec728d9ceb81a37e7a50df78a1722ce1b8
|
4
|
+
data.tar.gz: 7b5a8dec4f9b6875f6f42794911d30e7a75e0a8662e7d5e83584726066eb3fd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dbdd5331da560f4bc67a84390bb1f3579fbe7e03da95758cc2e3b103540f407bb2efb153202070f57dc4e2e1b5044dd9dca7e237272460560531d160890211c
|
7
|
+
data.tar.gz: 1163c26220a308aca6fe3f624e4358446f82d1919eda4daf0c38729f1977eba08b53c4f8bb65543adfc1df7a129ca4098af35060acb3d921d8ddf58025176633
|
data/Gemfile
CHANGED
@@ -5,7 +5,7 @@ gemspec
|
|
5
5
|
gem "sentry-ruby", path: "../sentry-ruby"
|
6
6
|
|
7
7
|
rails_version = ENV["RAILS_VERSION"]
|
8
|
-
rails_version = "
|
8
|
+
rails_version = "7.0.0" if rails_version.nil?
|
9
9
|
rails_version = Gem::Version.new(rails_version)
|
10
10
|
|
11
11
|
gem 'activerecord-jdbcmysql-adapter', platform: :jruby
|
@@ -37,7 +37,7 @@ module Sentry
|
|
37
37
|
extra: sentry_context,
|
38
38
|
tags: {
|
39
39
|
job_id: job_id,
|
40
|
-
provider_job_id:provider_job_id
|
40
|
+
provider_job_id: provider_job_id
|
41
41
|
}
|
42
42
|
)
|
43
43
|
raise e
|
@@ -57,13 +57,26 @@ module Sentry
|
|
57
57
|
def sentry_context
|
58
58
|
{
|
59
59
|
active_job: self.class.name,
|
60
|
-
arguments: arguments,
|
60
|
+
arguments: sentry_serialize_arguments(arguments),
|
61
61
|
scheduled_at: scheduled_at,
|
62
62
|
job_id: job_id,
|
63
63
|
provider_job_id: provider_job_id,
|
64
64
|
locale: locale
|
65
65
|
}
|
66
66
|
end
|
67
|
+
|
68
|
+
def sentry_serialize_arguments(argument)
|
69
|
+
case argument
|
70
|
+
when Hash
|
71
|
+
argument.transform_values { |v| sentry_serialize_arguments(v) }
|
72
|
+
when Array, Enumerable
|
73
|
+
argument.map { |v| sentry_serialize_arguments(v) }
|
74
|
+
when ->(v) { v.respond_to?(:to_global_id) }
|
75
|
+
argument.to_global_id.to_s rescue argument
|
76
|
+
else
|
77
|
+
argument
|
78
|
+
end
|
79
|
+
end
|
67
80
|
end
|
68
81
|
end
|
69
82
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Sentry
|
2
|
+
module Rails
|
3
|
+
# This is not a user-facing class. You should use it with Rails 7.0's error reporter feature and its interfaces.
|
4
|
+
# See https://github.com/rails/rails/blob/main/activesupport/lib/active_support/error_reporter.rb for more information.
|
5
|
+
class ErrorSubscriber
|
6
|
+
def report(error, handled:, severity:, context:)
|
7
|
+
# a component may already have an integration to capture exceptions while its operation is also wrapped inside an `app.executor.wrap` (e.g. ActionCable)
|
8
|
+
# in such condition, the exception would be captured repeatedly. it usually happens in this order:
|
9
|
+
#
|
10
|
+
# 1. exception captured and reported by the component integration and re-raised
|
11
|
+
# 2. exception captured by the executor, which then reports it with executor.error_reporter
|
12
|
+
#
|
13
|
+
# and because there's no direct communication between the 2 callbacks, we need a way to identify if an exception has been captured before
|
14
|
+
# using a Sentry-specific intance variable should be the last impactful way
|
15
|
+
return if error.instance_variable_get(:@__sentry_captured)
|
16
|
+
Sentry::Rails.capture_exception(error, level: severity, contexts: { "rails.error" => context }, tags: { handled: handled })
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/sentry/rails/railtie.rb
CHANGED
@@ -46,6 +46,8 @@ module Sentry
|
|
46
46
|
setup_backtrace_cleanup_callback
|
47
47
|
inject_breadcrumbs_logger
|
48
48
|
activate_tracing
|
49
|
+
|
50
|
+
register_error_subscriber(app) if ::Rails.version.to_f >= 7.0
|
49
51
|
end
|
50
52
|
|
51
53
|
runner do
|
@@ -115,5 +117,10 @@ module Sentry
|
|
115
117
|
Sentry::Rails::Tracing.patch_active_support_notifications
|
116
118
|
end
|
117
119
|
end
|
120
|
+
|
121
|
+
def register_error_subscriber(app)
|
122
|
+
require "sentry/rails/error_subscriber"
|
123
|
+
app.executor.error_reporter.subscribe(Sentry::Rails::ErrorSubscriber.new)
|
124
|
+
end
|
118
125
|
end
|
119
126
|
end
|
@@ -5,10 +5,11 @@ module Sentry
|
|
5
5
|
module Tracing
|
6
6
|
class ActionViewSubscriber < AbstractSubscriber
|
7
7
|
EVENT_NAMES = ["render_template.action_view"].freeze
|
8
|
+
SPAN_PREFIX = "template.".freeze
|
8
9
|
|
9
10
|
def self.subscribe!
|
10
11
|
subscribe_to_event(EVENT_NAMES) do |event_name, duration, payload|
|
11
|
-
record_on_current_span(op: event_name, start_timestamp: payload[START_TIMESTAMP_NAME], description: payload[:identifier], duration: duration)
|
12
|
+
record_on_current_span(op: SPAN_PREFIX + event_name, start_timestamp: payload[START_TIMESTAMP_NAME], description: payload[:identifier], duration: duration)
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -5,13 +5,14 @@ module Sentry
|
|
5
5
|
module Tracing
|
6
6
|
class ActiveRecordSubscriber < AbstractSubscriber
|
7
7
|
EVENT_NAMES = ["sql.active_record"].freeze
|
8
|
+
SPAN_PREFIX = "db.".freeze
|
8
9
|
EXCLUDED_EVENTS = ["SCHEMA", "TRANSACTION"].freeze
|
9
10
|
|
10
11
|
def self.subscribe!
|
11
12
|
subscribe_to_event(EVENT_NAMES) do |event_name, duration, payload|
|
12
13
|
next if EXCLUDED_EVENTS.include? payload[:name]
|
13
14
|
|
14
|
-
record_on_current_span(op: event_name, start_timestamp: payload[START_TIMESTAMP_NAME], description: payload[:sql], duration: duration) do |span|
|
15
|
+
record_on_current_span(op: SPAN_PREFIX + event_name, start_timestamp: payload[START_TIMESTAMP_NAME], description: payload[:sql], duration: duration) do |span|
|
15
16
|
span.set_data(:connection_id, payload[:connection_id])
|
16
17
|
end
|
17
18
|
end
|
data/lib/sentry/rails/version.rb
CHANGED
data/sentry-rails.gemspec
CHANGED
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
|
+
version: 5.1.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: 2022-
|
11
|
+
date: 2022-02-10 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:
|
33
|
+
version: 5.1.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:
|
40
|
+
version: 5.1.0
|
41
41
|
description: A gem that provides Rails integration for the Sentry error logger
|
42
42
|
email: accounts@sentry.io
|
43
43
|
executables: []
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/sentry/rails/controller_methods.rb
|
72
72
|
- lib/sentry/rails/controller_transaction.rb
|
73
73
|
- lib/sentry/rails/engine.rb
|
74
|
+
- lib/sentry/rails/error_subscriber.rb
|
74
75
|
- lib/sentry/rails/instrument_payload_cleanup_helper.rb
|
75
76
|
- lib/sentry/rails/overrides/streaming_reporter.rb
|
76
77
|
- lib/sentry/rails/railtie.rb
|