Add rescue statements to subs jobs so that when an order placement or confirmation fails, there's a bugsnag alert for it and the job continues processing the rest of the orders

This commit is contained in:
Luis Ramos
2020-07-08 18:32:40 +01:00
parent 312e78ba61
commit 5648b2e281
3 changed files with 17 additions and 5 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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