""" Routes API pour la gestion des logs. """ from typing import Optional from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import delete from app.core.dependencies import get_db, verify_api_key from app.crud.log import LogRepository from app.services import ws_manager router = APIRouter() @router.get("") async def get_logs( limit: int = 50, offset: int = 0, level: Optional[str] = None, source: Optional[str] = None, api_key_valid: bool = Depends(verify_api_key), db_session: AsyncSession = Depends(get_db), ): """Récupère les logs récents avec filtrage optionnel.""" repo = LogRepository(db_session) logs = await repo.list(limit=limit, offset=offset, level=level, source=source) return [ { "id": log.id, "timestamp": log.created_at, "level": log.level, "message": log.message, "source": log.source, "host": log.host_id, } for log in logs ] @router.post("") async def create_log( level: str, message: str, source: Optional[str] = None, host_id: Optional[str] = None, api_key_valid: bool = Depends(verify_api_key), db_session: AsyncSession = Depends(get_db), ): """Ajoute une nouvelle entrée de log.""" repo = LogRepository(db_session) log = await repo.create( level=level.upper(), message=message, source=source, host_id=host_id, ) await db_session.commit() response_data = { "id": log.id, "timestamp": log.created_at, "level": log.level, "message": log.message, "source": log.source, "host": log.host_id, } await ws_manager.broadcast({ "type": "new_log", "data": response_data }) return response_data @router.delete("") async def clear_logs( api_key_valid: bool = Depends(verify_api_key), db_session: AsyncSession = Depends(get_db), ): """Efface tous les logs (attention: opération destructive).""" from app.models.log import Log as LogModel await db_session.execute(delete(LogModel)) await db_session.commit() return {"message": "Tous les logs ont été supprimés"}