import json import logging import os from dataclasses import asdict from typing import Any, Dict from notification_service import const from notification_service.const import STATSD_HOST, STATSD_PORT from notification_service.entities import Config from notification_service.handler import handler import boto3 import datadog from sentry_sdk.integrations.aws_lambda import AwsLambdaIntegration from smelog.entities import LoggerConfig, SentryConfig from smelog.factory import LoggerFactory def lambda_handler(event: Dict, context: Any, is_local: bool = False) -> None: config = Config( environment=os.environ.get('ENVIRONMENT', const.ENV_PROD).lower(), sentry_secret_key=os.environ.get('SENTRY_SECRET_KEY', ''), api_db_sk=os.environ['API_DB_SECRET_KEY'], dtf_queue_name=os.environ['DTF_NOTIFICATION_QUEUE_NAME'], sf_queue_name=os.environ['SF_NOTIFICATION_QUEUE_NAME'], delphi_sns_topic_arn=os.environ['DELPHI_NOTIFICATION_TOPIC_ARN'], rds_secrets_key=os.environ['RDS_SECRETS_KEY'], notification_ttl=int(os.environ['NOTIFICATION_TTL']), sns_thread_count=int(os.environ['SNS_THREAD_COUNT']) ) log_config = LoggerConfig( name=const.APP_NAME, version=const.VERSION, level=logging.DEBUG if config.environment != const.ENV_PROD else logging.INFO, environment=config.environment, is_local=is_local, ) if not is_local and config.sentry_secret_key: secrets_manager = boto3.client('secretsmanager') sentry_dsn = json.loads( secrets_manager.get_secret_value(SecretId=config.sentry_secret_key, )['SecretString'] )[const.APP_NAME] log_config.sentry = SentryConfig( dsn=sentry_dsn, integrations=[AwsLambdaIntegration(timeout_warning=True)] ) datadog.initialize( statsd_host=STATSD_HOST, statsd_port=STATSD_PORT, ) logger = LoggerFactory(log_config).get_logger(const.APP_NAME) logger.bind( request_id=context.aws_request_id, config=asdict(config), trace_id=event.get('trace_id', None) ) logger.debug('[INVOCATION] Lambda running ...') try: handler(logger, config) except Exception as exc: # pylint: disable=broad-except logger.exception('[Notification service failed]', exc=exc)