|
1 | 1 | import os
|
| 2 | +import warnings |
2 | 3 |
|
3 | 4 | from django.urls import reverse_lazy
|
4 | 5 |
|
5 | 6 | import sentry_sdk
|
| 7 | +from corsheaders.defaults import default_headers as default_cors_headers |
6 | 8 | from log_outgoing_requests.formatters import HttpFormatter
|
7 | 9 |
|
8 | 10 | from .api import * # noqa
|
|
31 | 33 |
|
32 | 34 | # = domains we're running on
|
33 | 35 | ALLOWED_HOSTS = config("ALLOWED_HOSTS", default="", split=True)
|
| 36 | +USE_X_FORWARDED_HOST = config("USE_X_FORWARDED_HOST", default=False) |
34 | 37 |
|
35 | 38 | IS_HTTPS = config("IS_HTTPS", default=not DEBUG)
|
36 | 39 |
|
|
54 | 57 | #
|
55 | 58 | DATABASES = {
|
56 | 59 | "default": {
|
57 |
| - "ENGINE": config("DB_ENGINE", "django.db.backends.postgresql"), |
| 60 | + "ENGINE": "django.db.backends.postgresql", |
58 | 61 | "NAME": config("DB_NAME", "openklant"),
|
59 | 62 | "USER": config("DB_USER", "openklant"),
|
60 | 63 | "PASSWORD": config("DB_PASSWORD", "openklant"),
|
|
84 | 87 | "IGNORE_EXCEPTIONS": True,
|
85 | 88 | },
|
86 | 89 | },
|
87 |
| - "oidc": {"BACKEND": "django.core.cache.backends.locmem.LocMemCache"}, |
| 90 | + "oidc": { |
| 91 | + "BACKEND": "django_redis.cache.RedisCache", |
| 92 | + "LOCATION": f"redis://{config('CACHE_OIDC', 'localhost:6379/0')}", |
| 93 | + "OPTIONS": { |
| 94 | + "CLIENT_CLASS": "django_redis.client.DefaultClient", |
| 95 | + "IGNORE_EXCEPTIONS": True, |
| 96 | + }, |
| 97 | + }, |
88 | 98 | }
|
89 | 99 |
|
90 | 100 |
|
|
219 | 229 | EMAIL_USE_TLS = config("EMAIL_USE_TLS", default=False)
|
220 | 230 | EMAIL_TIMEOUT = 10
|
221 | 231 |
|
222 |
| -DEFAULT_FROM_EMAIL = "openklant@example.com" |
| 232 | +DEFAULT_FROM_EMAIL = config("DEFAULT_FROM_EMAIL", "openklant@example.com") |
223 | 233 |
|
224 | 234 | #
|
225 | 235 | # LOGGING
|
226 | 236 | #
|
227 | 237 | LOG_STDOUT = config("LOG_STDOUT", default=False)
|
228 |
| -LOG_REQUESTS = config("LOG_REQUESTS", default=True) |
| 238 | +LOG_LEVEL = config("LOG_LEVEL", default="WARNING") |
| 239 | +LOG_QUERIES = config("LOG_QUERIES", default=False) |
| 240 | +LOG_REQUESTS = config("LOG_REQUESTS", default=False) |
| 241 | +if LOG_QUERIES and not DEBUG: |
| 242 | + warnings.warn( |
| 243 | + "Requested LOG_QUERIES=1 but DEBUG is false, no query logs will be emited.", |
| 244 | + RuntimeWarning, |
| 245 | + ) |
229 | 246 |
|
230 | 247 | LOGGING_DIR = os.path.join(BASE_DIR, "log")
|
231 | 248 |
|
| 249 | +_root_handlers = ["console"] if LOG_STDOUT else ["project"] |
| 250 | +_django_handlers = ["console"] if LOG_STDOUT else ["django"] |
| 251 | + |
232 | 252 | LOGGING = {
|
233 | 253 | "version": 1,
|
234 | 254 | "disable_existing_loggers": False,
|
|
241 | 261 | "performance": {
|
242 | 262 | "format": "%(asctime)s %(process)d | %(thread)d | %(message)s",
|
243 | 263 | },
|
| 264 | + "db": {"format": "%(asctime)s | %(message)s"}, |
244 | 265 | "outgoing_requests": {"()": HttpFormatter},
|
245 | 266 | },
|
246 | 267 | "filters": {
|
|
261 | 282 | "class": "logging.StreamHandler",
|
262 | 283 | "formatter": "timestamped",
|
263 | 284 | },
|
| 285 | + "console_db": { |
| 286 | + "level": "DEBUG", |
| 287 | + "class": "logging.StreamHandler", |
| 288 | + "formatter": "db", |
| 289 | + }, |
264 | 290 | "django": {
|
265 | 291 | "level": "DEBUG",
|
266 | 292 | "class": "logging.handlers.RotatingFileHandler",
|
|
296 | 322 | },
|
297 | 323 | },
|
298 | 324 | "loggers": {
|
| 325 | + "": { |
| 326 | + "handlers": _root_handlers, |
| 327 | + "level": "ERROR", |
| 328 | + "propagate": False, |
| 329 | + }, |
299 | 330 | "openklant": {
|
300 |
| - "handlers": ["project"] if not LOG_STDOUT else ["console"], |
301 |
| - "level": "INFO", |
| 331 | + "handlers": _root_handlers, |
| 332 | + "level": LOG_LEVEL, |
302 | 333 | "propagate": True,
|
303 | 334 | },
|
| 335 | + "mozilla_django_oidc": { |
| 336 | + "handlers": _root_handlers, |
| 337 | + "level": LOG_LEVEL, |
| 338 | + }, |
304 | 339 | "django.request": {
|
305 |
| - "handlers": ["django"] if not LOG_STDOUT else ["console"], |
306 |
| - "level": "ERROR", |
| 340 | + "handlers": _django_handlers, |
| 341 | + "level": LOG_LEVEL, |
307 | 342 | "propagate": True,
|
308 | 343 | },
|
309 | 344 | "django.template": {
|
310 | 345 | "handlers": ["console"],
|
311 | 346 | "level": "INFO",
|
312 | 347 | "propagate": True,
|
313 | 348 | },
|
314 |
| - "mozilla_django_oidc": { |
315 |
| - "handlers": ["project"], |
316 |
| - "level": "DEBUG", |
317 |
| - }, |
318 | 349 | "log_outgoing_requests": {
|
319 | 350 | "handlers": (
|
320 | 351 | ["log_outgoing_requests", "save_outgoing_requests"]
|
|
324 | 355 | "level": "DEBUG",
|
325 | 356 | "propagate": True,
|
326 | 357 | },
|
| 358 | + "django.db.backends": { |
| 359 | + "handlers": ["console_db"] if LOG_QUERIES else [], |
| 360 | + "level": "DEBUG", |
| 361 | + "propagate": False, |
| 362 | + }, |
327 | 363 | },
|
328 | 364 | }
|
329 | 365 |
|
|
454 | 490 | "REMOTE_ADDR",
|
455 | 491 | )
|
456 | 492 |
|
| 493 | +# |
| 494 | +# DJANGO-CORS-MIDDLEWARE |
| 495 | +# |
| 496 | +CORS_ALLOW_ALL_ORIGINS = config("CORS_ALLOW_ALL_ORIGINS", default=False) |
| 497 | +CORS_ALLOWED_ORIGINS = config("CORS_ALLOWED_ORIGINS", split=True, default=[]) |
| 498 | +CORS_ALLOWED_ORIGIN_REGEXES = config( |
| 499 | + "CORS_ALLOWED_ORIGIN_REGEXES", split=True, default=[] |
| 500 | +) |
| 501 | +# Authorization is included in default_cors_headers |
| 502 | +CORS_ALLOW_HEADERS = list(default_cors_headers) + config( |
| 503 | + "CORS_EXTRA_ALLOW_HEADERS", split=True, default=[] |
| 504 | +) |
| 505 | + |
457 | 506 | #
|
458 | 507 | # RAVEN/SENTRY - error monitoring
|
459 | 508 | #
|
|
472 | 521 | send_default_pii=True,
|
473 | 522 | )
|
474 | 523 |
|
| 524 | +# |
475 | 525 | # Elastic APM
|
476 |
| -ELASTIC_APM_SERVER_URL = os.getenv("ELASTIC_APM_SERVER_URL", None) |
| 526 | +# |
| 527 | +ELASTIC_APM_SERVER_URL = config("ELASTIC_APM_SERVER_URL", None) |
477 | 528 | ELASTIC_APM = {
|
478 |
| - "SERVICE_NAME": f"openklant {ENVIRONMENT}", |
| 529 | + "SERVICE_NAME": f"Open Klant - {ENVIRONMENT}", |
479 | 530 | "SECRET_TOKEN": config("ELASTIC_APM_SECRET_TOKEN", "default"),
|
480 | 531 | "SERVER_URL": ELASTIC_APM_SERVER_URL,
|
| 532 | + "TRANSACTION_SAMPLE_RATE": config("ELASTIC_APM_TRANSACTION_SAMPLE_RATE", 0.1), |
481 | 533 | }
|
482 | 534 | if not ELASTIC_APM_SERVER_URL:
|
483 | 535 | ELASTIC_APM["ENABLED"] = False
|
484 | 536 | ELASTIC_APM["SERVER_URL"] = "http://localhost:8200"
|
485 |
| - |
| 537 | +else: |
| 538 | + MIDDLEWARE = ["elasticapm.contrib.django.middleware.TracingMiddleware"] + MIDDLEWARE |
| 539 | + INSTALLED_APPS = INSTALLED_APPS + [ |
| 540 | + "elasticapm.contrib.django", |
| 541 | + ] |
486 | 542 |
|
487 | 543 | #
|
488 | 544 | # Mozilla Django OIDC DB settings
|
|
497 | 553 | LOG_OUTGOING_REQUESTS_EMIT_BODY = True
|
498 | 554 | LOG_OUTGOING_REQUESTS_DB_SAVE = config("LOG_OUTGOING_REQUESTS_DB_SAVE", default=False)
|
499 | 555 | LOG_OUTGOING_REQUESTS_RESET_DB_SAVE_AFTER = None
|
500 |
| - |
501 |
| -# Custom settings |
502 | 556 | LOG_OUTGOING_REQUESTS_MAX_AGE = config(
|
503 | 557 | "LOG_OUTGOING_REQUESTS_MAX_AGE", default=7
|
504 | 558 | ) # number of days
|
0 commit comments