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