Module: Sentry
- Extended by:
- Forwardable
- Defined in:
- lib/sentry/dsn.rb,
lib/sentry/hub.rb,
lib/sentry-ruby.rb,
lib/sentry/puma.rb,
lib/sentry/rake.rb,
lib/sentry/span.rb,
lib/sentry/event.rb,
lib/sentry/redis.rb,
lib/sentry/scope.rb,
lib/sentry/client.rb,
lib/sentry/logger.rb,
lib/sentry/baggage.rb,
lib/sentry/faraday.rb,
lib/sentry/metrics.rb,
lib/sentry/session.rb,
lib/sentry/version.rb,
lib/sentry/envelope.rb,
lib/sentry/net/http.rb,
lib/sentry/profiler.rb,
lib/sentry/backtrace.rb,
lib/sentry/interface.rb,
lib/sentry/linecache.rb,
lib/sentry/log_event.rb,
lib/sentry/transport.rb,
lib/sentry/attachment.rb,
lib/sentry/breadcrumb.rb,
lib/sentry/exceptions.rb,
lib/sentry/integrable.rb,
lib/sentry/error_event.rb,
lib/sentry/test_helper.rb,
lib/sentry/transaction.rb,
lib/sentry/configuration.rb,
lib/sentry/envelope/item.rb,
lib/sentry/check_in_event.rb,
lib/sentry/metrics/metric.rb,
lib/sentry/metrics/timing.rb,
lib/sentry/std_lib_logger.rb,
lib/sentry/vernier/output.rb,
lib/sentry/session_flusher.rb,
lib/sentry/excon/middleware.rb,
lib/sentry/log_event_buffer.rb,
lib/sentry/profiler/helpers.rb,
lib/sentry/release_detector.rb,
lib/sentry/vernier/profiler.rb,
lib/sentry/background_worker.rb,
lib/sentry/breadcrumb_buffer.rb,
lib/sentry/structured_logger.rb,
lib/sentry/transaction_event.rb,
lib/sentry/cron/configuration.rb,
lib/sentry/interfaces/request.rb,
lib/sentry/interfaces/threads.rb,
lib/sentry/metrics/aggregator.rb,
lib/sentry/metrics/set_metric.rb,
lib/sentry/cron/monitor_config.rb,
lib/sentry/propagation_context.rb,
lib/sentry/backpressure_monitor.rb,
lib/sentry/interfaces/exception.rb,
lib/sentry/interfaces/mechanism.rb,
lib/sentry/metrics/gauge_metric.rb,
lib/sentry/cron/monitor_schedule.rb,
lib/sentry/interfaces/stacktrace.rb,
lib/sentry/metrics/configuration.rb,
lib/sentry/cron/monitor_check_ins.rb,
lib/sentry/metrics/counter_metric.rb,
lib/sentry/debug_structured_logger.rb,
lib/sentry/rack/capture_exceptions.rb,
lib/sentry/transport/configuration.rb,
lib/sentry/breadcrumb/sentry_logger.rb,
lib/sentry/metrics/local_aggregator.rb,
lib/sentry/threaded_periodic_worker.rb,
lib/sentry/transport/http_transport.rb,
lib/sentry/transport/debug_transport.rb,
lib/sentry/transport/dummy_transport.rb,
lib/sentry/interfaces/single_exception.rb,
lib/sentry/metrics/distribution_metric.rb,
lib/sentry/interfaces/stacktrace_builder.rb,
lib/sentry/transport/spotlight_transport.rb
Defined Under Namespace
Modules: Cron, Excon, Faraday, Integrable, Metrics, Net, Puma, Rack, Rake, StdLibLogger, TestHelper, Vernier Classes: Attachment, BackgroundWorker, BackpressureMonitor, Backtrace, Baggage, Breadcrumb, BreadcrumbBuffer, CheckInEvent, Client, Configuration, DSN, DebugStructuredLogger, DebugTransport, DummyTransport, Envelope, Error, ErrorEvent, Event, ExceptionInterface, ExternalError, HTTPTransport, Hub, Interface, LineCache, LogEvent, Logger, Mechanism, Profiler, PropagationContext, Redis, ReleaseDetector, RequestInterface, Scope, Session, SessionFlusher, SingleExceptionInterface, Span, SpotlightTransport, StacktraceBuilder, StacktraceInterface, StructuredLogger, StructuredLoggingConfiguration, ThreadedPeriodicWorker, ThreadsInterface, Transaction, TransactionEvent, Transport
Constant Summary collapse
- META =
{ "name" => "sentry.ruby", "version" => Sentry::VERSION }.freeze
- CAPTURED_SIGNATURE =
:@__sentry_captured
- LOGGER_PROGNAME =
"sentry"
- SENTRY_TRACE_HEADER_NAME =
"sentry-trace"
- BAGGAGE_HEADER_NAME =
"baggage"
- THREAD_LOCAL =
:sentry_hub
- MUTEX =
Mutex.new
- GLOBALS =
i[ main_hub logger session_flusher backpressure_monitor metrics_aggregator exception_locals_tp ].freeze
- VERSION =
"5.28.0"
Class Attribute Summary collapse
- .background_worker ⇒ BackgroundWorker
-
.backpressure_monitor ⇒ Object
readonly
Returns the value of attribute backpressure_monitor.
-
.metrics_aggregator ⇒ Object
readonly
Returns the value of attribute metrics_aggregator.
-
.session_flusher ⇒ Object
readonly
Returns the value of attribute session_flusher.
Class Method Summary collapse
- .add_attachment ⇒ Object
-
.add_breadcrumb(breadcrumb, **options) ⇒ Breadcrumb?
Takes an instance of Sentry::Breadcrumb and stores it to the current active scope.
-
.add_global_event_processor {|event, hint| ... } ⇒ void
Add a global event processor [Proc].
-
.capture_check_in(slug, status, **options) ⇒ String?
Captures a check-in and sends it to Sentry via the currently active hub.
-
.capture_event(event) ⇒ Event?
Takes an instance of Sentry::Event and dispatches it to the currently active hub.
-
.capture_exception(exception, **options) {|scope| ... } ⇒ Event?
Takes an exception and reports it to Sentry via the currently active hub.
-
.capture_log(message, **options) ⇒ LogEvent?
Captures a log event and sends it to Sentry via the currently active hub.
-
.capture_message(message, **options) {|scope| ... } ⇒ Event?
Takes a message string and reports it to Sentry via the currently active hub.
-
.clone_hub_to_current_thread ⇒ void
Clones the main thread’s active hub and stores it to the current thread.
-
.close ⇒ void
Flushes pending events and cleans up SDK state.
- .configuration ⇒ Object
-
.configure_scope {|scope| ... } ⇒ void
Takes a block and yields the current active scope.
-
.continue_trace(env, **options) ⇒ Transaction?
Continue an incoming trace from a rack env like hash.
-
.csp_report_uri ⇒ String?
Returns an uri for security policy reporting that’s generated from the given DSN (To learn more about security policy reporting: docs.sentry.io/product/security-policy-reporting/).
-
.exception_captured?(exc) ⇒ Boolean
Checks if the exception object has been captured by the SDK.
-
.get_baggage ⇒ String?
Returns the baggage header for distributed tracing.
-
.get_current_client ⇒ Client?
Returns the current active client.
-
.get_current_hub ⇒ Hub
Returns the current active hub.
-
.get_current_scope ⇒ Scope?
Returns the current active scope.
-
.get_main_hub ⇒ Hub
Returns the main thread’s active hub.
-
.get_trace_propagation_headers ⇒ Hash?
Returns the a Hash containing sentry-trace and baggage.
-
.get_trace_propagation_meta ⇒ String
Returns the a Hash containing sentry-trace and baggage.
-
.get_traceparent ⇒ String?
Returns the traceparent (sentry-trace) header for distributed tracing.
-
.init {|config| ... } ⇒ void
Initializes the SDK with given configuration.
-
.initialized? ⇒ Boolean
Returns true if the SDK is initialized.
-
.integrations ⇒ Hash{String=>Hash}
Returns a hash that contains all the integrations that have been registered to the main SDK.
-
.last_event_id ⇒ String?
Returns the id of the lastly reported Sentry::Event.
-
.logger ⇒ StructuredLogger?
Returns the structured logger instance that implements Sentry’s SDK telemetry logs protocol.
-
.register_integration(name, version) ⇒ Object
Registers the SDK integration with its name and version.
- .send_event ⇒ Object
- .set_context ⇒ Object
- .set_extras ⇒ Object
- .set_tags ⇒ Object
- .set_user ⇒ Object
-
.start_transaction(**options) ⇒ Transaction?
Takes or initializes a new Sentry::Transaction and makes a sampling decision for it.
-
.with_child_span(**attributes) {|child_span| ... } ⇒ Object
Records the block’s execution as a child of the current span.
-
.with_exception_captured(**options, &block) ⇒ Object
Takes a block and evaluates it.
-
.with_scope {|scope| ... } ⇒ void
Takes a block and yields a temporary scope.
-
.with_session_tracking(&block) ⇒ void
Wrap a given block with session tracking.
Class Attribute Details
.background_worker ⇒ BackgroundWorker
86 87 88 |
# File 'lib/sentry-ruby.rb', line 86 def background_worker @background_worker end |
.backpressure_monitor ⇒ Object (readonly)
Returns the value of attribute backpressure_monitor.
94 95 96 |
# File 'lib/sentry-ruby.rb', line 94 def backpressure_monitor @backpressure_monitor end |
.metrics_aggregator ⇒ Object (readonly)
Returns the value of attribute metrics_aggregator.
98 99 100 |
# File 'lib/sentry-ruby.rb', line 98 def metrics_aggregator @metrics_aggregator end |
.session_flusher ⇒ Object (readonly)
Returns the value of attribute session_flusher.
90 91 92 |
# File 'lib/sentry-ruby.rb', line 90 def session_flusher @session_flusher end |
Class Method Details
.add_attachment ⇒ Object
230 231 232 233 |
# File 'lib/sentry-ruby.rb', line 230 def (**opts) return unless initialized? get_current_scope.(**opts) end |
.add_breadcrumb(breadcrumb, **options) ⇒ Breadcrumb?
Takes an instance of Sentry::Breadcrumb and stores it to the current active scope.
331 332 333 334 |
# File 'lib/sentry-ruby.rb', line 331 def (, **) return unless initialized? get_current_hub.(, **) end |
.add_global_event_processor {|event, hint| ... } ⇒ void
This method returns an undefined value.
Add a global event processor [Proc]. These run before scope event processors.
570 571 572 |
# File 'lib/sentry-ruby.rb', line 570 def add_global_event_processor(&block) Scope.add_global_event_processor(&block) end |
.capture_check_in(slug, status, **options) ⇒ String?
Captures a check-in and sends it to Sentry via the currently active hub.
490 491 492 493 |
# File 'lib/sentry-ruby.rb', line 490 def capture_check_in(slug, status, **) return unless initialized? get_current_hub.capture_check_in(slug, status, **) end |
.capture_event(event) ⇒ Event?
Takes an instance of Sentry::Event and dispatches it to the currently active hub.
474 475 476 477 |
# File 'lib/sentry-ruby.rb', line 474 def capture_event(event) return unless initialized? get_current_hub.capture_event(event) end |
.capture_exception(exception, **options) {|scope| ... } ⇒ Event?
Takes an exception and reports it to Sentry via the currently active hub.
438 439 440 441 |
# File 'lib/sentry-ruby.rb', line 438 def capture_exception(exception, **, &block) return unless initialized? get_current_hub.capture_exception(exception, **, &block) end |
.capture_log(message, **options) ⇒ LogEvent?
Captures a log event and sends it to Sentry via the currently active hub. This is the underlying method used by the StructuredLogger class.
510 511 512 513 |
# File 'lib/sentry-ruby.rb', line 510 def capture_log(, **) return unless initialized? get_current_hub.capture_log_event(, **) end |
.capture_message(message, **options) {|scope| ... } ⇒ Event?
Takes a message string and reports it to Sentry via the currently active hub.
466 467 468 469 |
# File 'lib/sentry-ruby.rb', line 466 def (, **, &block) return unless initialized? get_current_hub.(, **, &block) end |
.clone_hub_to_current_thread ⇒ void
This method returns an undefined value.
Clones the main thread’s active hub and stores it to the current thread.
368 369 370 371 |
# File 'lib/sentry-ruby.rb', line 368 def clone_hub_to_current_thread return unless initialized? Thread.current.thread_variable_set(THREAD_LOCAL, get_main_hub.clone) end |
.close ⇒ void
This method returns an undefined value.
Flushes pending events and cleans up SDK state. SDK will stop sending events and all top-level APIs will be no-ops after this.
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/sentry-ruby.rb', line 264 def close if @session_flusher @session_flusher.flush @session_flusher.kill @session_flusher = nil end if @backpressure_monitor @backpressure_monitor.kill @backpressure_monitor = nil end if @metrics_aggregator @metrics_aggregator.flush(force: true) @metrics_aggregator.kill @metrics_aggregator = nil end if client = get_current_client client.flush if client.configuration.include_local_variables exception_locals_tp.disable end end @background_worker.shutdown MUTEX.synchronize do @main_hub = nil Thread.current.thread_variable_set(THREAD_LOCAL, nil) end end |
.configuration ⇒ Object
170 171 172 173 |
# File 'lib/sentry-ruby.rb', line 170 def configuration return unless initialized? get_current_client.configuration end |
.configure_scope {|scope| ... } ⇒ void
This method returns an undefined value.
Takes a block and yields the current active scope.
384 385 386 387 |
# File 'lib/sentry-ruby.rb', line 384 def configure_scope(&block) return unless initialized? get_current_hub.configure_scope(&block) end |
.continue_trace(env, **options) ⇒ Transaction?
Continue an incoming trace from a rack env like hash.
614 615 616 617 |
# File 'lib/sentry-ruby.rb', line 614 def continue_trace(env, **) return nil unless initialized? get_current_hub.continue_trace(env, **) end |
.csp_report_uri ⇒ String?
Returns an uri for security policy reporting that’s generated from the given DSN (To learn more about security policy reporting: docs.sentry.io/product/security-policy-reporting/)
It returns nil if
-
The SDK is not initialized yet.
-
The DSN is not provided or is invalid.
313 314 315 316 |
# File 'lib/sentry-ruby.rb', line 313 def csp_report_uri return unless initialized? configuration.csp_report_uri end |
.exception_captured?(exc) ⇒ Boolean
Checks if the exception object has been captured by the SDK.
552 553 554 555 |
# File 'lib/sentry-ruby.rb', line 552 def exception_captured?(exc) return false unless initialized? !!exc.instance_variable_get(CAPTURED_SIGNATURE) end |
.get_baggage ⇒ String?
Returns the baggage header for distributed tracing. Can be either from the currently active span or the propagation context.
587 588 589 590 |
# File 'lib/sentry-ruby.rb', line 587 def get_baggage return nil unless initialized? get_current_hub.get_baggage end |
.get_current_client ⇒ Client?
Returns the current active client.
352 353 354 355 |
# File 'lib/sentry-ruby.rb', line 352 def get_current_client return unless initialized? get_current_hub.current_client end |
.get_current_hub ⇒ Hub
Returns the current active hub. If the current thread doesn’t have an active hub, it will clone the main thread’s active hub, stores it in the current thread, and then returns it.
341 342 343 344 345 346 347 348 |
# File 'lib/sentry-ruby.rb', line 341 def get_current_hub # we need to assign a hub to the current thread if it doesn't have one yet # # ideally, we should do this proactively whenever a new thread is created # but it's impossible for the SDK to keep track every new thread # so we need to use this rather passive way to make sure the app doesn't crash Thread.current.thread_variable_get(THREAD_LOCAL) || clone_hub_to_current_thread end |
.get_current_scope ⇒ Scope?
Returns the current active scope.
360 361 362 363 |
# File 'lib/sentry-ruby.rb', line 360 def get_current_scope return unless initialized? get_current_hub.current_scope end |
.get_main_hub ⇒ Hub
Returns the main thread’s active hub.
321 322 323 324 325 326 |
# File 'lib/sentry-ruby.rb', line 321 def get_main_hub MUTEX.synchronize { @main_hub } rescue ThreadError # In some rare cases this may be called in a trap context so we need to handle it gracefully @main_hub end |
.get_trace_propagation_headers ⇒ Hash?
Returns the a Hash containing sentry-trace and baggage. Can be either from the currently active span or the propagation context.
596 597 598 599 |
# File 'lib/sentry-ruby.rb', line 596 def get_trace_propagation_headers return nil unless initialized? get_current_hub.get_trace_propagation_headers end |
.get_trace_propagation_meta ⇒ String
Returns the a Hash containing sentry-trace and baggage. Can be either from the currently active span or the propagation context.
605 606 607 608 |
# File 'lib/sentry-ruby.rb', line 605 def return "" unless initialized? get_current_hub. end |
.get_traceparent ⇒ String?
Returns the traceparent (sentry-trace) header for distributed tracing. Can be either from the currently active span or the propagation context.
578 579 580 581 |
# File 'lib/sentry-ruby.rb', line 578 def get_traceparent return nil unless initialized? get_current_hub.get_traceparent end |
.init {|config| ... } ⇒ void
This method returns an undefined value.
Initializes the SDK with given configuration.
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
# File 'lib/sentry-ruby.rb', line 241 def init(&block) config = Configuration.new(&block) config.detect_release apply_patches(config) config.validate client = Client.new(config) scope = Scope.new(max_breadcrumbs: config.) hub = Hub.new(client, scope) Thread.current.thread_variable_set(THREAD_LOCAL, hub) @main_hub = hub @background_worker = Sentry::BackgroundWorker.new(config) @session_flusher = config.session_tracking? ? Sentry::SessionFlusher.new(config, client) : nil @backpressure_monitor = config.enable_backpressure_handling ? Sentry::BackpressureMonitor.new(config, client) : nil @metrics_aggregator = config.metrics.enabled ? Sentry::Metrics::Aggregator.new(config, client) : nil exception_locals_tp.enable if config.include_local_variables at_exit { close } end |
.initialized? ⇒ Boolean
Returns true if the SDK is initialized.
301 302 303 |
# File 'lib/sentry-ruby.rb', line 301 def initialized? !!get_main_hub end |
.integrations ⇒ Hash{String=>Hash}
Returns a hash that contains all the integrations that have been registered to the main SDK.
134 135 136 |
# File 'lib/sentry-ruby.rb', line 134 def integrations @integrations ||= {} end |
.last_event_id ⇒ String?
Returns the id of the lastly reported Sentry::Event.
544 545 546 547 |
# File 'lib/sentry-ruby.rb', line 544 def last_event_id return unless initialized? get_current_hub.last_event_id end |
.logger ⇒ StructuredLogger?
Returns the structured logger instance that implements Sentry’s SDK telemetry logs protocol.
This logger is only available when logs are enabled in the configuration.
639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 |
# File 'lib/sentry-ruby.rb', line 639 def logger @logger ||= if configuration.enable_logs # Initialize the public-facing Structured Logger if logs are enabled # Use configured structured logger class or default to StructuredLogger # @see https://develop.sentry.dev/sdk/telemetry/logs/ configuration.structured_logging.logger_class.new(configuration) else warn " [sentry] `Sentry.logger` will no longer be used as internal SDK logger when `enable_logs` feature is turned on.\n Use Sentry.configuration.sdk_logger for SDK-specific logging needs.\"\n\n Caller: \#{caller.first}\n STR\n\n configuration.sdk_logger\n end\nend\n" |
.register_integration(name, version) ⇒ Object
Registers the SDK integration with its name and version.
142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/sentry-ruby.rb', line 142 def register_integration(name, version) if initialized? sdk_logger.warn(LOGGER_PROGNAME) do " Integration '\#{name}' is loaded after the SDK is initialized, which can cause unexpected behavior. Please make sure all integrations are loaded before SDK initialization.\n MSG\n end\n end\n\n meta = { name: \"sentry.ruby.\#{name}\", version: version }.freeze\n integrations[name.to_s] = meta\nend\n" |
.send_event ⇒ Object
177 178 179 180 |
# File 'lib/sentry-ruby.rb', line 177 def send_event(*args) return unless initialized? get_current_client.send_event(*args) end |
.set_context ⇒ Object
223 224 225 226 |
# File 'lib/sentry-ruby.rb', line 223 def set_context(*args) return unless initialized? get_current_scope.set_context(*args) end |
.set_extras ⇒ Object
209 210 211 212 |
# File 'lib/sentry-ruby.rb', line 209 def set_extras(*args) return unless initialized? get_current_scope.set_extras(*args) end |
.set_tags ⇒ Object
202 203 204 205 |
# File 'lib/sentry-ruby.rb', line 202 def (*args) return unless initialized? get_current_scope.(*args) end |
.set_user ⇒ Object
216 217 218 219 |
# File 'lib/sentry-ruby.rb', line 216 def set_user(*args) return unless initialized? get_current_scope.set_user(*args) end |
.start_transaction(**options) ⇒ Transaction?
Takes or initializes a new Sentry::Transaction and makes a sampling decision for it.
518 519 520 521 |
# File 'lib/sentry-ruby.rb', line 518 def start_transaction(**) return unless initialized? get_current_hub.start_transaction(**) end |
.with_child_span(**attributes) {|child_span| ... } ⇒ Object
Records the block’s execution as a child of the current span. If the current scope doesn’t have a span, the block would still be executed but the yield param will be nil.
536 537 538 539 |
# File 'lib/sentry-ruby.rb', line 536 def with_child_span(**attributes, &block) return yield(nil) unless Sentry.initialized? get_current_hub.with_child_span(**attributes, &block) end |
.with_exception_captured(**options, &block) ⇒ Object
Takes a block and evaluates it. If the block raised an exception, it reports the exception to Sentry and re-raises it. If the block ran without exception, it returns the evaluation result.
455 456 457 458 459 460 |
# File 'lib/sentry-ruby.rb', line 455 def with_exception_captured(**, &block) yield rescue Exception => e capture_exception(e, **) raise end |
.with_scope {|scope| ... } ⇒ void
This method returns an undefined value.
Takes a block and yields a temporary scope. The temporary scope will inherit all the attributes from the current active scope and replace it to be the active scope inside the block.
409 410 411 412 |
# File 'lib/sentry-ruby.rb', line 409 def with_scope(&block) return yield unless initialized? get_current_hub.with_scope(&block) end |
.with_session_tracking(&block) ⇒ void
This method returns an undefined value.
Wrap a given block with session tracking. Aggregate sessions in minutely buckets will be recorded around this block and flushed every minute.
429 430 431 432 |
# File 'lib/sentry-ruby.rb', line 429 def with_session_tracking(&block) return yield unless initialized? get_current_hub.with_session_tracking(&block) end |