def handle_order_completion(self, order_uuid=None, retry_interval=10, completion_count=1):
"""
Check to see if the order associated with the given UUID has completed and, if it has, handle the completion
of the order.
:param order_uuid: The UUID of the order to check on.
:param retry_interval: The time (in seconds) between checking on whether or not the referenced
order has completed.
:param completion_count: The number of outstanding tasks associated with an order that should indicate
that the order has finished.
:return: None
"""
logger.info(
"Now checking to see if order %s has completed."
% (order_uuid,)
)
order_uuid_value = int(self.redis_helper.get(order_uuid))
if order_uuid_value == completion_count:
logger.info(
"Order %s has completed!"
% (order_uuid,)
)
scan_config = self.scan_config
task_sigs = []
if scan_config.completion_email_org_users:
org = self.order.organization
task_sigs.append(email_org_users_for_order_completion.si(
order_uuid=order_uuid,
org_uuid=org.uuid,
org_name=org.name,
))
elif scan_config.completion_email_order_user:
org = self.order.organization
task_sigs.append(email_order_user_for_order_completion.si(
order_uuid=order_uuid,
org_uuid=org.uuid,
org_name=org.name,
))
if scan_config.completion_web_hook_url:
task_sigs.append(request_web_hook_for_order_completion.si(order_uuid=order_uuid))
if len(task_sigs) > 0:
canvas_sig = group(task_sigs)
logger.info(
"Now kicking off %s tasks to handle the completion of order %s."
% (len(task_sigs), order_uuid)
)
self.finish_after(signature=canvas_sig)
else:
logger.info(
"No tasks to run in response to completion of order %s."
% (order_uuid,)
)
else:
logger.info(
"Order %s has not completed yet (%s tasks currently outstanding)."
% (order_uuid, order_uuid_value,)
)
raise self.retry(countdown=retry_interval)
#USED
评论列表
文章目录