root: add request_id to celery tasks, prefixed with "task-"

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens Langhammer 2021-12-08 21:34:20 +01:00
parent 402ed9bd20
commit 86a9271f75

View file

@ -1,6 +1,7 @@
"""authentik core celery""" """authentik core celery"""
import os import os
from logging.config import dictConfig from logging.config import dictConfig
from uuid import uuid4
from celery import Celery from celery import Celery
from celery.signals import ( from celery.signals import (
@ -14,6 +15,7 @@ from celery.signals import (
from django.conf import settings from django.conf import settings
from structlog.stdlib import get_logger from structlog.stdlib import get_logger
from authentik.core.middleware import LOCAL
from authentik.lib.sentry import before_send from authentik.lib.sentry import before_send
from authentik.lib.utils.errors import exception_to_string from authentik.lib.utils.errors import exception_to_string
@ -26,7 +28,7 @@ CELERY_APP = Celery("authentik")
# pylint: disable=unused-argument # pylint: disable=unused-argument
@setup_logging.connect @setup_logging.connect
def config_loggers(*args, **kwags): def config_loggers(*args, **kwargs):
"""Apply logging settings from settings.py to celery""" """Apply logging settings from settings.py to celery"""
dictConfig(settings.LOGGING) dictConfig(settings.LOGGING)
@ -43,6 +45,10 @@ def after_task_publish_hook(sender=None, headers=None, body=None, **kwargs):
@task_prerun.connect @task_prerun.connect
def task_prerun_hook(task_id, task, *args, **kwargs): def task_prerun_hook(task_id, task, *args, **kwargs):
"""Log task_id on worker""" """Log task_id on worker"""
request_id = "task-" + uuid4().hex[5:]
LOCAL.authentik = {
"request_id": request_id,
}
LOGGER.debug("Task started", task_id=task_id, task_name=task.__name__) LOGGER.debug("Task started", task_id=task_id, task_name=task.__name__)
@ -51,6 +57,8 @@ def task_prerun_hook(task_id, task, *args, **kwargs):
def task_postrun_hook(task_id, task, *args, retval=None, state=None, **kwargs): def task_postrun_hook(task_id, task, *args, retval=None, state=None, **kwargs):
"""Log task_id on worker""" """Log task_id on worker"""
LOGGER.debug("Task finished", task_id=task_id, task_name=task.__name__, state=state) LOGGER.debug("Task finished", task_id=task_id, task_name=task.__name__, state=state)
for key in list(LOCAL.authentik.keys()):
del LOCAL.authentik[key]
# pylint: disable=unused-argument # pylint: disable=unused-argument