Sha256: 60175b265c4be874d15655d7720534c750b3c26621466d8d1d41fdcc1a1c6961
Contents?: true
Size: 1.3 KB
Versions: 2
Compression:
Stored size: 1.3 KB
Contents
module Sentry module Rack class CaptureExceptions def initialize(app) @app = app end def call(env) return @app.call(env) unless Sentry.initialized? # make sure the current thread has a clean hub Sentry.clone_hub_to_current_thread Sentry.with_scope do |scope| scope.clear_breadcrumbs scope.set_transaction_name(env["PATH_INFO"]) if env["PATH_INFO"] scope.set_rack_env(env) span = Sentry.start_transaction(name: scope.transaction_name, op: "rack.request") scope.set_span(span) begin response = @app.call(env) rescue Sentry::Error finish_span(span, 500) raise # Don't capture Sentry errors rescue Exception => e Sentry.capture_exception(e) finish_span(span, 500) raise end exception = collect_exception(env) Sentry.capture_exception(exception) if exception finish_span(span, response[0]) response end end private def collect_exception(env) env['rack.exception'] || env['sinatra.error'] end def finish_span(span, status_code) span.set_http_status(status_code) span.finish end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sentry-ruby-4.1.1 | lib/sentry/rack/capture_exceptions.rb |
sentry-ruby-4.1.0 | lib/sentry/rack/capture_exceptions.rb |