From d39b46c6c27e81498054fd8f544b4d616e830c81 Mon Sep 17 00:00:00 2001 From: Ryan Chard Date: Sat, 30 Apr 2022 10:19:56 +1200 Subject: [PATCH] Add error checking around dynamo update --- aws/action-status.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/aws/action-status.py b/aws/action-status.py index b980e91..e3c0bba 100644 --- a/aws/action-status.py +++ b/aws/action-status.py @@ -1,3 +1,4 @@ +import sys import json import boto3 import decimal @@ -49,10 +50,12 @@ def lambda_handler(event, context): task_results = json.loads(action_record['tasks']) # Find the taskIDs where the results are not yet in - running_tasks = list(filter(lambda task_id: bool(task_id), - [key if not task_results[key][ - 'completed'] else False - for key in task_results.keys()])) + running_tasks = None + if task_results: + running_tasks = list(filter(lambda task_id: bool(task_id), + [key if not task_results[key][ + 'completed'] else False + for key in task_results.keys()])) status = "SUCCEEDED" display_status = "Function Results Received" @@ -76,22 +79,29 @@ def lambda_handler(event, context): task_results[task]['result'] = result task_results[task]['completed'] = completed - update_response = table.update_item( - Key={ - 'action-id': action_id - }, - UpdateExpression="set tasks=:t", - ExpressionAttributeValues={ - ':t': json.dumps(task_results, cls=DecimalEncoder) - }, - ReturnValues="UPDATED_NEW" - ) + try: + update_response = table.update_item( + Key={ + 'action-id': action_id + }, + UpdateExpression="set tasks=:t", + ExpressionAttributeValues={ + ':t': json.dumps(task_results, cls=DecimalEncoder) + }, + ReturnValues="UPDATED_NEW" + ) + except Exception as eek: + print("Failed to update dynamodb: ", eek) + status = "FAILED" + display_status = "Function Failed" + failure = "Failed to record function result: " + str(eek) print("updated_response", update_response) if failure: print("FAILED ", failure) status = "FAILED" display_status = "Function Failed" + details = failure else: status = "ACTIVE" display_status = "Function Active"