"""Connects to AWS SFN""" import boto3 def get_execution_log_by_arn(exec_arn, max_res=50): """Get an aws SFN by sfn name.""" sfn_client = boto3.client('stepfunctions') full_event_list = list() execution_list = sfn_client.get_execution_history( executionArn=exec_arn, maxResults=50, reverseOrder=True, includeExecutionData=True ) next_token = execution_list.get('nextToken') for event in execution_list['events']: full_event_list.append(event) while next_token: execution_list = sfn_client.get_execution_history( executionArn=exec_arn, maxResults=max_res, reverseOrder=True, includeExecutionData=True, nextToken=next_token ) next_token = execution_list.get('nextToken') for event in execution_list['events']: full_event_list.append(event) return full_event_list def get_exec_by_arn(exec_arn): """Get an aws SFN Execution by execution ARN.""" sfn_client = boto3.client('stepfunctions') sfn_exec = sfn_client.describe_execution( executionArn=exec_arn) return sfn_exec def get_sfn_by_name(sfn_name): """Get an aws SFN by sfn name.""" sfn_client = boto3.client('stepfunctions') sfn_list = sfn_client.list_state_machines() next_token = sfn_list.get('nextToken') status = next( (sfn for sfn in sfn_list['stateMachines'] if sfn.get('name') == sfn_name), None ) while not status and next_token: sfn_list = sfn_client.list_state_machines(nextToken=next_token) status = next( (sfn for sfn in sfn_list['stateMachines'] if sfn.get('name') == sfn_name), None ) next_token = sfn_list.get('nextToken') if not status: raise RuntimeError(f'No state machine found for sfn name: {sfn_name}') return status def get_full_execution_count_by_arn(sfn_arn, status='RUNNING'): """Get an aws SFN by sfn name.""" sfn_client = boto3.client('stepfunctions') current_executions = sfn_client.list_executions( stateMachineArn=sfn_arn, statusFilter=status, maxResults=50 ) next_token = current_executions.get('nextToken') current_sfn_count = len(current_executions['executions']) while next_token: current_executions = sfn_client.list_executions( stateMachineArn=sfn_arn, statusFilter=status, maxResults=50, nextToken=next_token ) current_sfn_count = current_sfn_count + len( current_executions['executions']) next_token = current_executions.get('nextToken') return current_sfn_count def get_full_execution_name_list_by_arn(sfn_arn, status='RUNNING'): """Get an aws SFN by sfn name.""" sfn_client = boto3.client('stepfunctions') current_executions = sfn_client.list_executions( stateMachineArn=sfn_arn, statusFilter=status, maxResults=50 ) next_token = current_executions.get('nextToken') name_list = [x['name'] for x in current_executions['executions']] while next_token: current_executions = sfn_client.list_executions( stateMachineArn=sfn_arn, statusFilter=status, maxResults=50, nextToken=next_token ) name_list = name_list + [x['name'] for x in current_executions['executions']] next_token = current_executions.get('nextToken') return name_list