feat: complete TASK-WP0-08 logging
This commit is contained in:
@@ -33,8 +33,14 @@ export function initializeApiCredentialClients(credentials: Record<(typeof API_C
|
||||
export function attachApiSupervisorControl(pipeName: string, shutdown: () => Promise<void>) {
|
||||
const socket = createConnection(`\\\\.\\pipe\\${pipeName}`);
|
||||
let pending = "";
|
||||
let connected = false;
|
||||
const pendingStatuses: string[] = [];
|
||||
socket.setEncoding("utf8");
|
||||
socket.on("connect", () => socket.write("ready\n"));
|
||||
socket.on("connect", () => {
|
||||
connected = true;
|
||||
socket.write("ready\n");
|
||||
for (const status of pendingStatuses.splice(0)) socket.write(`${status}\n`);
|
||||
});
|
||||
socket.on("data", (chunk) => {
|
||||
pending += chunk;
|
||||
if (!pending.includes("\n")) return;
|
||||
@@ -42,5 +48,11 @@ export function attachApiSupervisorControl(pipeName: string, shutdown: () => Pro
|
||||
pending = "";
|
||||
if (command === "shutdown") void shutdown().finally(() => socket.end());
|
||||
});
|
||||
return socket;
|
||||
return {
|
||||
reportStatus(status: "storage_unavailable") {
|
||||
if (socket.destroyed) return;
|
||||
if (connected) socket.write(`${status}\n`); else pendingStatuses.push(status);
|
||||
},
|
||||
socket,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user