feat: 重构接口日志页面与接口监控看板,支持HTTP方法过滤和实时轮询
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
"""Log external API calls to the database and console."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional
|
||||
|
||||
from app.database import SessionLocal
|
||||
from app.models.external_api_log import ExternalApiLog
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def log_external_api_call(
|
||||
direction: str,
|
||||
target_type: str,
|
||||
method: str,
|
||||
path: str,
|
||||
url_host: str,
|
||||
duration_ms: int,
|
||||
status_code: Optional[int] = None,
|
||||
success: bool = True,
|
||||
target_id: Optional[int] = None,
|
||||
target_name: Optional[str] = None,
|
||||
error_type: Optional[str] = None,
|
||||
error_message: Optional[str] = None,
|
||||
) -> None:
|
||||
"""Persist an external API call log entry and write a structured console log.
|
||||
|
||||
No request/response bodies, tokens, cookies, or API keys are recorded.
|
||||
"""
|
||||
# Console log (structured, for Docker log aggregation)
|
||||
logger.info(
|
||||
"api_log direction=%s target_type=%s target_id=%s target_name=%s "
|
||||
"method=%s path=%s url_host=%s status_code=%s success=%s "
|
||||
"duration_ms=%d error_type=%s error_message=%s",
|
||||
direction,
|
||||
target_type,
|
||||
target_id,
|
||||
target_name or "",
|
||||
method,
|
||||
path,
|
||||
url_host,
|
||||
status_code or "",
|
||||
success,
|
||||
duration_ms,
|
||||
error_type or "",
|
||||
(error_message or "")[:200],
|
||||
)
|
||||
|
||||
# DB persistence
|
||||
db = SessionLocal()
|
||||
try:
|
||||
log = ExternalApiLog(
|
||||
direction=direction,
|
||||
target_type=target_type,
|
||||
target_id=target_id,
|
||||
target_name=target_name,
|
||||
method=method,
|
||||
path=path,
|
||||
url_host=url_host,
|
||||
status_code=status_code,
|
||||
success=success,
|
||||
duration_ms=duration_ms,
|
||||
error_type=error_type,
|
||||
error_message=error_message,
|
||||
created_at=datetime.now(timezone.utc),
|
||||
)
|
||||
db.add(log)
|
||||
db.commit()
|
||||
except Exception:
|
||||
logger.exception("failed to persist external API log entry")
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user