in source/core-api/lambda_functions/update_session.py [0:0]
def lambda_handler(event, context):
"""
This function is the entry handler for Lambda.
"""
print(event)
body = json.loads(event['body'])
request_id = deep_clean(body['request_id'])
client_event_id = deep_clean(body['event_id'])
status = int(body['status'])
headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
if client_event_id == EVENT_ID and is_valid_rid(request_id):
try:
result = ddb_table.update_item(
UpdateExpression='SET session_status = :status',
ConditionExpression=(Attr('request_id').eq(request_id) and Attr('session_status').eq(0)),
Key={'request_id': request_id},
ExpressionAttributeValues={':status': status}
)
response = {
"statusCode": 200,
"headers": headers,
"body": json.dumps(result)
}
# write to event bus
events_client.put_events(
Entries=[
{
'Source': 'custom.waitingroom',
'DetailType': 'session_updated',
'Detail': json.dumps({"event_id": EVENT_ID,
"request_id": request_id,
"status": status_codes[status]}),
'EventBusName': EVENT_BUS_NAME
}
]
)
# increment counter tracking sessions completed
if status == 1:
rc.incr(COMPLETED_SESSION_COUNTER, 1)
elif status == -1:
rc.incr(ABANDONED_SESSION_COUNTER, 1)
except ClientError as e:
if e.response['Error']['Code'] == 'ConditionalCheckFailedException':
print(e)
response = {
"statusCode": 404,
"headers": headers,
"body": json.dumps({"error": "Request ID doesn't exist or status already set."})
}
else:
raise e
except Exception as e:
print(e)
raise e
else:
response = {
"statusCode": 400,
"headers": headers,
"body": json.dumps({"error": "Invalid event or request ID"})
}
print(response)
return response