chore: PRWLR-4055 Update project structure and add env vars (#12)

* chore: PRWLR-4055 update project structure and add env vars

* chore: PRWLR-4055 make production settings default

* chore: PRWLR-4055 change default values to env variables

* chore: PRWLR-4055 apply requested changes on default values

* chore: PRWLR-4055 adapt testing environment
This commit is contained in:
Víctor Fernández Poyatos authored and GitHub committed 2024-07-16 09:33:56 -04:00
1 parent 9df759da60
commit 8f41b38bbf
21 files changed
+162 -94

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
import logging
import time
from backend.custom_logging import BackendLogger
from config.custom_logging import BackendLogger
class APILoggingMiddleware:
File renamed without changes.
@@ -11,6 +11,6 @@ import os
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.django.production")
application = get_asgi_application()
@@ -4,6 +4,8 @@ from enum import StrEnum
from django_guid.log_filters import CorrelationId
from config.env import env
class BackendLogger(StrEnum):
GUNICORN = "gunicorn"
@@ -115,6 +117,9 @@ class TransactionIdFilter(CorrelationId):
# Logging settings
LEVEL = env("DJANGO_LOGGING_LEVEL", default="INFO")
FORMATTER = env("DJANGO_LOGGING_FORMATTER", default="ndjson")
LOGGING = {
"version": 1,
"disable_existing_loggers": True,
@@ -128,70 +133,49 @@ LOGGING = {
"()": HumanReadableFormatter,
"datefmt": "%Y-%m-%d %H:%M:%S",
},
"django": {
"format": "{asctime} [{name}] {levelname}: ({module}) {message}",
"style": "{",
},
"api": {
"format": '{asctime} [{name}] {levelname}: "{method} {path}" with parameters {query_params} done in '
"{duration}s: {status_code}",
"style": "{",
},
"db": {
"format": "{asctime} [{name}] {levelname}: {message}",
"style": "{",
},
"security": {
"format": "{asctime} [{name}] {levelname}: {message}",
"style": "{",
},
"tasks": {
"format": "{asctime} [{name}] {levelname}: {message}",
"style": "{",
},
},
"handlers": {
"gunicorn_console": {
"level": "INFO",
"level": LEVEL,
"class": "logging.StreamHandler",
"formatter": "human_readable",
"formatter": FORMATTER,
"filters": ["transaction_id"],
},
"django_console": {
"level": "INFO",
"level": LEVEL,
"class": "logging.StreamHandler",
"formatter": "human_readable",
"formatter": FORMATTER,
"filters": ["transaction_id"],
},
"api_console": {
"level": "INFO",
"level": LEVEL,
"class": "logging.StreamHandler",
"formatter": "human_readable",
"formatter": FORMATTER,
"filters": ["transaction_id"],
},
"db_console": {
"level": "DEBUG",
"level": f"{'DEBUG' if LEVEL == 'DEBUG' else 'INFO'}",
"class": "logging.StreamHandler",
"formatter": "human_readable",
"formatter": FORMATTER,
"filters": ["transaction_id"],
},
"security_console": {
"level": "INFO",
"level": LEVEL,
"class": "logging.StreamHandler",
"formatter": "human_readable",
"formatter": FORMATTER,
"filters": ["transaction_id"],
},
"tasks_console": {
"level": "INFO",
"level": LEVEL,
"class": "logging.StreamHandler",
"formatter": "human_readable",
"formatter": FORMATTER,
"filters": ["transaction_id"],
},
},
"loggers": {
BackendLogger.GUNICORN: {
"handlers": ["gunicorn_console"],
"level": "INFO",
"level": LEVEL,
"propagate": False,
},
BackendLogger.GUNICORN_ACCESS: {
@@ -201,7 +185,7 @@ LOGGING = {
},
BackendLogger.GUNICORN_ERROR: {
"handlers": ["gunicorn_console"],
"level": "INFO",
"level": LEVEL,
"propagate": False,
},
BackendLogger.DJANGO: {
@@ -211,22 +195,22 @@ LOGGING = {
},
BackendLogger.DB: {
"handlers": ["db_console"],
"level": "INFO",
"level": LEVEL,
"propagate": False,
},
BackendLogger.SECURITY: {
"handlers": ["security_console"],
"level": "INFO",
"level": LEVEL,
"propagate": False,
},
BackendLogger.API: {
"handlers": ["api_console"],
"level": "INFO",
"level": LEVEL,
"propagate": False,
},
BackendLogger.TASKS: {
"handlers": ["tasks_console"],
"level": "INFO",
"level": LEVEL,
"propagate": False,
},
},
Whitespace-only changes.
@@ -1,21 +1,10 @@
from pathlib import Path
from backend.custom_logging import LOGGING # noqa
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
from config.custom_logging import LOGGING # noqa
from config.env import BASE_DIR, env # noqa
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-9ut_dim+ma+r=ys094hoiwns#g1t@0*_&-*d!g+h)y%lye$0_^"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ["*"]
SECRET_KEY = env("SECRET_KEY", default="secret")
DEBUG = env.bool("DJANGO_DEBUG", default=False)
ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
# Application definition
@@ -49,7 +38,7 @@ MIDDLEWARE = [
CORS_ALLOWED_ORIGINS = ["http://localhost", "http://127.0.0.1"]
ROOT_URLCONF = "backend.urls"
ROOT_URLCONF = "config.urls"
TEMPLATES = [
{
@@ -78,20 +67,7 @@ SPECTACULAR_SETTINGS = {
"SERVE_INCLUDE_SCHEMA": True,
}
WSGI_APPLICATION = "backend.wsgi.application"
# Database
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "prowler_db",
"USER": "prowler",
"PASSWORD": "S3cret",
"HOST": "postgres-db",
"PORT": "5432",
}
}
WSGI_APPLICATION = "config.wsgi.application"
DJANGO_GUID = {
"GUID_HEADER_NAME": "Transaction-ID",
+18
View File
@@ -0,0 +1,18 @@
from config.django.base import * # noqa
from config.env import env
DEBUG = env.bool("DJANGO_DEBUG", default=True)
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=["*"])
# Database
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": env("POSTGRES_DB", default="prowler_db"),
"USER": env("POSTGRES_USER", default="prowler"),
"PASSWORD": env("POSTGRES_PASSWORD", default="S3cret"),
"HOST": env("POSTGRES_HOST", default="postgres-db"),
"PORT": env("POSTGRES_PORT", default="5432"),
}
}
+18
View File
@@ -0,0 +1,18 @@
from config.django.base import * # noqa
from config.env import env
DEBUG = env.bool("DJANGO_DEBUG", default=False)
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=["localhost", "127.0.0.1"])
# Database
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": env("POSTGRES_DB"),
"USER": env("POSTGRES_USER"),
"PASSWORD": env("POSTGRES_PASSWORD"),
"HOST": env("POSTGRES_HOST"),
"PORT": env("POSTGRES_PORT"),
}
}
+14
View File
@@ -0,0 +1,14 @@
from config.django.base import * # noqa
from config.env import env
DEBUG = env.bool("DJANGO_DEBUG", default=False)
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=["localhost", "127.0.0.1"])
# Database
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": ":memory:",
}
}
+7
View File
@@ -0,0 +1,7 @@
from pathlib import Path
import environ
env = environ.Env()
BASE_DIR = Path(__file__).resolve().parent.parent
@@ -2,21 +2,26 @@ import logging
import multiprocessing
import os
from config.env import env
# Ensure the environment variable for Django settings is set
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.django.production")
# Import Django and set it up before accessing settings
import django # noqa: E402
django.setup()
from backend.settings import LOGGING as DJANGO_LOGGERS # noqa: E402
from backend.custom_logging import BackendLogger # noqa: E402
from config.django.production import LOGGING as DJANGO_LOGGERS, DEBUG # noqa: E402
from config.custom_logging import BackendLogger # noqa: E402
BIND_ADDRESS = env("DJANGO_BIND_ADDRESS", default="127.0.0.1")
PORT = env("DJANGO_PORT", default=8000)
# Server settings
bind = ["0.0.0.0:8000"]
# Calculate the number of workers based on CPU count. Refactor when adding config from env vars
workers = multiprocessing.cpu_count() * 2 + 1
reload = True
bind = f"{BIND_ADDRESS}:{PORT}"
workers = env.int("DJANGO_WORKERS", default=multiprocessing.cpu_count() * 2 + 1)
reload = DEBUG
# Logging
logconfig_dict = DJANGO_LOGGERS
Whitespace-only changes.
File renamed without changes.
@@ -11,6 +11,6 @@ import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.django.production")
application = get_wsgi_application()
+2 -1
View File
@@ -7,7 +7,8 @@ import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.django.production")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
+1 -1
View File
@@ -1,3 +1,3 @@
[pytest]
DJANGO_SETTINGS_MODULE = backend.settings
DJANGO_SETTINGS_MODULE = config.django.testing
addopts = -rP