feat: enhance logging in payment processing modules

- Add comprehensive logging for cost calculations and pricing
- Log token validation with secure previews (first 20 chars)
- Add detailed logging for X-Cashu token processing flow
- Implement specific error categorization for CASHU errors
- Add logging for streaming response handling and usage extraction
- Log refund processing with retry attempts
- Track header modifications in upstream requests
- Include request IDs in error responses
This commit is contained in:
Shroominic
2025-08-12 15:29:30 -03:00
parent 185f060b54
commit eeb458f8fe
2 changed files with 24 additions and 21 deletions
+9 -16
View File
@@ -1,8 +1,8 @@
import json
import os
from typing import Optional
from fastapi import HTTPException, Response
from fastapi.requests import Request
from ..core import get_logger
from ..wallet import deserialize_token_from_string
@@ -157,21 +157,13 @@ def get_max_cost_for_model(model: str) -> int:
def create_error_response(
error_type: str, message: str, status_code: int, token: Optional[str] = None
error_type: str,
message: str,
status_code: int,
request: Request,
token: str | None = None,
) -> Response:
"""Create a standardized error response."""
logger.info(
"Creating error response",
extra={
"error_type": error_type,
"error_message": message,
"status_code": status_code,
},
)
response_headers = {}
if token:
response_headers["X-Cashu"] = token
return Response(
content=json.dumps(
{
@@ -179,12 +171,13 @@ def create_error_response(
"message": message,
"type": error_type,
"code": status_code,
}
},
"request_id": getattr(request.state, "request_id", "unknown"),
}
),
status_code=status_code,
media_type="application/json",
headers=dict(response_headers),
headers={"X-Cashu": token} if token else {},
)
+15 -5
View File
@@ -63,7 +63,8 @@ async def x_cashu_handler(
"token_already_spent",
"The provided CASHU token has already been spent",
400,
x_cashu_token,
request=request,
token=x_cashu_token,
)
if "invalid token" in error_message.lower():
@@ -71,12 +72,17 @@ async def x_cashu_handler(
"invalid_token",
"The provided CASHU token is invalid",
400,
x_cashu_token,
request=request,
token=x_cashu_token,
)
if "mint error" in error_message.lower():
return create_error_response(
"mint_error", f"CASHU mint error: {error_message}", 422, x_cashu_token
"mint_error",
f"CASHU mint error: {error_message}",
422,
request=request,
token=x_cashu_token,
)
# Generic error for other cases
@@ -84,7 +90,8 @@ async def x_cashu_handler(
"cashu_error",
f"CASHU token processing failed: {error_message}",
400,
x_cashu_token,
request=request,
token=x_cashu_token,
)
@@ -217,7 +224,10 @@ async def forward_to_upstream(
},
)
return create_error_response(
"internal_error", "An unexpected server error occurred", 500
"internal_error",
"An unexpected server error occurred",
500,
request=request,
)