sentry-ruby-core 5.0.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 -0
- data/lib/sentry/configuration.rb +1 -0
- data/lib/sentry/hub.rb +4 -1
- data/lib/sentry/interfaces/request.rb +3 -2
- data/lib/sentry/net/http.rb +3 -2
- data/lib/sentry/redis.rb +88 -0
- data/lib/sentry/transaction.rb +4 -5
- data/lib/sentry/version.rb +1 -1
- data/lib/sentry-ruby.rb +49 -12
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8b9d0c43497ccc151613d208b6e9a51489586a41cbb7849cbcfcd3e5795765f
|
4
|
+
data.tar.gz: 79e7e9f621b2fe8bfc1c1dc292a16392e499925c13bdc1c31c3f8e05240f42e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3def5710a658f0365dbe11292f548aafcaf6d467d04abd5e0973035c5c3243307d49347b829ae0aa93d459c2bf4036813ec2a4589471c8da21d438318144c0aa
|
7
|
+
data.tar.gz: 99eab89037a4e468c7bb257d33aaf85ec8830102aa233a9af4c5091c92d67726f4ffab47b3eeedba07f079b4b3600145458e9283274532b534824acd21236617
|
data/Gemfile
CHANGED
data/lib/sentry/configuration.rb
CHANGED
data/lib/sentry/hub.rb
CHANGED
@@ -102,7 +102,10 @@ module Sentry
|
|
102
102
|
|
103
103
|
return unless event
|
104
104
|
|
105
|
-
capture_event(event, **options, &block)
|
105
|
+
capture_event(event, **options, &block).tap do
|
106
|
+
# mark the exception as captured so we can use this information to avoid duplicated capturing
|
107
|
+
exception.instance_variable_set(:@__sentry_captured, true)
|
108
|
+
end
|
106
109
|
end
|
107
110
|
|
108
111
|
def capture_message(message, **options, &block)
|
@@ -62,7 +62,7 @@ module Sentry
|
|
62
62
|
self.url = request.scheme && request.url.split('?').first
|
63
63
|
self.method = request.request_method
|
64
64
|
|
65
|
-
self.headers = filter_and_format_headers(env)
|
65
|
+
self.headers = filter_and_format_headers(env, send_default_pii)
|
66
66
|
self.env = filter_and_format_env(env, rack_env_whitelist)
|
67
67
|
end
|
68
68
|
|
@@ -81,13 +81,14 @@ module Sentry
|
|
81
81
|
e.message
|
82
82
|
end
|
83
83
|
|
84
|
-
def filter_and_format_headers(env)
|
84
|
+
def filter_and_format_headers(env, send_default_pii)
|
85
85
|
env.each_with_object({}) do |(key, value), memo|
|
86
86
|
begin
|
87
87
|
key = key.to_s # rack env can contain symbols
|
88
88
|
next memo['X-Request-Id'] ||= Utils::RequestId.read_from(env) if Utils::RequestId::REQUEST_ID_HEADERS.include?(key)
|
89
89
|
next if is_server_protocol?(key, value, env["SERVER_PROTOCOL"])
|
90
90
|
next if is_skippable_header?(key)
|
91
|
+
next if key == "HTTP_AUTHORIZATION" && !send_default_pii
|
91
92
|
|
92
93
|
# Rack stores headers as HTTP_WHAT_EVER, we need What-Ever
|
93
94
|
key = key.sub(/^HTTP_/, "")
|
data/lib/sentry/net/http.rb
CHANGED
@@ -6,7 +6,8 @@ module Sentry
|
|
6
6
|
# @api private
|
7
7
|
module Net
|
8
8
|
module HTTP
|
9
|
-
OP_NAME = "
|
9
|
+
OP_NAME = "http.client"
|
10
|
+
BREADCRUMB_CATEGORY = "net.http"
|
10
11
|
|
11
12
|
# To explain how the entire thing works, we need to know how the original Net::HTTP#request works
|
12
13
|
# Here's part of its definition. As you can see, it usually calls itself inside a #start block
|
@@ -53,7 +54,7 @@ module Sentry
|
|
53
54
|
|
54
55
|
crumb = Sentry::Breadcrumb.new(
|
55
56
|
level: :info,
|
56
|
-
category:
|
57
|
+
category: BREADCRUMB_CATEGORY,
|
57
58
|
type: :info,
|
58
59
|
data: {
|
59
60
|
status: res.code.to_i,
|
data/lib/sentry/redis.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sentry
|
4
|
+
# @api private
|
5
|
+
class Redis
|
6
|
+
OP_NAME ||= "db.redis.command"
|
7
|
+
LOGGER_NAME ||= :redis_logger
|
8
|
+
|
9
|
+
def initialize(commands, host, port, db)
|
10
|
+
@commands, @host, @port, @db = commands, host, port, db
|
11
|
+
end
|
12
|
+
|
13
|
+
def instrument
|
14
|
+
return yield unless Sentry.initialized?
|
15
|
+
|
16
|
+
record_span do
|
17
|
+
yield.tap do
|
18
|
+
record_breadcrumb
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :commands, :host, :port, :db
|
26
|
+
|
27
|
+
def record_span
|
28
|
+
return yield unless (transaction = Sentry.get_current_scope.get_transaction) && transaction.sampled
|
29
|
+
|
30
|
+
sentry_span = transaction.start_child(op: OP_NAME, start_timestamp: Sentry.utc_now.to_f)
|
31
|
+
|
32
|
+
yield.tap do
|
33
|
+
sentry_span.set_description(commands_description)
|
34
|
+
sentry_span.set_data(:server, server_description)
|
35
|
+
sentry_span.set_timestamp(Sentry.utc_now.to_f)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def record_breadcrumb
|
40
|
+
return unless Sentry.configuration.breadcrumbs_logger.include?(LOGGER_NAME)
|
41
|
+
|
42
|
+
Sentry.add_breadcrumb(
|
43
|
+
Sentry::Breadcrumb.new(
|
44
|
+
level: :info,
|
45
|
+
category: OP_NAME,
|
46
|
+
type: :info,
|
47
|
+
data: {
|
48
|
+
commands: parsed_commands,
|
49
|
+
server: server_description
|
50
|
+
}
|
51
|
+
)
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def commands_description
|
56
|
+
parsed_commands.map do |statement|
|
57
|
+
statement.values.join(" ").strip
|
58
|
+
end.join(", ")
|
59
|
+
end
|
60
|
+
|
61
|
+
def parsed_commands
|
62
|
+
commands.map do |statement|
|
63
|
+
command, key, *_values = statement
|
64
|
+
|
65
|
+
{ command: command.to_s.upcase, key: key }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def server_description
|
70
|
+
"#{host}:#{port}/#{db}"
|
71
|
+
end
|
72
|
+
|
73
|
+
module Client
|
74
|
+
def logging(commands, &block)
|
75
|
+
Sentry::Redis.new(commands, host, port, db).instrument do
|
76
|
+
super
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
if defined?(::Redis::Client)
|
84
|
+
Sentry.register_patch do
|
85
|
+
patch = Sentry::Redis::Client
|
86
|
+
Redis::Client.prepend(patch) unless Redis::Client.ancestors.include?(patch)
|
87
|
+
end
|
88
|
+
end
|
data/lib/sentry/transaction.rb
CHANGED
@@ -164,13 +164,12 @@ module Sentry
|
|
164
164
|
@name = UNLABELD_NAME
|
165
165
|
end
|
166
166
|
|
167
|
-
|
167
|
+
if @sampled
|
168
|
+
event = hub.current_client.event_from_transaction(self)
|
169
|
+
hub.capture_event(event)
|
170
|
+
else
|
168
171
|
hub.current_client.transport.record_lost_event(:sample_rate, 'transaction')
|
169
|
-
return
|
170
172
|
end
|
171
|
-
|
172
|
-
event = hub.current_client.event_from_transaction(self)
|
173
|
-
hub.capture_event(event)
|
174
173
|
end
|
175
174
|
|
176
175
|
protected
|
data/lib/sentry/version.rb
CHANGED
data/lib/sentry-ruby.rb
CHANGED
@@ -111,9 +111,17 @@ module Sentry
|
|
111
111
|
|
112
112
|
# @!method configuration
|
113
113
|
# @!macro configuration
|
114
|
+
def configuration
|
115
|
+
return unless initialized?
|
116
|
+
get_current_client.configuration
|
117
|
+
end
|
118
|
+
|
114
119
|
# @!method send_event
|
115
120
|
# @!macro send_event
|
116
|
-
|
121
|
+
def send_event(*args)
|
122
|
+
return unless initialized?
|
123
|
+
get_current_client.send_event(*args)
|
124
|
+
end
|
117
125
|
|
118
126
|
# @!macro [new] set_extras
|
119
127
|
# Updates the scope's extras attribute by merging with the old value.
|
@@ -135,13 +143,31 @@ module Sentry
|
|
135
143
|
|
136
144
|
# @!method set_tags
|
137
145
|
# @!macro set_tags
|
146
|
+
def set_tags(*args)
|
147
|
+
return unless initialized?
|
148
|
+
get_current_scope.set_tags(*args)
|
149
|
+
end
|
150
|
+
|
138
151
|
# @!method set_extras
|
139
152
|
# @!macro set_extras
|
153
|
+
def set_extras(*args)
|
154
|
+
return unless initialized?
|
155
|
+
get_current_scope.set_extras(*args)
|
156
|
+
end
|
157
|
+
|
140
158
|
# @!method set_user
|
141
159
|
# @!macro set_user
|
160
|
+
def set_user(*args)
|
161
|
+
return unless initialized?
|
162
|
+
get_current_scope.set_user(*args)
|
163
|
+
end
|
164
|
+
|
142
165
|
# @!method set_context
|
143
166
|
# @!macro set_context
|
144
|
-
|
167
|
+
def set_context(*args)
|
168
|
+
return unless initialized?
|
169
|
+
get_current_scope.set_context(*args)
|
170
|
+
end
|
145
171
|
|
146
172
|
##### Main APIs #####
|
147
173
|
|
@@ -201,7 +227,8 @@ module Sentry
|
|
201
227
|
#
|
202
228
|
# @return [Breadcrumb, nil]
|
203
229
|
def add_breadcrumb(breadcrumb, **options)
|
204
|
-
|
230
|
+
return unless initialized?
|
231
|
+
get_current_hub.add_breadcrumb(breadcrumb, **options)
|
205
232
|
end
|
206
233
|
|
207
234
|
# Returns the current active hub.
|
@@ -221,14 +248,16 @@ module Sentry
|
|
221
248
|
# Returns the current active client.
|
222
249
|
# @return [Client, nil]
|
223
250
|
def get_current_client
|
224
|
-
|
251
|
+
return unless initialized?
|
252
|
+
get_current_hub.current_client
|
225
253
|
end
|
226
254
|
|
227
255
|
# Returns the current active scope.
|
228
256
|
#
|
229
257
|
# @return [Scope, nil]
|
230
258
|
def get_current_scope
|
231
|
-
|
259
|
+
return unless initialized?
|
260
|
+
get_current_hub.current_scope
|
232
261
|
end
|
233
262
|
|
234
263
|
# Clones the main thread's active hub and stores it to the current thread.
|
@@ -250,7 +279,8 @@ module Sentry
|
|
250
279
|
# @yieldparam scope [Scope]
|
251
280
|
# @return [void]
|
252
281
|
def configure_scope(&block)
|
253
|
-
|
282
|
+
return unless initialized?
|
283
|
+
get_current_hub.configure_scope(&block)
|
254
284
|
end
|
255
285
|
|
256
286
|
# Takes a block and yields a temporary scope.
|
@@ -274,7 +304,8 @@ module Sentry
|
|
274
304
|
# @yieldparam scope [Scope]
|
275
305
|
# @return [void]
|
276
306
|
def with_scope(&block)
|
277
|
-
|
307
|
+
return unless initialized?
|
308
|
+
get_current_hub.with_scope(&block)
|
278
309
|
end
|
279
310
|
|
280
311
|
# Takes an exception and reports it to Sentry via the currently active hub.
|
@@ -282,7 +313,8 @@ module Sentry
|
|
282
313
|
# @yieldparam scope [Scope]
|
283
314
|
# @return [Event, nil]
|
284
315
|
def capture_exception(exception, **options, &block)
|
285
|
-
|
316
|
+
return unless initialized?
|
317
|
+
get_current_hub.capture_exception(exception, **options, &block)
|
286
318
|
end
|
287
319
|
|
288
320
|
# Takes a message string and reports it to Sentry via the currently active hub.
|
@@ -290,28 +322,32 @@ module Sentry
|
|
290
322
|
# @yieldparam scope [Scope]
|
291
323
|
# @return [Event, nil]
|
292
324
|
def capture_message(message, **options, &block)
|
293
|
-
|
325
|
+
return unless initialized?
|
326
|
+
get_current_hub.capture_message(message, **options, &block)
|
294
327
|
end
|
295
328
|
|
296
329
|
# Takes an instance of Sentry::Event and dispatches it to the currently active hub.
|
297
330
|
#
|
298
331
|
# @return [Event, nil]
|
299
332
|
def capture_event(event)
|
300
|
-
|
333
|
+
return unless initialized?
|
334
|
+
get_current_hub.capture_event(event)
|
301
335
|
end
|
302
336
|
|
303
337
|
# Takes or initializes a new Sentry::Transaction and makes a sampling decision for it.
|
304
338
|
#
|
305
339
|
# @return [Transaction, nil]
|
306
340
|
def start_transaction(**options)
|
307
|
-
|
341
|
+
return unless initialized?
|
342
|
+
get_current_hub.start_transaction(**options)
|
308
343
|
end
|
309
344
|
|
310
345
|
# Returns the id of the lastly reported Sentry::Event.
|
311
346
|
#
|
312
347
|
# @return [String, nil]
|
313
348
|
def last_event_id
|
314
|
-
|
349
|
+
return unless initialized?
|
350
|
+
get_current_hub.last_event_id
|
315
351
|
end
|
316
352
|
|
317
353
|
|
@@ -344,3 +380,4 @@ end
|
|
344
380
|
|
345
381
|
# patches
|
346
382
|
require "sentry/net/http"
|
383
|
+
require "sentry/redis"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sentry-ruby-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0
|
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: concurrent-ruby
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- lib/sentry/rack.rb
|
74
74
|
- lib/sentry/rack/capture_exceptions.rb
|
75
75
|
- lib/sentry/rake.rb
|
76
|
+
- lib/sentry/redis.rb
|
76
77
|
- lib/sentry/release_detector.rb
|
77
78
|
- lib/sentry/scope.rb
|
78
79
|
- lib/sentry/span.rb
|