bench/fix: prefix bracketed cloud bench logs with T+ timestamps
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + E2E) (push) Failing after 0s

This commit is contained in:
2026-03-20 18:03:34 +01:00
parent f7ff3a4bd7
commit 4bd8663126

View File

@@ -470,11 +470,11 @@ function formatEuro(value) {
}
function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
let phaseZeroMs = null;
let phaseZeroMs;
const prefix = () => {
if (phaseZeroMs === null) {
return "T+0m";
if (!Number.isFinite(phaseZeroMs)) {
return null;
}
const elapsedMinutes = Math.floor((Date.now() - phaseZeroMs) / 60000);
@@ -483,6 +483,10 @@ function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
};
return {
getPrefix() {
return prefix();
},
setPrepOffsetNow() {
phaseZeroMs = Date.now() + prepOffsetMinutes * 60_000;
},
@@ -492,11 +496,46 @@ function createPhaseLogger(prepOffsetMinutes = PHASE_PREP_OFFSET_MINUTES) {
},
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) {
const compatible = [];
@@ -1542,6 +1581,7 @@ async function main() {
await ensureLocalPrereqs(opts);
const phaseLogger = createPhaseLogger();
const restoreBracketedLogPrefix = installBracketedLogPrefix(() => phaseLogger.getPrefix());
const datacenterChoice = await chooseDatacenter(opts);
opts.datacenter = datacenterChoice.name;
@@ -1668,6 +1708,8 @@ async function main() {
});
sshKeyCreated = true;
// Start execution clock at T+0 immediately before cloud server creation.
phaseLogger.setZeroNow();
phaseLogger.logPhase("[phase] create cloud servers in parallel");
const serverName = `${runId}-server`;
@@ -1738,8 +1780,6 @@ async function main() {
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");
await Promise.all([
waitForSsh(serverIp, keyPath),
@@ -2236,6 +2276,7 @@ async function main() {
console.log(`[done] ssh key kept: ${keyName}`);
}
} finally {
restoreBracketedLogPrefix();
removeSignalHandlers();
await cleanup();
}