From 49a49f7ea6b5e7112352868834754e7b9bdeeccf Mon Sep 17 00:00:00 2001
From: Jimmy <me@jimmy.nz>
Date: Mon, 17 Jan 2022 05:27:26 +0000
Subject: [PATCH] Use server side events

---
 app/server.py | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/app/server.py b/app/server.py
index ab5617b..a2aac23 100644
--- a/app/server.py
+++ b/app/server.py
@@ -1,4 +1,5 @@
-from fastapi import APIRouter, HTTPException, status, WebSocket
+from fastapi import APIRouter, HTTPException, status, WebSocket, Request
+from sse_starlette.sse import EventSourceResponse
 import base64
 import docker
 import aiodocker
@@ -42,23 +43,25 @@ async def commnd(server, command):
     return f"{server} {base64.urlsafe_b64decode(command).decode('utf_8')}"
 
 
-@router.websocket("/server/{server}/logs")
-async def logs(websocket: WebSocket, server: str):
-    await websocket.accept()
+@router.get("/server/{server}/logs")
+async def logs(server: str, request: Request):
     container = await getContainer(server)
-    async for line in container.log(stdout=True, follow=True, tail=5000):
-        #print(line) 
-        await websocket.send_bytes(line)
-    print("Closed")
-    return server
+    #event_generator = logGenerator(request, server)
+    return EventSourceResponse(container.log(stdout=True, follow=True, tail=5000))
 
-@router.get("/server/{server}/stats")
-async def stats(websocket: WebSocket, server: str):
-    await websocket.accept()
+async def logGenerator(request, server):
     container = await getContainer(server)
-    async for line in container.log():
-        await websocket.send_bytes(line)
-    return server
+    for line in container.log(stdout=True, follow=True, tail=5000):
+        if await request.is_disconnected():
+            print("client disconnected!!!")
+            break
+        yield line
+
+# @router.get("/server/{server}/stats")
+# async def stats(server: str):
+
+#     container = await getContainer(server)
+#     return EventSourceResponse(container.stats(stream=True))
 
 
 async def getContainer(server):