"""Service configs.""" from datetime import datetime, timedelta import os import boto3 ENVIRONMENT = os.environ.get('ENVIRONMENT', 'prod').lower() IS_LOCAL = bool(os.environ.get("LOCAL", "") or os.environ.get("DEBUG", "")) if IS_LOCAL: AUTH0_DOMAIN = os.environ['AUTH0_DOMAIN'] AUTH0_CLIENT_ID = os.environ['AUTH0_CLIENT_ID'] AUTH0_CLIENT_SECRET = os.environ['AUTH0_CLIENT_SECRET'] REDIS_HOST = os.environ['REDIS_HOST'] REDIS_PORT = int(os.environ.get('REDIS_PORT', 6379)) SENTRY_DSN = os.environ['SENTRY_DSN'] else: sm_client = boto3.client('secretsmanager') AUTH0_DOMAIN = sm_client.get_secret_value(SecretId=os.environ['AUTH0_DOMAIN'])['SecretString'] AUTH0_CLIENT_ID = sm_client.get_secret_value(SecretId=os.environ['AUTH0_CLIENT_ID'])['SecretString'] AUTH0_CLIENT_SECRET = sm_client.get_secret_value(SecretId=os.environ['AUTH0_CLIENT_SECRET'])['SecretString'] REDIS_HOST = sm_client.get_secret_value(SecretId=os.environ['REDIS_HOST'])['SecretString'] REDIS_PORT = 6379 if 'REDIS_PORT' not in os.environ \ else int(sm_client.get_secret_value(SecretId=os.environ['REDIS_PORT'])['SecretString']) SENTRY_DSN = sm_client.get_secret_value(SecretId=os.environ['SENTRY_DSN'])['SecretString'] AWS_DEFAULT_REGION = os.environ.get('AWS_DEFAULT_REGION', 'us-east-1') AWS_S3_BUCKET_LOG_ID = os.environ['AWS_S3_BUCKET_LOG_ID'] AWS_LOG_GROUP_AUTHENTICATION_API = os.environ['AWS_LOG_GROUP_AUTHENTICATION_API'] AWS_LOG_GROUP_MANAGEMENT_API = os.environ['AWS_LOG_GROUP_MANAGEMENT_API'] # must be less than 24 hours AWS_LOG_MAX_HOURS_INTERVAL = int(os.environ.get('AWS_LOG_MAX_HOURS_INTERVAL', 24)) # must be less than 1000 AWS_LOG_BATCH_MAX_COUNT = int(os.environ.get('AWS_LOG_BATCH_MAX_COUNT', 1000)) # all events size must be less than 1,048,576 bytes AWS_LOG_BATCH_MAX_SIZE_BYTES = int(os.environ.get('AWS_LOG_BATCH_MAX_SIZE', 1048576)) # single event max size AWS_LOG_EVENT_MAX_SIZE_BYTES = int(os.environ.get('AWS_LOG_EVENT_MAX_SIZE_BYTES', 262144)) # too big events trim size AWS_LOG_EVENT_TRIM_SIZE = int(os.environ.get('AWS_LOG_EVENT_TRIM_SIZE', 50000)) LOG_SEARCH_COUNT = int(os.environ.get('LOG_SEARCH_COUNT', 2)) # must be less than 1000 LOG_EVENTS_COUNT_PER_SEARCH = int(os.environ.get('LOG_EVENTS_COUNT_PER_SEARCH', 1000)) # must be less than 100 LOG_EVENTS_COUNT_PER_PAGE = int(os.environ.get('LOG_EVENTS_COUNT_PER_PAGE', 100)) # aws cloudwatch logs not allow records older 14 days, it matters only for the first run and in case of errors LOG_MIN_DATE = os.environ.get('LOG_MIN_DATE', (datetime.utcnow() - timedelta(days=10)).strftime("%Y-%m-%dT%H:%M:%SZ")) LOG_FIELDS = os.environ.get('LOG_FIELDS') LOG_INCLUDE_FIELDS = bool(os.environ.get('LOG_INCLUDE_FIELDS')) LOG_SORT_ORDER = os.environ.get('LOG_SORT_ORDER', 'log_id:1') # to apply additional filter for log records that should be processed LOG_EVENTS_FILTER_CONDITION = os.environ.get('LOG_EVENTS_FILTER_CONDITION', '') # max lambda iteration time, after that it stops getting new events, should be lower than lambda execution timeout MAX_EXECUTION_TIME_SECONDS = int(os.environ.get('MAX_EXECUTION_TIME_SECONDS', 240)) MANAGEMENT_API_LOG_EVENT_TYPES = os.environ.get('MANAGEMENT_API_LOG_EVENT_TYPES', 'sapi').split(',') RATE_LIMIT_RETRY_COUNT = int(os.environ.get('RATE_LIMIT_RETRY_COUNT', 5)) RATE_LIMIT_WATE_MULTIPLIER = int(os.environ.get('RATE_LIMIT_RETRY_COUNT', 2))