45 lines
1.3 KiB
Python
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,
|
|
}
|