Expose workspace-scoped restricted artifact placement and live executor activity
Show per-export placement, static eligibility blockers, bounded metadata and live pool/idle/timing diagnostics. Attach inspector updates through one private shard stream and the existing authenticated SSE hub without waking graph views or VMs. Fix packed agent preparation to use OpenSSH and the worker’s own private systemd credential.
This commit is contained in:
@@ -148,6 +148,11 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
engines = new Set(),
|
||||
idleEngines = [];
|
||||
const metrics = { starts: 0, reused: 0, completed: 0, peakRSSBytes: 0 };
|
||||
const changed = () => {
|
||||
try {
|
||||
config.onChange?.();
|
||||
} catch {}
|
||||
};
|
||||
let buffered = Buffer.alloc(0),
|
||||
stopped = false,
|
||||
failure;
|
||||
@@ -244,6 +249,7 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
// physical memory remains the supervising process/cgroup's contract.
|
||||
if (rss <= 128 * 1024 * 1024) {
|
||||
idleEngines.push(engine);
|
||||
engine.idleUntil = Date.now() + limits.engineIdleMs;
|
||||
engine.idleTimer = setTimeout(() => void destroyEngine(engine).catch(fail), limits.engineIdleMs);
|
||||
} else await destroyEngine(engine);
|
||||
} else await destroyEngine(engine);
|
||||
@@ -300,6 +306,7 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
} finally {
|
||||
engines.delete(engine);
|
||||
await engine.release?.();
|
||||
changed();
|
||||
}
|
||||
})();
|
||||
return engine.destroying;
|
||||
@@ -418,6 +425,7 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
},
|
||||
);
|
||||
metrics.starts++;
|
||||
changed();
|
||||
engine.exited = new Promise((resolve) => {
|
||||
engine.child.once("exit", resolve);
|
||||
engine.child.once("error", resolve);
|
||||
@@ -462,6 +470,9 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
executionMs: call.executionMs ?? null,
|
||||
totalMs: performance.now() - call.receivedAt,
|
||||
};
|
||||
metrics.lastFailure =
|
||||
reply.status === "failed" && /^[A-Z0-9_]{1,128}$/.test(reply.error?.code) ? reply.error.code : null;
|
||||
changed();
|
||||
send(call.cancellationReply ?? reply);
|
||||
pump();
|
||||
})());
|
||||
@@ -470,6 +481,7 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
const { message } = call;
|
||||
call.startedAt = performance.now();
|
||||
active.set(message.invocation, call);
|
||||
changed();
|
||||
const terminate = (code) => {
|
||||
if (!call.open) return;
|
||||
void finish(call, fixedError(code), {
|
||||
@@ -687,6 +699,9 @@ export async function serveRestrictedRegistry(config, io = process) {
|
||||
queued: queued.length,
|
||||
engines: engines.size,
|
||||
idle: idleEngines.length,
|
||||
idleDeadline: idleEngines.length
|
||||
? new Date(Math.min(...idleEngines.map((engine) => engine.idleUntil))).toISOString()
|
||||
: null,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user