chore: debug endpoint 更詳細的錯誤追蹤

This commit is contained in:
OG T
2026-03-23 22:23:24 +08:00
parent 58f3339561
commit 8ef8347f2c

View File

@@ -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,
}