webman/src/routes/container/[name]/logs/+server.ts

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'
}
});
}