66 lines
1.8 KiB
Python
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"
|
|
}
|