31 lines
No EOL
1.2 KiB
Python
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) |