From e82ef76316f0562b57124eb977c86fd2c6a3f332 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Sat, 22 Mar 2025 08:21:11 -0500 Subject: [PATCH] test(streaming): more testing on streaming the lofs --- .../src/components/ocme/CycleCountLog.tsx | 24 ++++++++++++++++--- server/services/logger/routes/streamLogs.ts | 17 ++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/ocme/CycleCountLog.tsx b/frontend/src/components/ocme/CycleCountLog.tsx index 3b123a7..5411056 100644 --- a/frontend/src/components/ocme/CycleCountLog.tsx +++ b/frontend/src/components/ocme/CycleCountLog.tsx @@ -14,13 +14,31 @@ // // Start streaming when the button is clicked // let es; -// const url = `http://localhost:4000/api/log`; +// const url = `http://localhost:4000/api/logger/logs/stream?service=ocme-count&level=info`; -// es = new EventSource(url, {withCredentials: true}); +// es = new EventSource(url); // es.onopen = () => console.log(">>> Connection opened!"); // es.onerror = (e) => console.log("ERROR!", e); // es.onmessage = (e) => { -// console.log(">>>", JSON.stringify(e)); +// const data = JSON.parse(e.data); + +// console.log(e); +// console.log(data); +// switch (data.type) { +// case "time-update": +// console.log(data); +// break; +// case "error": +// console.log(data); +// break; +// case "done": +// console.log(data); +// es.close(); // Close the connection when done + +// break; +// default: +// break; +// } // }; // return () => es.close(); diff --git a/server/services/logger/routes/streamLogs.ts b/server/services/logger/routes/streamLogs.ts index 34e2b6c..68782cc 100644 --- a/server/services/logger/routes/streamLogs.ts +++ b/server/services/logger/routes/streamLogs.ts @@ -29,12 +29,23 @@ app.openapi( }), async (c) => { apiHit(c, {endpoint: `api/logger/logs`}); - c.header("Access-Control-Allow-Origin", "*"); // Or restrict to a specific origin - c.header("Access-Control-Allow-Headers", "Content-Type"); c.header("Content-Type", "text/event-stream"); c.header("Cache-Control", "no-cache"); c.header("Connection", "keep-alive"); - return streamLogs(c); + return streamSSE(c, async (stream) => { + let id = 0; + const encoder = new TextEncoder(); + while (true) { + const message = `It is ${new Date().toISOString()}`; + await stream.writeSSE({ + data: message, + event: "time-update", + id: String(id++), + }); + encoder.encode(`data: ${JSON.stringify({type: "progress", data: id})}\n\n`); + await stream.sleep(1000); + } + }); } ); export default app;