diff --git a/app/jobs/subscription_confirm_job.rb b/app/jobs/subscription_confirm_job.rb index 9ed8223d0e..8735bf41ca 100644 --- a/app/jobs/subscription_confirm_job.rb +++ b/app/jobs/subscription_confirm_job.rb @@ -50,6 +50,8 @@ class SubscriptionConfirmJob else send_failed_payment_email(order) end + rescue StandardError => e + Bugsnag.notify(e, order: order) end def process_payment!(order) diff --git a/app/jobs/subscription_placement_job.rb b/app/jobs/subscription_placement_job.rb index 8b5df2b159..9d68dae2ea 100644 --- a/app/jobs/subscription_placement_job.rb +++ b/app/jobs/subscription_placement_job.rb @@ -29,10 +29,16 @@ class SubscriptionPlacementJob def place_order_for(proxy_order) JobLogger.logger.info("Placing Order for Proxy Order #{proxy_order.id}") - proxy_order.initialise_order! + initialise_order(proxy_order) place_order(proxy_order.order) end + def initialise_order(proxy_order) + proxy_order.initialise_order! + rescue StandardError => e + Bugsnag.notify(e, subscription: proxy_order.subscription, proxy_order: proxy_order) + end + def place_order(order) record_order(order) return record_issue(:complete, order) if order.completed? @@ -42,8 +48,9 @@ class SubscriptionPlacementJob move_to_completion(order) send_placement_email(order, changes) - rescue StateMachine::InvalidTransition - record_and_log_error(:processing, order) + rescue StandardError => e + record_and_log_error(:processing, order, e.message) + Bugsnag.notify(e, order: order) end def cap_quantity_and_store_changes(order) diff --git a/engines/order_management/app/services/order_management/subscriptions/summarizer.rb b/engines/order_management/app/services/order_management/subscriptions/summarizer.rb index 8029716338..f591295d1c 100644 --- a/engines/order_management/app/services/order_management/subscriptions/summarizer.rb +++ b/engines/order_management/app/services/order_management/subscriptions/summarizer.rb @@ -22,12 +22,15 @@ module OrderManagement summary_for(order).record_issue(type, order, message) end - def record_and_log_error(type, order) + def record_and_log_error(type, order, error_message = nil) return record_issue(type, order) unless order.errors.any? error = "Subscription#{type.to_s.camelize}Error" line1 = "#{error}: Cannot process order #{order.number} due to errors" - line2 = "Errors: #{order.errors.full_messages.join(', ')}" + + error_message ||= order.errors.full_messages.join(', ') + line2 = "Errors: #{error_message}" + JobLogger.logger.info("#{line1}\n#{line2}") record_issue(type, order, line2) end