You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.7 KiB
Python
107 lines
3.7 KiB
Python
import base64
|
|
import logging
|
|
import os
|
|
from typing import List
|
|
from urllib import parse
|
|
|
|
from pydantic import BaseModel
|
|
from starlette.config import Config
|
|
from starlette.datastructures import CommaSeparatedStrings
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class BaseConfigurationModel(BaseModel):
|
|
"""Base configuration model used by all config options."""
|
|
|
|
pass
|
|
|
|
|
|
def get_env_tags(tag_list: List[str]) -> dict:
|
|
"""Create dictionary of available env tags."""
|
|
tags = {}
|
|
for t in tag_list:
|
|
tag_key, env_key = t.split(":")
|
|
|
|
env_value = os.environ.get(env_key)
|
|
|
|
if env_value:
|
|
tags.update({tag_key: env_value})
|
|
|
|
return tags
|
|
|
|
|
|
def get_config():
|
|
try:
|
|
# Try to load from .env file first
|
|
config = Config(".env")
|
|
except FileNotFoundError:
|
|
# If .env doesn't exist, use environment variables
|
|
config = Config(environ=os.environ)
|
|
|
|
return config
|
|
|
|
|
|
config = get_config()
|
|
|
|
|
|
LOG_LEVEL = config("LOG_LEVEL", default="INFO")
|
|
ENV = config("ENV", default="local")
|
|
PORT = config("PORT", cast=int, default=8000)
|
|
HOST = config("HOST", default="localhost")
|
|
|
|
|
|
# database
|
|
DATABASE_HOSTNAME = config("DATABASE_HOSTNAME")
|
|
_DATABASE_CREDENTIAL_USER = config("DATABASE_CREDENTIAL_USER")
|
|
_DATABASE_CREDENTIAL_PASSWORD = config("DATABASE_CREDENTIAL_PASSWORD")
|
|
_QUOTED_DATABASE_PASSWORD = parse.quote(str(_DATABASE_CREDENTIAL_PASSWORD))
|
|
DATABASE_NAME = config("DATABASE_NAME", default="digital_twin")
|
|
DATABASE_PORT = config("DATABASE_PORT", default="5432")
|
|
|
|
DATABASE_ENGINE_POOL_SIZE = config("DATABASE_ENGINE_POOL_SIZE", cast=int, default=20)
|
|
DATABASE_ENGINE_MAX_OVERFLOW = config(
|
|
"DATABASE_ENGINE_MAX_OVERFLOW", cast=int, default=0
|
|
)
|
|
|
|
COLLECTOR_HOSTNAME = config("COLLECTOR_HOSTNAME")
|
|
COLLECTOR_PORT = config("COLLECTOR_PORT", default="5432")
|
|
COLLECTOR_CREDENTIAL_USER = config("COLLECTOR_CREDENTIAL_USER")
|
|
COLLECTOR_CREDENTIAL_PASSWORD = config("COLLECTOR_CREDENTIAL_PASSWORD")
|
|
QUOTED_COLLECTOR_CREDENTIAL_PASSWORD = parse.quote(str(COLLECTOR_CREDENTIAL_PASSWORD))
|
|
COLLECTOR_NAME = config("COLLECTOR_NAME")
|
|
|
|
|
|
|
|
# Deal with DB disconnects
|
|
# https://docs.sqlalchemy.org/en/20/core/pooling.html#pool-disconnects
|
|
DATABASE_ENGINE_POOL_PING = config("DATABASE_ENGINE_POOL_PING", default=False)
|
|
SQLALCHEMY_DATABASE_URI = f"postgresql+asyncpg://{_DATABASE_CREDENTIAL_USER}:{_QUOTED_DATABASE_PASSWORD}@{DATABASE_HOSTNAME}:{DATABASE_PORT}/{DATABASE_NAME}"
|
|
SQLALCHEMY_COLLECTOR_URI = f"postgresql+asyncpg://{COLLECTOR_CREDENTIAL_USER}:{QUOTED_COLLECTOR_CREDENTIAL_PASSWORD}@{COLLECTOR_HOSTNAME}:{COLLECTOR_PORT}/{COLLECTOR_NAME}"
|
|
|
|
|
|
TIMEZONE = "Asia/Jakarta"
|
|
|
|
MAXIMO_BASE_URL = config("MAXIMO_BASE_URL", default="http://example.com")
|
|
MAXIMO_API_KEY = config("MAXIMO_API_KEY", default="keys")
|
|
|
|
AUTH_SERVICE_API = config("AUTH_SERVICE_API", default="http://192.168.1.82:8000/auth")
|
|
AEROS_BASE_URL = config("AEROS_BASE_URL", default="http://192.168.1.102")
|
|
AEROS_BASE_URL_OLD = config("AEROS_BASE_URL_OLD", default="http://192.168.1.87")
|
|
|
|
WINDOWS_AEROS_BASE_URL = config("WINDOWS_AEROS_BASE_URL", default="http://192.168.1.102:8800")
|
|
|
|
DEFAULT_PROJECT_NAME = config("DEFAULT_PROJECT_NAME", default="RBD TJB")
|
|
TEMPORAL_URL = config("TEMPORAL_URL", default="http://192.168.1.86:7233")
|
|
RELIABILITY_SERVICE_API = config("RELIABILITY_SERVICE_API", default="http://192.168.1.82:8000/reliability")
|
|
|
|
CLAMAV_HOST = config("CLAMAV_HOST", default="192.168.1.82")
|
|
CLAMAV_PORT = config("CLAMAV_PORT", cast=int, default=3310)
|
|
|
|
AEROS_LICENSE_ID = config("AEROS_LICENSE_ID", default=None)
|
|
AEROS_LICENSE_SECRET = config("AEROS_LICENSE_SECRET", default=None)
|
|
|
|
VAULT_URL=config('VAULT_URL', default=None)
|
|
ROLE_ID=config('ROLE_ID', default=None)
|
|
SECRET_ID=config('SECRET_ID', default=None)
|
|
AEROS_SECRET_PATH=config('AEROS_SECRET_PATH', default=None) |