"""Application configuration.""" import logging import os from secrets_manager.python_ext import PythonSecretsManager # Service information SERVICE_NAME = "ows-video" SERVICE_VERSION = "1.0.0" # Production environment PROD_ENVIRONMENT = "prod" DEV_ENVIRONMENT = "dev" QA_ENVIRONMENT = "qa" TEST_ENVIRONMENT = "test" ENVIRONMENT = os.environ.get("Environment") or DEV_ENVIRONMENT sm = PythonSecretsManager(environment=ENVIRONMENT, service_name=SERVICE_NAME) # Errors and loggers LOGGER_LEVEL = logging.INFO LOGGER_NAME = "ows1" # Generic handlers HEALTH_CHECK = "/hello/" # Amazon Web Services # ------------------- AWS_REGION = os.environ.get("AWS_REGION", "us-east-1") VIDEO_BUCKET_NAME = "{}-orcd-video-assets".format(ENVIRONMENT) UPLOAD_RAW_DIR_ROLE_ARN = os.environ.get("UPLOAD_RAW_ROLE_ARN") UPLOAD_RAW_DIR_ROLE_DURATION_SECONDS = int( os.environ.get("UPLOAD_RAW_DIR_ROLE_DURATION_SECONDS") or 3600 ) VIDEO_INGESTION_WORKFLOW_STATE_MACHINE_ARN = os.environ.get( "VIDEO_INGESTION_WORKFLOW_STATE_MACHINE_ARN" ) VIDEO_APPROVAL_WORKFLOW_STATE_MACHINE_ARN = os.environ.get( "VIDEO_APPROVAL_WORKFLOW_STATE_MACHINE_ARN" ) VIDEO_INGESTION_REENCODE_WORKFLOW_STATE_MACHINE_ARN = os.environ.get( "VIDEO_INGESTION_REENCODE_WORKFLOW_STATE_MACHINE_ARN" ) MEDIACONVERT_URL = os.environ.get("MEDIACONVERT_URL") # Database config VIDEO_DB_URL = "mysql+pymysql://{user}:{password}@{host}/{name}?charset=utf8".format( user=os.environ.get("VIDEO_DB_USER"), password=sm.get_cred("ows_video_password"), host=os.environ.get("VIDEO_DB_HOST"), name=os.environ.get("VIDEO_DB_NAME"), ) AR_DB_URL = ( "mysql+pymysql://{user}:{password}@{host}:{port}/{name}?charset={charset}".format( user=os.environ.get("AR_DB_USER"), password=sm.get_cred("ar_db_password"), host=os.environ.get("AR_DB_HOST"), port=os.environ.get("AR_DB_PORT", "3306"), name=os.environ.get("AR_DB_NAME"), charset=os.environ.get("AR_DB_CHARSET", "utf8mb4"), ) ) # https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html#AuroraMySQL.Managing.MaxConnections # TODO - this should be in task configuration, not code if ENVIRONMENT in [QA_ENVIRONMENT, PROD_ENVIRONMENT]: # db.r4.4xlarge MAX_CONNECTIONS = 1000 NUM_INSTANCES_IN_ENV = 2 elif ENVIRONMENT == DEV_ENVIRONMENT: # db.t2.small MAX_CONNECTIONS = 45 NUM_INSTANCES_IN_ENV = 2 else: MAX_CONNECTIONS = 5 NUM_INSTANCES_IN_ENV = 1 SQLALCHEMY_POOL_SIZE = int(MAX_CONNECTIONS / NUM_INSTANCES_IN_ENV) SQLALCHEMY_POOL_RECYCLE_MS = 3600 # Avoids connections going stale SQLALCHEMY_POOL_MAX_OVERFLOW = 0 SQLALCHEMY_POOL_PRE_PING = True SQLALCHEMY_POOL_TIMEOUT = 30 QUERY_RECORD_LIMIT = 1000 RFC3339_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" PAGE_OFFSET_DEFAULT = 0 # EC2 Wowza WOWZA_URL = os.environ.get("WOWZA_URL", "https://qa-aws-wowza.qaorch.com") WOWZA_PATH_PREFIX = os.environ.get("WOWZA_PATH_PREFIX", "vods3") WOWZA_TOKEN_TTL_IN_SECONDS = int(os.environ.get("WOWZA_TOKEN_TTL_IN_SECONDS", 1000)) WOWZA_GRACE_PERIOD = int(os.environ.get("WOWZA_GRACE_PERIOD", 100)) WOWZA_SHARED_SECRET = sm.get_cred("WOWZA_SHARED_SECRET") # CloudFront Setup CLOUDFRONT_PRIVATE_KEY_TEMPLATE = """ -----BEGIN RSA PRIVATE KEY----- {key_data} -----END RSA PRIVATE KEY----- """ CLOUDFRONT_KEY_PAIR_ID = sm.get_cred("CLOUDFRONT_KEY_PAIR_ID") CLOUDFRONT_PRIVATE_KEY = CLOUDFRONT_PRIVATE_KEY_TEMPLATE.format( key_data=sm.get_cred("CLOUDFRONT_PRIVATE_KEY").replace(" ", "\n") ) S3_TOKEN_EXPIRATION_FORMAT = "%Y-%m-%d %H:%M:%S" AUTO_APPROVE_USER_ID = os.environ.get("AUTO_APPROVE_USER_ID", 2204) AUTO_APPROVE_USER = f"oa:{AUTO_APPROVE_USER_ID}"