"""Throttler Lambda throttler module.""" from datetime import datetime import json import boto3 from vector_utils import queries from vector_utils.datadog.metrics import call_datadog_with_metric from logger import app_logger import config def handler(event, context): """Entrypoint to Lambda function. Args: event (optional): AWS Lambda event dependent structure with metadata. context (LambdaContext): AWS Lambda context. """ start_time = datetime.now() app_logger.info('Running "{}"'.format(config.SCRIPT_NAME)) lambda_client = boto3.client('lambda', region_name='us-east-1') dms_ids = get_dms_ids() for row in dms_ids: dms_id = row['dms_master_master_id'] if int(dms_id) in config.EXCLUDED_DMS_LIST: app_logger.info('excluded dms_id "{}"'.format(dms_id)) continue invoke = any([ x['count_ready_to_deliver'] > 0 for x in row['order_types'] ]) if invoke: app_logger.info('invoking dms_id "{}"'.format(dms_id)) payload = json.dumps({'dms_id': int(dms_id)}) lambda_client.invoke( FunctionName='{}-lambda-vector-throttler'.format(config.ENVIRONMENT), InvocationType='Event', LogType='None', Payload=payload.encode() ) app_logger.info('Finished "{}"'.format(config.SCRIPT_NAME)) end_time = datetime.now() duration_in_seconds = (end_time - start_time).seconds dd_tags = [f'environment:{config.ENVIRONMENT}'] call_datadog_with_metric( 'throttler_manager.duration', dd_tags, api_key=config.DATADOG_API_KEY, app_key=config.DATADOG_APP_KEY, value=duration_in_seconds ) call_datadog_with_metric( 'throttler_manager.run', dd_tags, api_key=config.DATADOG_API_KEY, app_key=config.DATADOG_APP_KEY ) def get_dms_ids(): """Get dms ids as a list. Returns: list """ return queries.get_active_delivery_stores( conn_info=config.DD_MYSQL_CONN_INFO) if __name__ == '__main__': handler(None, None)