"""Docstring.""" import os import boto3 import neo4j client = boto3.client('sns') neo4j_url = os.getenv('NEO4J_URL') neo4j_username = os.getenv('NEO4J_USERNAME') neo4j_password = os.getenv('NEO4J_PASSWORD') neo4j_driver = neo4j.GraphDatabase.driver( neo4j_url, auth=( neo4j_username, neo4j_password ), max_retry_time=30 ) application_arns = [ 'arn:aws:sns:us-east-1:437795906767:app/APNS/PROD_Orchard_Go', 'arn:aws:sns:us-east-1:437795906767:app/GCM/PROD_Orchard_Go_FCM' ] platform_types = [ 'ios', 'android' ] def main(): try: neo4j_list = [] for platform_type in platform_types: neo4j_list += get_neo4j_arns(platform_type) aws_list = [] for application_arn in application_arns: aws_list += get_aws_arns(application_arn) print(f'Found {len(neo4j_list)} endpoints arns in neo4j') print(f'Found {len(aws_list)} endpoint arns in aws') print('') print('In neo4j but not aws...') for arn in sorted(list(set(neo4j_list) - set(aws_list))): print(arn) print('') print('In aws but not neo4j...') for arn in sorted(list(set(aws_list) - set(neo4j_list))): print(arn) except Exception as e: raise e finally: neo4j_driver.close() # or else neo4j spews useless errors out def get_neo4j_arns(platform_type, batch_size=50): start = 0 results = [] while True: session = neo4j_driver.session(access_mode='READ') query = ''' MATCH(i:Identity)-[:HAS_DEVICE]-(d:Device) WHERE d.platformType = $platform_type RETURN d.endpointArn SKIP $start LIMIT $batch_size ''' query_results = session.run( query, platform_type=platform_type, start=start, batch_size=batch_size ) query_results = [x['d.endpointArn'] for x in query_results] if not query_results: return results results += query_results start += batch_size def get_aws_arns(application_arn, next_token=None, previous_arns=[]): result = None if not next_token: result = client.list_endpoints_by_platform_application( PlatformApplicationArn=application_arn ) else: result = client.list_endpoints_by_platform_application( PlatformApplicationArn=application_arn, NextToken=next_token ) next_token = result.get('NextToken', None) arns = [x['EndpointArn'] for x in result['Endpoints']] + previous_arns if not next_token: return arns return get_aws_arns(application_arn, next_token, arns) if __name__ == '__main__': main()