From aaf7b81e7669f1a61bb2b01d443adc42d321888d Mon Sep 17 00:00:00 2001 From: atlurie <atlurie@uab.edu> Date: Thu, 19 May 2022 11:34:36 -0500 Subject: [PATCH] Add exception handling to acctmr workflow agent --- prod_rmq_agents/acct_mgmt_workflow.py | 105 ++++++++++++++------------ 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/prod_rmq_agents/acct_mgmt_workflow.py b/prod_rmq_agents/acct_mgmt_workflow.py index 0907fa0..73fa4ee 100755 --- a/prod_rmq_agents/acct_mgmt_workflow.py +++ b/prod_rmq_agents/acct_mgmt_workflow.py @@ -25,64 +25,69 @@ def manage_acct(ch, method, properties, body): service = msg["service"] queuename = msg["queuename"] - if username in tracking: - current = tracking[username] - else: - current = tracking[username] = {} - - if op == 'request': - if state == 'hold' or state == 'certification': - msg["action"] = "lock" - elif state == 'ok': - msg["action"] = "unlock" + try: + if username in tracking: + current = tracking[username] else: - print("Invalid state provided. Check the help menu.") - - if service == 'all': - current["new_jobs"] = None - current["expire_account"] = None - # send a broadcast message to all agents - rc_rmq.publish_msg( - { - "routing_key": f"{msg['action']}.{queuename}", - "msg": msg, - } - ) - else: - for each_service in service: - current[each_service] = None + current = tracking[username] = {} + + if op == 'request': + if state == 'blocked' or state == 'certification': + msg["action"] = "lock" + elif state == 'ok': + msg["action"] = "unlock" + else: + print("Invalid state provided. Check the help menu.") + + if service == 'all': + current["new_jobs"] = None + current["expire_account"] = None + # send a broadcast message to all agents rc_rmq.publish_msg( { - "routing_key": f"{each_service}.{queuename}", - "msg": msg + "routing_key": f"{msg['action']}.{queuename}", + "msg": msg, } ) + else: + for each_service in service: + current[each_service] = None + rc_rmq.publish_msg( + { + "routing_key": f"{each_service}.{queuename}", + "msg": msg + } + ) + + + elif op == 'done': + # Check if each task/agent returned success + current[msg["task"]] = msg["success"] + + done = True + + for task in current.keys(): + if current[task] is None: + done = False + + if done: + rc_util.update_state( + username, state, msg.get("updated_by"), msg.get("host") + ) + # Send done msg to account_manager.py + rc_rmq.publish_msg( + { + "routing_key": f'certified.{queuename}', + "msg": msg, + } + ) - elif op == 'done': - # Check if each task/agent returned success - current[msg["task"]] = msg["success"] - - done = True - - for task in current.keys(): - if current[task] is None: - done = False - - if done: - rc_util.update_state( - username, state, msg.get("updated_by"), msg.get("host") - ) - - # Send done msg to account_manager.py - rc_rmq.publish_msg( - { - "routing_key": f'certified.{queuename}', - "msg": msg, - } - ) + ch.basic_ack(delivery_tag=method.delivery_tag) - ch.basic_ack(delivery_tag=method.delivery_tag) + except Exception: + msg["errmsg"] = "Exception raised in account manager workflow agent , check the logs for stack trace" + logger.error("", exc_info=True) rc_rmq.bind_queue(queue=task, routing_key='acctmgr.request.*', durable=True) rc_rmq.bind_queue(queue=task, routing_key='acctmgr.done.*', durable=True) -- GitLab