def lambda_handler()

in sam/app-decompose-for-parallelism/functions/get_test_results_from_state_machine_output/app.py [0:0]


def lambda_handler(event, context):

    # If this was a failure, then I need to update the event because the response from Step Functions will be in the Cause field
    if 'Cause' in event:
        print("Looks like a failure. Parsing out the info I need from the Cause field.")
        event = json.loads(event['Cause'])
        event['Input'] = json.loads(event['Input'])

    # Intiailize an object to populate for the result
    res = {
        "TestStartTimeEpoch": "",
        "TestEndTimeEpoch": "",
        "TestDurationMs": "",
        "TestStatus": "",
        "StateMachineArn": "",
        "TestName": "",
        "TestFaultMetricValue": 1,
        "TestSuccessMetricValue": 0,
        "test-run-id": "",
        "Iteration": ""
    }

    idx = {
        "StartDate": ["TestStartTimeEpoch",'','str'],
        "StopDate": ["TestEndTimeEpoch",'','str'],
        "Status": ["TestStatus",'','str'],
        "StateMachineArn": ["StateMachineArn",'','str'],
        "Name": ["Iteration",'','str'],
        "test-run-id": ["test-run-id",'unknown','str']
    }

    list_to_process = [event]
    while len(list_to_process) > 0:
        this_item = list_to_process.pop(0)
        if isinstance(this_item,dict):
            for key in this_item:
                #print("Looking at {} in {}".format(key,this_item))
                if key in idx:
                    k_info = idx[key]
                    if res[k_info[0]] == '':
                        val = this_item[key]
                        #print("\t!!!Found key {}".format(key))                      
                        if k_info[2] == 'str':
                            val = str(val)
                        elif k_info[2] == 'int':
                            val = int(val)
                        res[k_info[0]] = val
                elif isinstance(this_item[key],dict):
                    #print("\tValue is a dict, so adding to the list for further processing")
                    list_to_process.append(this_item[key])


    # Update additional properties based on the ones extracted above
    res["TestDurationMs"] = str(int(res["TestEndTimeEpoch"]) - int(res["TestStartTimeEpoch"])  )  
    res["TestName"] = res["StateMachineArn"].split(':')[-1]

    if res["TestStatus"] == "SUCCEEDED":
        res["TestFaultMetricValue"] = 0
        res["TestSuccessMetricValue"] = 1
    else:
        res["TestFaultMetricValue"] = 1
        res["TestSuccessMetricValue"] = 0

    return res