HR-ATS-Portal/backend/taskiq_management/serializers.py

45 lines
1.3 KiB
Python

"""DLQ payload serializers for Taskiq dead-letter entries.
Pure module: no FastAPI imports.
"""
from __future__ import annotations
import os
import socket
import sys
import traceback
from datetime import datetime, timezone
from taskiq.message import TaskiqMessage
from taskiq_management.models import APP_VERSION
def serialize_dlq_payload(
message:TaskiqMessage,
exception:BaseException,
*,
retries:int,
queue:str|None=None,
) -> dict:
now=datetime.now(timezone.utc).isoformat()
return {
"task_name":message.task_name,
"task_id":message.task_id,
"kwargs":message.kwargs or {},
"args":list(message.args or []),
"exception":type(exception).__name__,
"message":str(exception),
"traceback":"".join(traceback.format_exception(type(exception),exception,exception.__traceback__)),
"retry_count":retries,
"worker":os.getenv("TASKIQ_WORKER_NAME") or os.getenv("HOSTNAME") or socket.gethostname(),
"queue":message.labels.get("queue") or queue or "taskiq",
"created_at":message.labels.get("created_at") or now,
"failed_at":now,
"correlation_id":message.labels.get("correlation_id") or message.task_id,
"hostname":socket.gethostname(),
"python_version":sys.version.split()[0],
"app_version":APP_VERSION,
}