in lambda/python/rs_integration_function/index.py [0:0]
def finished_data_api_request_record_handler(record: dict):
"""
This will be called for each finished invocation.
It should raise an exception if the message was not processed successfully so we don't catch any exceptions
and if we would we should be able to handle it or re-raise.
Args:
record: Has 'body' as json string of event documented in section ata-api-monitoring-events-finished on
https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-monitoring-events.html
Returns:
None:
"""
try:
logger.debug(record)
finished_event = FinishedEvent.from_record(record)
statement_name = StatementName.from_str(finished_event.get_statement_name())
callback_source = ddb_sfn_state_table.get_callback_source_for_statement_name(statement_name)
if finished_event.has_failed():
# noinspection PyBroadException
try:
statement_description = describe_statement(finished_event.get_statement_id())
error = statement_description["Error"]
finished_event['detail']['error'] = error
except Exception as ex:
logger.warn(f"Could not get error for {finished_event} due to {ex}")
callback_source.send_failure(statement_name, finished_event)
elif finished_event.has_succeeded():
callback_source.send_success(statement_name, finished_event)
else:
raise NotImplementedError(f"Unsupported Data API finished event state {finished_event.get_state()}")
ddb_sfn_state_table.mark_statement_name_as_handled(statement_name, finished_event)
except Exception as e:
logger.fatal({
l_record: record,
l_exception: e,
l_traceback: traceback.format_exc()
})
raise e