"""SoS flow specific config.""" import math import os from analytics_aggregation.base_config import environment # Redshift queries schema config DATABASE_SOURCE_SCHEMA = os.environ.get('DATABASE_SOURCE_SCHEMA') DATABASE_DESTINATION_SCHEMA = os.environ.get('DATABASE_DESTINATION_SCHEMA') # S3 config _S3_BUCKET_NAME = os.environ.get('S3_BUCKET', 'source-of-streams') S3_BUCKET = '{env}-{s3_bucket}'.format( env=environment, s3_bucket=_S3_BUCKET_NAME) S3_ROOT_PREFIX = os.environ.get('S3_ROOT_PREFIX') S3_ROOT = 's3://{s3_bucket}/{root_prefix}'.format( s3_bucket=S3_BUCKET, root_prefix=S3_ROOT_PREFIX) S3_UNLOAD_ROOT = '{s3_root}/streams_data'.format(s3_root=S3_ROOT) S3_UNLOAD_PATH_TEMPLATE = ( '{s3_unload_root}/{{query_type}}/{{query_type}}'.format( s3_unload_root=S3_UNLOAD_ROOT)) S3_SPLIT_DATA_DIRECTORY_NAME = 'split_data' S3_SPLIT_DATA_PATH = '{s3_root}/{dir_name}'.format( s3_root=S3_ROOT, dir_name=S3_SPLIT_DATA_DIRECTORY_NAME) S3_DYNAMODB_READY_DATA_DIRECTORY_NAME = 'dynamodb_ready' S3_DYNAMODB_READY_DATA_PATH = ( '{s3_root}/{dir_name}'.format( s3_root=S3_ROOT, dir_name=S3_DYNAMODB_READY_DATA_DIRECTORY_NAME)) # DynamoDB tables config STREAMS_VENDOR_TOTALS_WRITE_THROUGHPUT = ( int(os.environ.get('STREAMS_VENDOR_TOTALS_WRITE_THROUGHPUT') or 200)) STREAMS_VENDOR_TOTALS_READ_THROUGHPUT = ( int(os.environ.get('STREAMS_VENDOR_TOTALS_READ_THROUGHPUT') or 1000)) STREAMS_TRACK_TOTALS_WRITE_THROUGHPUT = ( int(os.environ.get('STREAMS_TRACK_TOTALS_WRITE_THROUGHPUT') or 17500)) STREAMS_TRACK_TOTALS_READ_THROUGHPUT = ( int(os.environ.get('STREAMS_TRACK_TOTALS_READ_THROUGHPUT') or 1000)) STREAMS_VENDOR_PLACEMENTS_WRITE_THROUGHPUT = ( int(os.environ.get('STREAMS_VENDOR_PLACEMENTS_WRITE_THROUGHPUT') or 7500)) STREAMS_VENDOR_PLACEMENTS_READ_THROUGHPUT = ( int(os.environ.get('STREAMS_VENDOR_PLACEMENTS_READ_THROUGHPUT') or 1000)) STREAMS_TRACK_PLACEMENTS_WRITE_THROUGHPUT = ( int(os.environ.get('STREAMS_TRACK_PLACEMENTS_WRITE_THROUGHPUT') or 8000)) STREAMS_TRACK_PLACEMENTS_READ_THROUGHPUT = ( int(os.environ.get('STREAMS_TRACK_PLACEMENTS_READ_THROUGHPUT') or 1000)) # Write capacity units per second for each data type STREAMS_VENDOR_TOTALS_WCU_PS = int( os.environ.get('STREAMS_VENDOR_TOTALS_WCU_PS') or 170) STREAMS_TRACK_TOTALS_WCU_PS = int( os.environ.get('STREAMS_TRACK_TOTALS_WCU_PS') or 100) STREAMS_VENDOR_PLACEMENTS_WCU_PS = int( os.environ.get('STREAMS_VENDOR_PLACEMENTS_WCU_PS') or 100) STREAMS_TRACK_PLACEMENTS_WCU_PS = int( os.environ.get('STREAMS_TRACK_PLACEMENTS_WCU_PS') or 110) # params for granular data copy for each SoS data type # `type` is used in S3 paths # `max_processed_files` - max amount of files for simultaneous ingestion _GRANULAR_COPY_TOTALS_PARAMS = [ { 'type': 'streams_vendor_totals', 'max_processed_files': math.floor( STREAMS_VENDOR_TOTALS_WRITE_THROUGHPUT / STREAMS_VENDOR_TOTALS_WCU_PS) }, { 'type': 'streams_track_totals', 'max_processed_files': math.floor( STREAMS_TRACK_TOTALS_WRITE_THROUGHPUT / STREAMS_TRACK_TOTALS_WCU_PS) }, ] _GRANULAR_COPY_PLACEMENTS_PARAMS = [ { 'type': 'streams_vendor_placements', 'max_processed_files': math.floor( STREAMS_VENDOR_PLACEMENTS_WRITE_THROUGHPUT / STREAMS_VENDOR_PLACEMENTS_WCU_PS) }, { 'type': 'streams_track_placements', 'max_processed_files': math.floor( STREAMS_TRACK_PLACEMENTS_WRITE_THROUGHPUT / STREAMS_TRACK_PLACEMENTS_WCU_PS) }, ] # Granular copy on S3 config _GRANULAR_COPY_SOURCE_PREFIX = ( '{S3_ROOT_PREFIX}/{S3_SPLIT_DATA_DIRECTORY_NAME}'.format( S3_ROOT_PREFIX=S3_ROOT_PREFIX, S3_SPLIT_DATA_DIRECTORY_NAME=S3_SPLIT_DATA_DIRECTORY_NAME)) _GRANULAR_COPY_TARGET_PREFIX = ( '{S3_ROOT_PREFIX}/{S3_DYNAMODB_READY_DATA_DIRECTORY_NAME}'.format( S3_ROOT_PREFIX=S3_ROOT_PREFIX, S3_DYNAMODB_READY_DATA_DIRECTORY_NAME=( S3_DYNAMODB_READY_DATA_DIRECTORY_NAME))) GRANULAR_COPY_TOTALS_PARAMS = [ { 'source_folder': { 'bucket': S3_BUCKET, 'prefix': '{prefix}/{query_type}'.format( prefix=_GRANULAR_COPY_SOURCE_PREFIX, query_type=params['type']), }, 'target_folder': { 'bucket': S3_BUCKET, 'prefix': '{prefix}/{query_type}'.format( prefix=_GRANULAR_COPY_TARGET_PREFIX, query_type=params['type']), }, 'max_processed_files': params['max_processed_files'] } for params in _GRANULAR_COPY_TOTALS_PARAMS ] GRANULAR_COPY_PARAMS = [ { 'source_folder': { 'bucket': S3_BUCKET, 'prefix': '{prefix}/{query_type}'.format( prefix=_GRANULAR_COPY_SOURCE_PREFIX, query_type=params['type']), }, 'target_folder': { 'bucket': S3_BUCKET, 'prefix': '{prefix}/{query_type}'.format( prefix=_GRANULAR_COPY_TARGET_PREFIX, query_type=params['type']), }, 'max_processed_files': params['max_processed_files'] } for params in ( _GRANULAR_COPY_TOTALS_PARAMS + _GRANULAR_COPY_PLACEMENTS_PARAMS) ]