lib/sentry/rails/active_job.rb in sentry-rails-4.2.2 vs lib/sentry/rails/active_job.rb in sentry-rails-4.3.0

- old
+ new

@@ -6,25 +6,33 @@ around_perform do |job, block| if Sentry.initialized? if already_supported_by_specific_integration?(job) block.call else - Sentry.with_scope do - capture_and_reraise_with_sentry(job, block) + Sentry.with_scope do |scope| + capture_and_reraise_with_sentry(job, scope, block) end end else block.call end end end end - def capture_and_reraise_with_sentry(job, block) + def capture_and_reraise_with_sentry(job, scope, block) + scope.set_transaction_name(job.class.name) + transaction = Sentry.start_transaction(name: scope.transaction_name, op: "active_job") + + scope.set_span(transaction) if transaction + block.call + + finish_transaction(transaction, 200) rescue Exception => e # rubocop:disable Lint/RescueException rescue_handler_result = rescue_with_handler(e) + finish_transaction(transaction, 500) return rescue_handler_result if rescue_handler_result Sentry::Rails.capture_exception( e, extra: sentry_context(job), @@ -32,9 +40,16 @@ job_id: job.job_id, provider_job_id: job.provider_job_id } ) raise e + end + + def finish_transaction(transaction, status) + return unless transaction + + transaction.set_http_status(status) + transaction.finish end def already_supported_by_specific_integration?(job) Sentry.configuration.rails.skippable_job_adapters.include?(job.class.queue_adapter.class.to_s) end