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