chore: debug endpoint 更詳細的錯誤追蹤
This commit is contained in:
@@ -354,38 +354,93 @@ async def debug_resolve_incident(incident_id: str) -> dict[str, Any]:
|
||||
DEBUG: 直接更新 Incident 狀態為 RESOLVED
|
||||
用於測試 resolve_incident_after_approval 邏輯
|
||||
"""
|
||||
service = get_proposal_service()
|
||||
from src.db.base import get_db_context
|
||||
from src.db.models import IncidentRecord
|
||||
from sqlalchemy import select
|
||||
from datetime import datetime, timezone
|
||||
|
||||
# 先取得當前狀態
|
||||
redis_client = get_redis()
|
||||
before_status = None
|
||||
error_msg = None
|
||||
|
||||
# 1. 取得 Redis 當前狀態
|
||||
before_redis = None
|
||||
try:
|
||||
data = await redis_client.get(f"incident:{incident_id}")
|
||||
if data:
|
||||
incident = Incident.model_validate_json(data)
|
||||
before_status = incident.status.value
|
||||
before_redis = incident.status.value
|
||||
except Exception as e:
|
||||
logger.warning("debug_resolve_get_failed", error=str(e))
|
||||
error_msg = f"Redis read error: {e}"
|
||||
|
||||
# 呼叫 resolve
|
||||
result = await service.resolve_incident_after_approval(
|
||||
incident_id=incident_id,
|
||||
approval_id="debug-test",
|
||||
)
|
||||
# 2. 取得 DB 當前狀態
|
||||
before_db = None
|
||||
try:
|
||||
async with get_db_context() as db:
|
||||
stmt = select(IncidentRecord).where(IncidentRecord.incident_id == incident_id)
|
||||
result = await db.execute(stmt)
|
||||
record = result.scalar_one_or_none()
|
||||
if record:
|
||||
before_db = record.status
|
||||
except Exception as e:
|
||||
error_msg = f"DB read error: {e}"
|
||||
|
||||
# 取得更新後狀態
|
||||
after_status = None
|
||||
# 3. 直接更新 Redis
|
||||
redis_updated = False
|
||||
try:
|
||||
data = await redis_client.get(f"incident:{incident_id}")
|
||||
if data:
|
||||
incident = Incident.model_validate_json(data)
|
||||
after_status = incident.status.value
|
||||
incident.status = IncidentStatus.RESOLVED
|
||||
incident.updated_at = datetime.now(timezone.utc)
|
||||
await redis_client.set(
|
||||
f"incident:{incident_id}",
|
||||
incident.model_dump_json(),
|
||||
ex=604800,
|
||||
)
|
||||
redis_updated = True
|
||||
except Exception as e:
|
||||
logger.warning("debug_resolve_get_after_failed", error=str(e))
|
||||
error_msg = f"Redis update error: {e}"
|
||||
|
||||
# 4. 直接更新 DB
|
||||
db_updated = False
|
||||
try:
|
||||
async with get_db_context() as db:
|
||||
stmt = select(IncidentRecord).where(IncidentRecord.incident_id == incident_id)
|
||||
result = await db.execute(stmt)
|
||||
record = result.scalar_one_or_none()
|
||||
if record:
|
||||
record.status = "resolved"
|
||||
record.updated_at = datetime.now(timezone.utc)
|
||||
await db.commit()
|
||||
db_updated = True
|
||||
except Exception as e:
|
||||
error_msg = f"DB update error: {e}"
|
||||
|
||||
# 5. 驗證更新後狀態
|
||||
after_redis = None
|
||||
try:
|
||||
data = await redis_client.get(f"incident:{incident_id}")
|
||||
if data:
|
||||
incident = Incident.model_validate_json(data)
|
||||
after_redis = incident.status.value
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
after_db = None
|
||||
try:
|
||||
async with get_db_context() as db:
|
||||
stmt = select(IncidentRecord).where(IncidentRecord.incident_id == incident_id)
|
||||
result = await db.execute(stmt)
|
||||
record = result.scalar_one_or_none()
|
||||
if record:
|
||||
after_db = record.status
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
return {
|
||||
"success": result,
|
||||
"incident_id": incident_id,
|
||||
"before_status": before_status,
|
||||
"after_status": after_status,
|
||||
"before": {"redis": before_redis, "db": before_db},
|
||||
"after": {"redis": after_redis, "db": after_db},
|
||||
"updates": {"redis": redis_updated, "db": db_updated},
|
||||
"error": error_msg,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user