sentry-ruby 7.0.0 → 7.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/gemfiles/ruby-2.7_rack-2_redis-4.gemfile.lock +6 -6
- data/gemfiles/ruby-2.7_rack-3.1_redis-4.gemfile.lock +6 -6
- data/gemfiles/ruby-2.7_rack-3_redis-4.gemfile.lock +6 -6
- data/gemfiles/ruby-3.0_rack-2_redis-4.gemfile.lock +8 -8
- data/gemfiles/ruby-3.0_rack-3.1_redis-4.gemfile.lock +8 -8
- data/gemfiles/ruby-3.0_rack-3_redis-4.gemfile.lock +8 -8
- data/gemfiles/ruby-3.1_rack-2_redis-4.gemfile.lock +16 -16
- data/gemfiles/ruby-3.1_rack-3.1_redis-4.gemfile.lock +16 -16
- data/gemfiles/ruby-3.1_rack-3_redis-4.gemfile.lock +16 -16
- data/gemfiles/ruby-3.2_rack-0_redis-5.gemfile.lock +16 -16
- data/gemfiles/ruby-3.2_rack-2_redis-4.gemfile.lock +16 -16
- data/gemfiles/ruby-3.2_rack-2_redis-5.gemfile.lock +16 -16
- data/gemfiles/ruby-3.2_rack-3.1_redis-4.gemfile.lock +16 -16
- data/gemfiles/ruby-3.2_rack-3_redis-4.gemfile.lock +16 -16
- data/gemfiles/ruby-3.2_rack-3_redis-5.gemfile.lock +16 -16
- data/gemfiles/ruby-3.3_rack-2_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-3.3_rack-3.1_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-3.3_rack-3.1_redis-5.3.gemfile.lock +18 -18
- data/gemfiles/ruby-3.3_rack-3_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-3.4_rack-2_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-3.4_rack-3.1_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-3.4_rack-3.1_redis-5.3.gemfile.lock +18 -18
- data/gemfiles/ruby-3.4_rack-3_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-4.0_rack-2_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-4.0_rack-3.1_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-4.0_rack-3_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-jruby-9.4.14.0_rack-2_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-jruby-9.4.14.0_rack-3.1_redis-4.gemfile.lock +18 -18
- data/gemfiles/ruby-jruby-9.4.14.0_rack-3_redis-4.gemfile.lock +18 -18
- data/lib/sentry/backtrace.rb +10 -1
- data/lib/sentry/client.rb +19 -6
- data/lib/sentry/configuration.rb +1 -1
- data/lib/sentry/faraday.rb +4 -1
- data/lib/sentry/hub.rb +9 -2
- data/lib/sentry/integrable.rb +12 -0
- data/lib/sentry/log_event_buffer.rb +1 -1
- data/lib/sentry/metric_event.rb +4 -2
- data/lib/sentry/metric_event_buffer.rb +1 -1
- data/lib/sentry/metrics.rb +12 -6
- data/lib/sentry/scope.rb +7 -3
- data/lib/sentry/session_flusher.rb +7 -0
- data/lib/sentry/std_lib_logger.rb +8 -2
- data/lib/sentry/telemetry_event_buffer.rb +57 -31
- data/lib/sentry/test_helper.rb +4 -0
- data/lib/sentry/threaded_periodic_worker.rb +90 -13
- data/lib/sentry/transaction.rb +7 -1
- data/lib/sentry/utils/callback_helper.rb +27 -0
- data/lib/sentry/version.rb +1 -1
- data/lib/sentry-ruby.rb +3 -0
- metadata +7 -6
|
@@ -4,41 +4,118 @@ module Sentry
|
|
|
4
4
|
class ThreadedPeriodicWorker
|
|
5
5
|
include LoggingHelper
|
|
6
6
|
|
|
7
|
+
# @!visibility private
|
|
8
|
+
attr_reader :thread, :thread_mutex, :idle_condition
|
|
9
|
+
|
|
7
10
|
def initialize(sdk_logger, interval)
|
|
11
|
+
@process_id = Process.pid
|
|
8
12
|
@thread = nil
|
|
9
13
|
@exited = false
|
|
10
14
|
@interval = interval
|
|
11
15
|
@sdk_logger = sdk_logger
|
|
16
|
+
|
|
17
|
+
@thread_mutex = Mutex.new
|
|
18
|
+
@wake_condition = ConditionVariable.new
|
|
19
|
+
@idle_condition = ConditionVariable.new
|
|
20
|
+
|
|
21
|
+
@woken = false
|
|
22
|
+
@running = false
|
|
12
23
|
end
|
|
13
24
|
|
|
14
25
|
def ensure_thread
|
|
15
|
-
|
|
16
|
-
return true if @thread&.alive?
|
|
26
|
+
reset_if_forked
|
|
17
27
|
|
|
18
|
-
@
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
run
|
|
22
|
-
end
|
|
23
|
-
end
|
|
28
|
+
@thread_mutex.synchronize do
|
|
29
|
+
return false if @exited
|
|
30
|
+
return true if @thread&.alive?
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
@thread = Thread.new { worker_loop }
|
|
33
|
+
|
|
34
|
+
true
|
|
35
|
+
end
|
|
26
36
|
rescue ThreadError
|
|
37
|
+
@thread_mutex.synchronize { @exited = true }
|
|
27
38
|
log_debug("[#{self.class.name}] thread creation failed")
|
|
28
|
-
@exited = true
|
|
29
39
|
false
|
|
30
40
|
end
|
|
31
41
|
|
|
42
|
+
def wake
|
|
43
|
+
@thread_mutex.synchronize do
|
|
44
|
+
next false if @exited
|
|
45
|
+
|
|
46
|
+
@woken = true
|
|
47
|
+
@wake_condition.signal
|
|
48
|
+
true
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def wait_until_idle(timeout = nil)
|
|
53
|
+
deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + timeout if timeout
|
|
54
|
+
|
|
55
|
+
@thread_mutex.synchronize do
|
|
56
|
+
while !@exited && (@running || @woken)
|
|
57
|
+
remaining = deadline - Process.clock_gettime(Process::CLOCK_MONOTONIC) if deadline
|
|
58
|
+
return false if remaining && remaining <= 0
|
|
59
|
+
|
|
60
|
+
@idle_condition.wait(@thread_mutex, remaining)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
true
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
32
67
|
def kill
|
|
33
|
-
|
|
68
|
+
thread = @thread_mutex.synchronize do
|
|
69
|
+
@exited = true
|
|
70
|
+
@woken = false
|
|
71
|
+
@idle_condition.broadcast
|
|
72
|
+
@thread
|
|
73
|
+
end
|
|
34
74
|
|
|
35
75
|
# Only a started worker has a thread to kill (and to log about).
|
|
36
76
|
# Guarding here keeps a never-started worker's teardown silent, so
|
|
37
77
|
# killing one during test reset can't emit a stray debug line.
|
|
38
|
-
return unless
|
|
78
|
+
return unless thread
|
|
39
79
|
|
|
40
80
|
log_debug("[#{self.class.name}] thread killed")
|
|
41
|
-
|
|
81
|
+
thread.kill
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
def reset_if_forked
|
|
87
|
+
return false if @process_id == Process.pid
|
|
88
|
+
|
|
89
|
+
@process_id = Process.pid
|
|
90
|
+
@thread = nil
|
|
91
|
+
@exited = false
|
|
92
|
+
@woken = false
|
|
93
|
+
@running = false
|
|
94
|
+
@thread_mutex = Mutex.new
|
|
95
|
+
@wake_condition = ConditionVariable.new
|
|
96
|
+
@idle_condition = ConditionVariable.new
|
|
97
|
+
true
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def worker_loop
|
|
101
|
+
loop do
|
|
102
|
+
@thread_mutex.synchronize do
|
|
103
|
+
@wake_condition.wait(@thread_mutex, @interval) unless @woken
|
|
104
|
+
@woken = false
|
|
105
|
+
@running = true
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
begin
|
|
109
|
+
run
|
|
110
|
+
rescue Exception => e
|
|
111
|
+
log_error("[#{self.class.name}] run failed", e)
|
|
112
|
+
ensure
|
|
113
|
+
@thread_mutex.synchronize do
|
|
114
|
+
@running = false
|
|
115
|
+
@idle_condition.broadcast
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
42
119
|
end
|
|
43
120
|
end
|
|
44
121
|
end
|
data/lib/sentry/transaction.rb
CHANGED
|
@@ -14,6 +14,7 @@ module Sentry
|
|
|
14
14
|
SOURCES = %i[custom url route view component task]
|
|
15
15
|
|
|
16
16
|
include LoggingHelper
|
|
17
|
+
include CallbackHelper
|
|
17
18
|
|
|
18
19
|
# The name of the transaction.
|
|
19
20
|
# @return [String]
|
|
@@ -142,7 +143,12 @@ module Sentry
|
|
|
142
143
|
|
|
143
144
|
sample_rate =
|
|
144
145
|
if configuration.traces_sampler.is_a?(Proc)
|
|
145
|
-
|
|
146
|
+
safe_dispatch_callback(
|
|
147
|
+
"traces_sampler",
|
|
148
|
+
configuration.traces_sampler,
|
|
149
|
+
[sampling_context],
|
|
150
|
+
fallback: configuration.traces_sample_rate
|
|
151
|
+
)
|
|
146
152
|
elsif !sampling_context[:parent_sampled].nil?
|
|
147
153
|
sampling_context[:parent_sampled]
|
|
148
154
|
else
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Sentry
|
|
4
|
+
# @private
|
|
5
|
+
module CallbackHelper
|
|
6
|
+
# @!visibility private
|
|
7
|
+
def safe_dispatch_callback(callback_name, callback, args, fallback: nil)
|
|
8
|
+
callback.call(*args)
|
|
9
|
+
rescue => e
|
|
10
|
+
log_callback_error(callback_name, e)
|
|
11
|
+
fallback
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def log_callback_error(callback_name, exception)
|
|
17
|
+
return unless Sentry.initialized?
|
|
18
|
+
|
|
19
|
+
message = "Error in #{callback_name} callback: #{exception.message}"
|
|
20
|
+
message += "\n#{exception.backtrace.join("\n")}" if Sentry.configuration.debug && exception.backtrace
|
|
21
|
+
|
|
22
|
+
Sentry.sdk_logger.error(LOGGER_PROGNAME) { message }
|
|
23
|
+
rescue StandardError
|
|
24
|
+
# Callback error reporting must not propagate to the application.
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/sentry/version.rb
CHANGED
data/lib/sentry-ruby.rb
CHANGED
|
@@ -10,6 +10,7 @@ require "sentry/core_ext/object/deep_dup"
|
|
|
10
10
|
require "sentry/utils/argument_checking_helper"
|
|
11
11
|
require "sentry/utils/encoding_helper"
|
|
12
12
|
require "sentry/utils/logging_helper"
|
|
13
|
+
require "sentry/utils/callback_helper"
|
|
13
14
|
require "sentry/utils/sample_rand"
|
|
14
15
|
require "sentry/configuration"
|
|
15
16
|
require "sentry/structured_logger"
|
|
@@ -300,6 +301,8 @@ module Sentry
|
|
|
300
301
|
if client = get_current_client
|
|
301
302
|
client.configuration.run_after_close_callbacks
|
|
302
303
|
client.flush
|
|
304
|
+
client.log_event_buffer.kill
|
|
305
|
+
client.metric_event_buffer.kill
|
|
303
306
|
|
|
304
307
|
if client.configuration.data_collection.collect_stack_frame_variables?
|
|
305
308
|
exception_locals_tp.disable
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sentry-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.
|
|
4
|
+
version: 7.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sentry Team
|
|
@@ -185,6 +185,7 @@ files:
|
|
|
185
185
|
- lib/sentry/transport/http_transport.rb
|
|
186
186
|
- lib/sentry/transport/spotlight_transport.rb
|
|
187
187
|
- lib/sentry/utils/argument_checking_helper.rb
|
|
188
|
+
- lib/sentry/utils/callback_helper.rb
|
|
188
189
|
- lib/sentry/utils/custom_inspection.rb
|
|
189
190
|
- lib/sentry/utils/encoding_helper.rb
|
|
190
191
|
- lib/sentry/utils/env_helper.rb
|
|
@@ -202,15 +203,15 @@ files:
|
|
|
202
203
|
- lib/sentry/version.rb
|
|
203
204
|
- sentry-ruby-core.gemspec
|
|
204
205
|
- sentry-ruby.gemspec
|
|
205
|
-
homepage: https://github.com/getsentry/sentry-ruby/tree/7.
|
|
206
|
+
homepage: https://github.com/getsentry/sentry-ruby/tree/7.1.0/sentry-ruby
|
|
206
207
|
licenses:
|
|
207
208
|
- MIT
|
|
208
209
|
metadata:
|
|
209
|
-
homepage_uri: https://github.com/getsentry/sentry-ruby/tree/7.
|
|
210
|
-
source_code_uri: https://github.com/getsentry/sentry-ruby/tree/7.
|
|
211
|
-
changelog_uri: https://github.com/getsentry/sentry-ruby/blob/7.
|
|
210
|
+
homepage_uri: https://github.com/getsentry/sentry-ruby/tree/7.1.0/sentry-ruby
|
|
211
|
+
source_code_uri: https://github.com/getsentry/sentry-ruby/tree/7.1.0/sentry-ruby
|
|
212
|
+
changelog_uri: https://github.com/getsentry/sentry-ruby/blob/7.1.0/CHANGELOG.md
|
|
212
213
|
bug_tracker_uri: https://github.com/getsentry/sentry-ruby/issues
|
|
213
|
-
documentation_uri: http://www.rubydoc.info/gems/sentry-ruby/7.
|
|
214
|
+
documentation_uri: http://www.rubydoc.info/gems/sentry-ruby/7.1.0
|
|
214
215
|
rdoc_options: []
|
|
215
216
|
require_paths:
|
|
216
217
|
- lib
|