diff --git a/main.py b/main.py index 633c7a3..a2c376c 100644 --- a/main.py +++ b/main.py @@ -129,6 +129,63 @@ def get_containers(): detail=f"Docker error: {str(e)}" ) +# websocket for docker containers +def get_container_status(): + + client = docker.from_env() + + containers = client.containers.list(all=True) + + result = [] + + for container in containers: + + result.append({ + "id": container.short_id, + "name": container.name, + "status": container.status + }) + + return result + +@app.websocket("/ws/docker/containers") +async def docker_container_status(websocket: WebSocket): + + await websocket.accept() + + try: + + while True: + + # Docker SDK is synchronous/blocking, + # so run it in a worker thread. + containers = await asyncio.to_thread( + get_container_status + ) + + await websocket.send_json({ + "containers": containers + }) + + # Update every 2 seconds + await asyncio.sleep(2) + + except WebSocketDisconnect: + + print("Docker WebSocket disconnected") + + except Exception as e: + + try: + await websocket.send_json({ + "error": str(e) + }) + + except Exception: + pass + + + if __name__ == "__main__": import uvicorn