31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
|
import stream from "stream";
|
||
|
import k8s from "@kubernetes/client-node";
|
||
|
import { ERR } from "../util/logging.js";
|
||
|
|
||
|
const kc = new k8s.KubeConfig();
|
||
|
kc.loadFromDefault();
|
||
|
const k8sApi = kc.makeApiClient(k8s.CoreV1Api);
|
||
|
export default async function liveLogging(socket, serverNamespace) {
|
||
|
const containerName = `mcl-${socket.mcs.serverName}`;
|
||
|
const podResponse = await k8sApi.listNamespacedPod(serverNamespace);
|
||
|
const pods = podResponse.body.items.map((vp1) => vp1.metadata.name);
|
||
|
const mcsPods = pods.filter((p) => p.startsWith(containerName));
|
||
|
if (mcsPods.length === 0)
|
||
|
throw Error(`Could not find a pod that starts with ${containerName}`);
|
||
|
if (mcsPods.length > 1)
|
||
|
throw Error(`Multiple pods match the name ${containerName}`);
|
||
|
|
||
|
const log = new k8s.Log(kc);
|
||
|
const logStream = new stream.PassThrough();
|
||
|
logStream.on("data", (chunk) =>
|
||
|
socket.emit("push", Buffer.from(chunk).toString())
|
||
|
);
|
||
|
log
|
||
|
.log(serverNamespace, mcsPods[0], containerName, logStream, {
|
||
|
follow: true,
|
||
|
pretty: false,
|
||
|
timestamps: false,
|
||
|
})
|
||
|
.catch((e) => ERR("K8S", e));
|
||
|
}
|