bench/fix: prefix bracketed cloud bench logs with T+ timestamps
This commit is contained in:
@@ -470,11 +470,11 @@ function formatEuro(value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
|
function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
|
||||||
let phaseZeroMs = null;
|
let phaseZeroMs;
|
||||||
|
|
||||||
const prefix = () => {
|
const prefix = () => {
|
||||||
if (phaseZeroMs === null) {
|
if (!Number.isFinite(phaseZeroMs)) {
|
||||||
return "T+0m";
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const elapsedMinutes = Math.floor((Date.now() - phaseZeroMs) / 60000);
|
const elapsedMinutes = Math.floor((Date.now() - phaseZeroMs) / 60000);
|
||||||
@@ -483,6 +483,10 @@ function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
getPrefix() {
|
||||||
|
return prefix();
|
||||||
|
},
|
||||||
|
|
||||||
setPrepOffsetNow() {
|
setPrepOffsetNow() {
|
||||||
phaseZeroMs = Date.now() + prepOffsetMinutes * 60_000;
|
phaseZeroMs = Date.now() + prepOffsetMinutes * 60_000;
|
||||||
},
|
},
|
||||||
@@ -492,11 +496,46 @@ function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
logPhase(message) {
|
logPhase(message) {
|
||||||
console.log(`${prefix()} ${message}`);
|
console.log(message);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function installBracketedLogPrefix(getPrefix) {
|
||||||
|
const methods = ["log", "warn", "error"];
|
||||||
|
const originals = new Map();
|
||||||
|
|
||||||
|
for (const method of methods) {
|
||||||
|
const original = console[method].bind(console);
|
||||||
|
originals.set(method, original);
|
||||||
|
|
||||||
|
console[method] = (...args) => {
|
||||||
|
if (
|
||||||
|
args.length > 0
|
||||||
|
&& typeof args[0] === "string"
|
||||||
|
&& /^\s*\[[^\]]+\]/.test(args[0])
|
||||||
|
) {
|
||||||
|
const prefix = getPrefix();
|
||||||
|
if (prefix) {
|
||||||
|
original(`${prefix} ${args[0]}`, ...args.slice(1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
original(...args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
for (const method of methods) {
|
||||||
|
const original = originals.get(method);
|
||||||
|
if (original) {
|
||||||
|
console[method] = original;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function compatibleDatacenterChoices(datacenters, serverType, clientType, clientCount) {
|
function compatibleDatacenterChoices(datacenters, serverType, clientType, clientCount) {
|
||||||
const compatible = [];
|
const compatible = [];
|
||||||
|
|
||||||
@@ -1542,6 +1581,7 @@ async function main() {
|
|||||||
await ensureLocalPrereqs(opts);
|
await ensureLocalPrereqs(opts);
|
||||||
|
|
||||||
const phaseLogger = createPhaseLogger();
|
const phaseLogger = createPhaseLogger();
|
||||||
|
const restoreBracketedLogPrefix = installBracketedLogPrefix(() => phaseLogger.getPrefix());
|
||||||
|
|
||||||
const datacenterChoice = await chooseDatacenter(opts);
|
const datacenterChoice = await chooseDatacenter(opts);
|
||||||
opts.datacenter = datacenterChoice.name;
|
opts.datacenter = datacenterChoice.name;
|
||||||
@@ -1668,6 +1708,8 @@ async function main() {
|
|||||||
});
|
});
|
||||||
sshKeyCreated = true;
|
sshKeyCreated = true;
|
||||||
|
|
||||||
|
// Start execution clock at T+0 immediately before cloud server creation.
|
||||||
|
phaseLogger.setZeroNow();
|
||||||
phaseLogger.logPhase("[phase] create cloud servers in parallel");
|
phaseLogger.logPhase("[phase] create cloud servers in parallel");
|
||||||
|
|
||||||
const serverName = `${runId}-server`;
|
const serverName = `${runId}-server`;
|
||||||
@@ -1738,8 +1780,6 @@ async function main() {
|
|||||||
ip: c.server.public_net.ipv4.ip,
|
ip: c.server.public_net.ipv4.ip,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Reset phase clock to T+0 when cloud servers are successfully created.
|
|
||||||
phaseLogger.setZeroNow();
|
|
||||||
phaseLogger.logPhase("[phase] wait for SSH");
|
phaseLogger.logPhase("[phase] wait for SSH");
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
waitForSsh(serverIp, keyPath),
|
waitForSsh(serverIp, keyPath),
|
||||||
@@ -2236,6 +2276,7 @@ async function main() {
|
|||||||
console.log(`[done] ssh key kept: ${keyName}`);
|
console.log(`[done] ssh key kept: ${keyName}`);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
restoreBracketedLogPrefix();
|
||||||
removeSignalHandlers();
|
removeSignalHandlers();
|
||||||
await cleanup();
|
await cleanup();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user