66 lines
1.8 KiB
Python

"""
Routes API pour les logs serveur.
"""
from typing import Optional
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.dependencies import get_db, verify_api_key
from app.crud.log import LogRepository
from app.services import console_log_service
router = APIRouter()
@router.get("/logs")
async def get_server_logs(
limit: int = 500,
offset: int = 0,
level: Optional[str] = None,
source: Optional[str] = None,
log_source: str = "console",
api_key_valid: bool = Depends(verify_api_key),
db_session: AsyncSession = Depends(get_db)
):
"""
Récupère les logs serveur avec pagination.
Args:
log_source: "console" pour les logs stdout/stderr en temps réel,
"db" pour les logs stockés en base de données
"""
if log_source == "console":
# Logs console en temps réel
logs = console_log_service.get_logs(limit=limit, offset=offset, level=level)
return {
"logs": logs,
"count": console_log_service.get_count(),
"limit": limit,
"offset": offset,
"source": "console"
}
else:
# Logs depuis la base de données
repo = LogRepository(db_session)
logs = await repo.list(limit=limit, offset=offset, level=level, source=source)
return {
"logs": [
{
"id": log.id,
"timestamp": log.created_at,
"level": log.level,
"message": log.message,
"source": log.source,
"host": log.host_id,
}
for log in logs
],
"count": len(logs),
"limit": limit,
"offset": offset,
"source": "db"
}