Files
mnemosyne/docker/gunicorn.conf.py
Robert Helewka 9629ca595d
All checks were successful
CVE Scan & Docker Build / security-scan (push) Successful in 51s
CVE Scan & Docker Build / build-and-push (push) Successful in 2m48s
refactor(startup): move startup probe to gunicorn worker init
Move probe execution from Django app ready() to gunicorn.conf.py
Remove threading implementation to simplify startup sequence
Ensure probe runs in worker process context with proper error handling
2026-05-15 10:50:35 -04:00

37 lines
992 B
Python

import logging
import re
_PROBE_PATH = re.compile(
r"^(?:/live|/ready|/metrics|/healthz|/health[^ ]*|/ping)/?(?:\?|$)"
)
class _ProbePathFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
request = getattr(record, "args", None)
if isinstance(request, dict):
path = request.get("U") or request.get("r", "")
else:
path = record.getMessage()
return not _PROBE_PATH.search(path)
_filter = _ProbePathFilter()
def on_starting(server):
logging.getLogger("gunicorn.access").addFilter(_filter)
def post_worker_init(worker):
logging.getLogger("gunicorn.access").addFilter(_filter)
from library.apps import _run_startup_probe, _should_skip_probe
if not _should_skip_probe():
try:
_run_startup_probe()
except Exception as exc:
logging.getLogger("library.apps").warning(
"Startup probe crashed: %s", exc, exc_info=True
)