etoile_polaire/server/app/api/endpoints/logs.py
2025-04-01 16:33:54 +02:00

31 lines
No EOL
1.2 KiB
Python

from fastapi import APIRouter, WebSocket, WebSocketDisconnect
from app.services.logs_service import logs_service
import asyncio
router = APIRouter()
@router.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
"""Endpoint WebSocket pour recevoir les logs en temps réel."""
await logs_service.connect(websocket)
try:
while True:
data = await websocket.receive_text()
# Ici, nous pourrions ajouter la logique pour filtrer les logs
# en fonction des préférences du client
await logs_service.broadcast_log(data)
except WebSocketDisconnect:
logs_service.disconnect(websocket)
@router.websocket("/ws/{container_id}")
async def container_logs_websocket(websocket: WebSocket, container_id: str):
"""Endpoint WebSocket pour recevoir les logs d'un conteneur spécifique."""
await logs_service.connect(websocket, container_id)
try:
async for log in logs_service.get_container_logs(container_id):
await websocket.send_text(log)
except WebSocketDisconnect:
logs_service.disconnect(websocket, container_id)
except Exception as e:
await websocket.send_text(f"Error: {str(e)}")
logs_service.disconnect(websocket, container_id)