sentry-ruby 5.15.2 → 5.16.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed83b6915b7b845897d60615cf014a4390057988f8902cce127d4a0cd4374828
4
- data.tar.gz: 123678c45d2fe455db04c058c33a7f87c515c76d90dba6dfe7e44e558c8ecb6e
3
+ metadata.gz: 4a5743489d7783f058f5efc6085e044b6f90e8b13ddf0327d93b09a1a26689c5
4
+ data.tar.gz: '086b5740b42d73b3c87c4f2fb796e1b8692a338b8dd9cc1b5e4cc9783ab8ec5d'
5
5
  SHA512:
6
- metadata.gz: 784bce1a9edaefd7e3740af4f445c0fa01bd3240f53a963559a389a121ca1205ef0f179e1964b00da9232bde473464d6abcacb05fcb912a5f5a46533cb5dbb6e
7
- data.tar.gz: 11b205d8ba4f3649ee42b66af1510a62673fa791d5ff28aa687c68ad94b17ed3e54c9c57536a07d3cf6d4a5ee5504e5bf9871ec00bb0dba457b661850b0f09b7
6
+ metadata.gz: c8b03ba3fce273ee269a02bc6b6a1d3a875473bd53572ba565022dd3e9bb57f87d7083d6b04e6bc987796ed7a2dc83e6ed4885abc18e0582680975b353eaa879
7
+ data.tar.gz: 58be55ae2198fdf17697f22fc8fb4140bcdd4ef9a5b53a09c5a16e29bf42857242393d023536e1219483a803e8647908936a4e6fd84b86924ac0627b5ec62bf8
@@ -65,6 +65,11 @@ module Sentry
65
65
  @shutdown_callback&.call
66
66
  end
67
67
 
68
+ def full?
69
+ @executor.is_a?(Concurrent::ThreadPoolExecutor) &&
70
+ @executor.remaining_capacity == 0
71
+ end
72
+
68
73
  private
69
74
 
70
75
  def _perform(&block)
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sentry
4
+ class BackpressureMonitor
5
+ include LoggingHelper
6
+
7
+ DEFAULT_INTERVAL = 10
8
+ MAX_DOWNSAMPLE_FACTOR = 10
9
+
10
+ def initialize(configuration, client, interval: DEFAULT_INTERVAL)
11
+ @interval = interval
12
+ @client = client
13
+ @logger = configuration.logger
14
+
15
+ @thread = nil
16
+ @exited = false
17
+
18
+ @healthy = true
19
+ @downsample_factor = 0
20
+ end
21
+
22
+ def healthy?
23
+ ensure_thread
24
+ @healthy
25
+ end
26
+
27
+ def downsample_factor
28
+ ensure_thread
29
+ @downsample_factor
30
+ end
31
+
32
+ def run
33
+ check_health
34
+ set_downsample_factor
35
+ end
36
+
37
+ def check_health
38
+ @healthy = !(@client.transport.any_rate_limited? || Sentry.background_worker&.full?)
39
+ end
40
+
41
+ def set_downsample_factor
42
+ if @healthy
43
+ log_debug("[BackpressureMonitor] health check positive, reverting to normal sampling") if @downsample_factor.positive?
44
+ @downsample_factor = 0
45
+ else
46
+ @downsample_factor += 1 if @downsample_factor < MAX_DOWNSAMPLE_FACTOR
47
+ log_debug("[BackpressureMonitor] health check negative, downsampling with a factor of #{@downsample_factor}")
48
+ end
49
+ end
50
+
51
+ def kill
52
+ log_debug("[BackpressureMonitor] killing monitor")
53
+
54
+ @exited = true
55
+ @thread&.kill
56
+ end
57
+
58
+ private
59
+
60
+ def ensure_thread
61
+ return if @exited
62
+ return if @thread&.alive?
63
+
64
+ @thread = Thread.new do
65
+ loop do
66
+ sleep(@interval)
67
+ run
68
+ end
69
+ end
70
+ rescue ThreadError
71
+ log_debug("[BackpressureMonitor] Thread creation failed")
72
+ @exited = true
73
+ end
74
+ end
75
+ end
data/lib/sentry/client.rb CHANGED
@@ -57,7 +57,7 @@ module Sentry
57
57
  event = scope.apply_to_event(event, hint)
58
58
 
59
59
  if event.nil?
60
- log_info("Discarded event because one of the event processors returned nil")
60
+ log_debug("Discarded event because one of the event processors returned nil")
61
61
  transport.record_lost_event(:event_processor, event_type)
62
62
  return
63
63
  end
@@ -156,7 +156,7 @@ module Sentry
156
156
  event = configuration.before_send.call(event, hint)
157
157
 
158
158
  if event.nil?
159
- log_info("Discarded event because before_send returned nil")
159
+ log_debug("Discarded event because before_send returned nil")
160
160
  transport.record_lost_event(:before_send, 'event')
161
161
  return
162
162
  end
@@ -166,7 +166,7 @@ module Sentry
166
166
  event = configuration.before_send_transaction.call(event, hint)
167
167
 
168
168
  if event.nil?
169
- log_info("Discarded event because before_send_transaction returned nil")
169
+ log_debug("Discarded event because before_send_transaction returned nil")
170
170
  transport.record_lost_event(:before_send, 'transaction')
171
171
  return
172
172
  end
@@ -177,11 +177,7 @@ module Sentry
177
177
 
178
178
  event
179
179
  rescue => e
180
- loggable_event_type = event_type.capitalize
181
- log_error("#{loggable_event_type} sending failed", e, debug: configuration.debug)
182
-
183
- event_info = Event.get_log_message(event.to_hash)
184
- log_info("Unreported #{loggable_event_type}: #{event_info}")
180
+ log_error("Event sending failed", e, debug: configuration.debug)
185
181
  transport.record_lost_event(:network_error, event_type)
186
182
  raise
187
183
  end
@@ -7,6 +7,7 @@ require 'sentry/utils/custom_inspection'
7
7
  require "sentry/dsn"
8
8
  require "sentry/release_detector"
9
9
  require "sentry/transport/configuration"
10
+ require "sentry/cron/configuration"
10
11
  require "sentry/linecache"
11
12
  require "sentry/interfaces/stacktrace_builder"
12
13
 
@@ -226,10 +227,14 @@ module Sentry
226
227
  # @return [String]
227
228
  attr_accessor :server_name
228
229
 
229
- # Return a Transport::Configuration object for transport-related configurations.
230
- # @return [Transport]
230
+ # Transport related configuration.
231
+ # @return [Transport::Configuration]
231
232
  attr_reader :transport
232
233
 
234
+ # Cron related configuration.
235
+ # @return [Cron::Configuration]
236
+ attr_reader :cron
237
+
233
238
  # Take a float between 0.0 and 1.0 as the sample rate for tracing events (transactions).
234
239
  # @return [Float, nil]
235
240
  attr_reader :traces_sample_rate
@@ -258,6 +263,12 @@ module Sentry
258
263
  # @return [Boolean]
259
264
  attr_accessor :auto_session_tracking
260
265
 
266
+ # Whether to downsample transactions automatically because of backpressure.
267
+ # Starts a new monitor thread to check health of the SDK every 10 seconds.
268
+ # Default is false
269
+ # @return [Boolean]
270
+ attr_accessor :enable_backpressure_handling
271
+
261
272
  # Allowlist of outgoing request targets to which sentry-trace and baggage headers are attached.
262
273
  # Default is all (/.*/)
263
274
  # @return [Array<String, Regexp>]
@@ -358,6 +369,7 @@ module Sentry
358
369
  self.skip_rake_integration = false
359
370
  self.send_client_reports = true
360
371
  self.auto_session_tracking = true
372
+ self.enable_backpressure_handling = false
361
373
  self.trusted_proxies = []
362
374
  self.dsn = ENV['SENTRY_DSN']
363
375
  self.spotlight = false
@@ -373,6 +385,7 @@ module Sentry
373
385
  self.enable_tracing = nil
374
386
 
375
387
  @transport = Transport::Configuration.new
388
+ @cron = Cron::Configuration.new
376
389
  @gem_specs = Hash[Gem::Specification.map { |spec| [spec.name, spec.version.to_s] }] if Gem::Specification.respond_to?(:map)
377
390
 
378
391
  run_post_initialization_callbacks
@@ -461,7 +474,7 @@ module Sentry
461
474
 
462
475
  def profiles_sample_rate=(profiles_sample_rate)
463
476
  raise ArgumentError, "profiles_sample_rate must be a Numeric or nil" unless is_numeric_or_nil?(profiles_sample_rate)
464
- log_info("Please make sure to include the 'stackprof' gem in your Gemfile to use Profiling with Sentry.") unless defined?(StackProf)
477
+ log_warn("Please make sure to include the 'stackprof' gem in your Gemfile to use Profiling with Sentry.") unless defined?(StackProf)
465
478
  @profiles_sample_rate = profiles_sample_rate
466
479
  end
467
480
 
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sentry
4
+ module Cron
5
+ class Configuration
6
+ # Defaults set here will apply to all {Cron::MonitorConfig} objects unless overwritten.
7
+
8
+ # How long (in minutes) after the expected checkin time will we wait
9
+ # until we consider the checkin to have been missed.
10
+ # @return [Integer, nil]
11
+ attr_accessor :default_checkin_margin
12
+
13
+ # How long (in minutes) is the checkin allowed to run for in in_progress
14
+ # before it is considered failed.
15
+ # @return [Integer, nil]
16
+ attr_accessor :default_max_runtime
17
+
18
+ # tz database style timezone string
19
+ # @return [String, nil]
20
+ attr_accessor :default_timezone
21
+ end
22
+ end
23
+ end
@@ -13,32 +13,42 @@ module Sentry
13
13
  monitor_config: monitor_config)
14
14
 
15
15
  start = Sentry.utc_now.to_i
16
- # need to do this on ruby <= 2.6 sadly
17
- ret = method(:perform).super_method.arity == 0 ? super() : super
18
- duration = Sentry.utc_now.to_i - start
19
16
 
20
- Sentry.capture_check_in(slug,
21
- :ok,
22
- check_in_id: check_in_id,
23
- duration: duration,
24
- monitor_config: monitor_config)
17
+ begin
18
+ # need to do this on ruby <= 2.6 sadly
19
+ ret = method(:perform).super_method.arity == 0 ? super() : super
20
+ duration = Sentry.utc_now.to_i - start
25
21
 
26
- ret
27
- rescue Exception
28
- duration = Sentry.utc_now.to_i - start
22
+ Sentry.capture_check_in(slug,
23
+ :ok,
24
+ check_in_id: check_in_id,
25
+ duration: duration,
26
+ monitor_config: monitor_config)
29
27
 
30
- Sentry.capture_check_in(slug,
31
- :error,
32
- check_in_id: check_in_id,
33
- duration: duration,
34
- monitor_config: monitor_config)
28
+ ret
29
+ rescue Exception
30
+ duration = Sentry.utc_now.to_i - start
35
31
 
36
- raise
32
+ Sentry.capture_check_in(slug,
33
+ :error,
34
+ check_in_id: check_in_id,
35
+ duration: duration,
36
+ monitor_config: monitor_config)
37
+
38
+ raise
39
+ end
37
40
  end
38
41
  end
39
42
 
40
43
  module ClassMethods
41
44
  def sentry_monitor_check_ins(slug: nil, monitor_config: nil)
45
+ if monitor_config && Sentry.configuration
46
+ cron_config = Sentry.configuration.cron
47
+ monitor_config.checkin_margin ||= cron_config.default_checkin_margin
48
+ monitor_config.max_runtime ||= cron_config.default_max_runtime
49
+ monitor_config.timezone ||= cron_config.default_timezone
50
+ end
51
+
42
52
  @sentry_monitor_slug = slug
43
53
  @sentry_monitor_config = monitor_config
44
54
 
@@ -57,8 +67,6 @@ module Sentry
57
67
  end
58
68
  end
59
69
 
60
- extend ClassMethods
61
-
62
70
  def self.included(base)
63
71
  base.extend(ClassMethods)
64
72
  end
data/lib/sentry/event.rb CHANGED
@@ -76,34 +76,6 @@ module Sentry
76
76
  @message = (message || "").byteslice(0..MAX_MESSAGE_SIZE_IN_BYTES)
77
77
  end
78
78
 
79
- class << self
80
- # @!visibility private
81
- def get_log_message(event_hash)
82
- message = event_hash[:message] || event_hash['message']
83
-
84
- return message unless message.nil? || message.empty?
85
-
86
- message = get_message_from_exception(event_hash)
87
-
88
- return message unless message.nil? || message.empty?
89
-
90
- message = event_hash[:transaction] || event_hash["transaction"]
91
-
92
- return message unless message.nil? || message.empty?
93
-
94
- '<no message value>'
95
- end
96
-
97
- # @!visibility private
98
- def get_message_from_exception(event_hash)
99
- if exception = event_hash.dig(:exception, :values, 0)
100
- "#{exception[:type]}: #{exception[:value]}"
101
- elsif exception = event_hash.dig("exception", "values", 0)
102
- "#{exception["type"]}: #{exception["value"]}"
103
- end
104
- end
105
- end
106
-
107
79
  # @deprecated This method will be removed in v5.0.0. Please just use Sentry.configuration
108
80
  # @return [Configuration]
109
81
  def configuration
data/lib/sentry/hub.rb CHANGED
@@ -156,7 +156,7 @@ module Sentry
156
156
  capture_event(event, **options, &block)
157
157
  end
158
158
 
159
- def capture_check_in(slug, status, **options, &block)
159
+ def capture_check_in(slug, status, **options)
160
160
  check_argument_type!(slug, ::String)
161
161
  check_argument_includes!(status, Sentry::CheckInEvent::VALID_STATUSES)
162
162
 
@@ -176,7 +176,7 @@ module Sentry
176
176
 
177
177
  return unless event
178
178
 
179
- capture_event(event, **options, &block)
179
+ capture_event(event, **options)
180
180
  event.check_in_id
181
181
  end
182
182
 
data/lib/sentry/rake.rb CHANGED
@@ -17,15 +17,6 @@ module Sentry
17
17
  super
18
18
  end
19
19
  end
20
-
21
- module Task
22
- # @api private
23
- def execute(args=nil)
24
- return super unless Sentry.initialized? && Sentry.get_current_hub
25
-
26
- super
27
- end
28
- end
29
20
  end
30
21
  end
31
22
 
@@ -34,8 +25,4 @@ module Rake
34
25
  class Application
35
26
  prepend(Sentry::Rake::Application)
36
27
  end
37
-
38
- class Task
39
- prepend(Sentry::Rake::Task)
40
- end
41
28
  end
data/lib/sentry/scope.rb CHANGED
@@ -44,12 +44,18 @@ module Sentry
44
44
  # @param hint [Hash] the hint data that'll be passed to event processors.
45
45
  # @return [Event]
46
46
  def apply_to_event(event, hint = nil)
47
- event.tags = tags.merge(event.tags)
48
- event.user = user.merge(event.user)
49
- event.extra = extra.merge(event.extra)
50
- event.contexts = contexts.merge(event.contexts)
51
- event.transaction = transaction_name if transaction_name
52
- event.transaction_info = { source: transaction_source } if transaction_source
47
+ unless event.is_a?(CheckInEvent)
48
+ event.tags = tags.merge(event.tags)
49
+ event.user = user.merge(event.user)
50
+ event.extra = extra.merge(event.extra)
51
+ event.contexts = contexts.merge(event.contexts)
52
+ event.transaction = transaction_name if transaction_name
53
+ event.transaction_info = { source: transaction_source } if transaction_source
54
+ event.fingerprint = fingerprint
55
+ event.level = level
56
+ event.breadcrumbs = breadcrumbs
57
+ event.rack_env = rack_env if rack_env
58
+ end
53
59
 
54
60
  if span
55
61
  event.contexts[:trace] ||= span.get_trace_context
@@ -58,11 +64,6 @@ module Sentry
58
64
  event.dynamic_sampling_context ||= propagation_context.get_dynamic_sampling_context
59
65
  end
60
66
 
61
- event.fingerprint = fingerprint
62
- event.level = level
63
- event.breadcrumbs = breadcrumbs
64
- event.rack_env = rack_env if rack_env
65
-
66
67
  all_event_processors = self.class.global_event_processors + @event_processors
67
68
 
68
69
  unless all_event_processors.empty?
@@ -218,7 +218,12 @@ module Sentry
218
218
  if sample_rate == true
219
219
  @sampled = true
220
220
  else
221
- @sampled = Random.rand < sample_rate
221
+ if Sentry.backpressure_monitor
222
+ factor = Sentry.backpressure_monitor.downsample_factor
223
+ @effective_sample_rate /= 2**factor
224
+ end
225
+
226
+ @sampled = Random.rand < @effective_sample_rate
222
227
  end
223
228
 
224
229
  if @sampled
@@ -257,7 +262,9 @@ module Sentry
257
262
  event = hub.current_client.event_from_transaction(self)
258
263
  hub.capture_event(event)
259
264
  else
260
- hub.current_client.transport.record_lost_event(:sample_rate, 'transaction')
265
+ is_backpressure = Sentry.backpressure_monitor&.downsample_factor&.positive?
266
+ reason = is_backpressure ? :backpressure : :sample_rate
267
+ hub.current_client.transport.record_lost_event(reason, 'transaction')
261
268
  end
262
269
  end
263
270
 
@@ -53,18 +53,14 @@ module Sentry
53
53
  end
54
54
 
55
55
  if response.code.match?(/\A2\d{2}/)
56
- if has_rate_limited_header?(response)
57
- handle_rate_limited_response(response)
58
- end
56
+ handle_rate_limited_response(response) if has_rate_limited_header?(response)
57
+ elsif response.code == "429"
58
+ log_debug("the server responded with status 429")
59
+ handle_rate_limited_response(response)
59
60
  else
60
61
  error_info = "the server responded with status #{response.code}"
61
-
62
- if response.code == "429"
63
- handle_rate_limited_response(response)
64
- else
65
- error_info += "\nbody: #{response.body}"
66
- error_info += " Error in headers is: #{response['x-sentry-error']}" if response['x-sentry-error']
67
- end
62
+ error_info += "\nbody: #{response.body}"
63
+ error_info += " Error in headers is: #{response['x-sentry-error']}" if response['x-sentry-error']
68
64
 
69
65
  raise Sentry::ExternalError, error_info
70
66
  end
@@ -19,7 +19,8 @@ module Sentry
19
19
  :sample_rate,
20
20
  :before_send,
21
21
  :event_processor,
22
- :insufficient_data
22
+ :insufficient_data,
23
+ :backpressure
23
24
  ]
24
25
 
25
26
  include LoggingHelper
@@ -74,7 +75,7 @@ module Sentry
74
75
  result, oversized = item.serialize
75
76
 
76
77
  if oversized
77
- log_info("Envelope item [#{item.type}] is still oversized after size reduction: {#{item.size_breakdown}}")
78
+ log_debug("Envelope item [#{item.type}] is still oversized after size reduction: {#{item.size_breakdown}}")
78
79
 
79
80
  next
80
81
  end
@@ -119,6 +120,10 @@ module Sentry
119
120
  !!delay && delay > Time.now
120
121
  end
121
122
 
123
+ def any_rate_limited?
124
+ @rate_limits.values.any? { |t| t && t > Time.now }
125
+ end
126
+
122
127
  def envelope_from_event(event)
123
128
  # Convert to hash
124
129
  event_payload = event.to_hash
@@ -163,11 +168,20 @@ module Sentry
163
168
  @discarded_events[[reason, item_type]] += 1
164
169
  end
165
170
 
171
+ def flush
172
+ client_report_headers, client_report_payload = fetch_pending_client_report(force: true)
173
+ return unless client_report_headers
174
+
175
+ envelope = Envelope.new
176
+ envelope.add_item(client_report_headers, client_report_payload)
177
+ send_envelope(envelope)
178
+ end
179
+
166
180
  private
167
181
 
168
- def fetch_pending_client_report
182
+ def fetch_pending_client_report(force: false)
169
183
  return nil unless @send_client_reports
170
- return nil if @last_client_report_sent > Time.now - CLIENT_REPORT_INTERVAL
184
+ return nil if !force && @last_client_report_sent > Time.now - CLIENT_REPORT_INTERVAL
171
185
  return nil if @discarded_events.empty?
172
186
 
173
187
  discarded_events_hash = @discarded_events.map do |key, val|
@@ -194,7 +208,7 @@ module Sentry
194
208
  def reject_rate_limited_items(envelope)
195
209
  envelope.items.reject! do |item|
196
210
  if is_rate_limited?(item.type)
197
- log_info("[Transport] Envelope item [#{item.type}] not sent: rate limiting")
211
+ log_debug("[Transport] Envelope item [#{item.type}] not sent: rate limiting")
198
212
  record_lost_event(:ratelimit_backoff, item.type)
199
213
 
200
214
  true
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sentry
4
- VERSION = "5.15.2"
4
+ VERSION = "5.16.0"
5
5
  end
data/lib/sentry-ruby.rb CHANGED
@@ -21,6 +21,7 @@ require "sentry/transaction"
21
21
  require "sentry/hub"
22
22
  require "sentry/background_worker"
23
23
  require "sentry/session_flusher"
24
+ require "sentry/backpressure_monitor"
24
25
  require "sentry/cron/monitor_check_ins"
25
26
 
26
27
  [
@@ -65,13 +66,17 @@ module Sentry
65
66
  end
66
67
 
67
68
  # @!attribute [rw] background_worker
68
- # @return [BackgroundWorker, nil]
69
+ # @return [BackgroundWorker]
69
70
  attr_accessor :background_worker
70
71
 
71
72
  # @!attribute [r] session_flusher
72
73
  # @return [SessionFlusher, nil]
73
74
  attr_reader :session_flusher
74
75
 
76
+ # @!attribute [r] backpressure_monitor
77
+ # @return [BackpressureMonitor, nil]
78
+ attr_reader :backpressure_monitor
79
+
75
80
  ##### Patch Registration #####
76
81
 
77
82
  # @!visibility private
@@ -217,17 +222,9 @@ module Sentry
217
222
  Thread.current.thread_variable_set(THREAD_LOCAL, hub)
218
223
  @main_hub = hub
219
224
  @background_worker = Sentry::BackgroundWorker.new(config)
220
-
221
- @session_flusher = if config.auto_session_tracking
222
- Sentry::SessionFlusher.new(config, client)
223
- else
224
- nil
225
- end
226
-
227
- if config.include_local_variables
228
- exception_locals_tp.enable
229
- end
230
-
225
+ @session_flusher = config.auto_session_tracking ? Sentry::SessionFlusher.new(config, client) : nil
226
+ @backpressure_monitor = config.enable_backpressure_handling ? Sentry::BackpressureMonitor.new(config, client) : nil
227
+ exception_locals_tp.enable if config.include_local_variables
231
228
  at_exit { close }
232
229
  end
233
230
 
@@ -236,20 +233,27 @@ module Sentry
236
233
  #
237
234
  # @return [void]
238
235
  def close
239
- if @background_worker
240
- @background_worker.shutdown
241
- @background_worker = nil
242
- end
243
-
244
236
  if @session_flusher
237
+ @session_flusher.flush
245
238
  @session_flusher.kill
246
239
  @session_flusher = nil
247
240
  end
248
241
 
249
- if configuration&.include_local_variables
250
- exception_locals_tp.disable
242
+ if @backpressure_monitor
243
+ @backpressure_monitor.kill
244
+ @backpressure_monitor = nil
251
245
  end
252
246
 
247
+ if client = get_current_client
248
+ client.transport.flush
249
+
250
+ if client.configuration.include_local_variables
251
+ exception_locals_tp.disable
252
+ end
253
+ end
254
+
255
+ @background_worker.shutdown
256
+
253
257
  @main_hub = nil
254
258
  Thread.current.thread_variable_set(THREAD_LOCAL, nil)
255
259
  end
@@ -442,12 +446,10 @@ module Sentry
442
446
  # @option options [Integer] duration seconds elapsed since this monitor started
443
447
  # @option options [Cron::MonitorConfig] monitor_config configuration for this monitor
444
448
  #
445
- # @yieldparam scope [Scope]
446
- #
447
449
  # @return [String, nil] The {CheckInEvent#check_in_id} to use for later updates on the same slug
448
- def capture_check_in(slug, status, **options, &block)
450
+ def capture_check_in(slug, status, **options)
449
451
  return unless initialized?
450
- get_current_hub.capture_check_in(slug, status, **options, &block)
452
+ get_current_hub.capture_check_in(slug, status, **options)
451
453
  end
452
454
 
453
455
  # Takes or initializes a new Sentry::Transaction and makes a sampling decision for it.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.15.2
4
+ version: 5.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-18 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -51,6 +51,7 @@ files:
51
51
  - bin/setup
52
52
  - lib/sentry-ruby.rb
53
53
  - lib/sentry/background_worker.rb
54
+ - lib/sentry/backpressure_monitor.rb
54
55
  - lib/sentry/backtrace.rb
55
56
  - lib/sentry/baggage.rb
56
57
  - lib/sentry/breadcrumb.rb
@@ -61,6 +62,7 @@ files:
61
62
  - lib/sentry/configuration.rb
62
63
  - lib/sentry/core_ext/object/deep_dup.rb
63
64
  - lib/sentry/core_ext/object/duplicable.rb
65
+ - lib/sentry/cron/configuration.rb
64
66
  - lib/sentry/cron/monitor_check_ins.rb
65
67
  - lib/sentry/cron/monitor_config.rb
66
68
  - lib/sentry/cron/monitor_schedule.rb