38 lines
823 B
TypeScript
38 lines
823 B
TypeScript
import { SERVERMAN_BASE_URL } from '$env/static/private';
|
|
import EventSource from 'eventsource';
|
|
|
|
// Proxy the streaming logs from serverman
|
|
export async function GET({ params }) {
|
|
let logSource: EventSource;
|
|
let closed = false;
|
|
|
|
const stream = new ReadableStream({
|
|
start(controller) {
|
|
logSource = new EventSource(`${SERVERMAN_BASE_URL}/containers/${params.name}/logs`);
|
|
|
|
logSource.addEventListener('message', (ev) => {
|
|
if (closed) {
|
|
logSource.close();
|
|
return;
|
|
}
|
|
controller.enqueue(`data: ${ev.data}\n\n`);
|
|
});
|
|
|
|
logSource.addEventListener('error', (ev) => {
|
|
closed = true;
|
|
controller.close();
|
|
});
|
|
},
|
|
cancel() {
|
|
logSource.close();
|
|
}
|
|
});
|
|
|
|
return new Response(stream, {
|
|
headers: {
|
|
'Content-Type': 'text/event-stream',
|
|
'Cache-Control': 'no-cache'
|
|
}
|
|
});
|
|
}
|