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