Terminal / scripts /lib /report-engine.mjs
Baida07's picture
sync: 190 file da Baida98/AI@e58203cc (2026-08-26 09:16 UTC) [deploy-all] (#109)
213ca88
Raw
History Blame
1.28 kB
import { mkdirSync, renameSync, writeFileSync } from "node:fs";
import { join, resolve } from "node:path";
const DEFAULT_REPORT_DIRECTORY = "/tmp/agente-ai";
function safeSegment(value) {
return String(value ?? "benchmark")
.trim()
.replace(/[^a-zA-Z0-9._-]+/g, "-")
.replace(/^-+|-+$/g, "")
.slice(0, 96) || "benchmark";
}
/**
* Persiste un artefatto diagnostico del runner senza incidere sui calcoli.
* Il write-then-rename evita file JSON parziali in caso di interruzione.
*/
export function saveBenchmarkReport(reportName, payload) {
const reportDirectory = resolve(process.env.BENCHMARK_REPORT_DIR || DEFAULT_REPORT_DIRECTORY);
mkdirSync(reportDirectory, { recursive: true });
const safeName = safeSegment(reportName);
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
const finalPath = join(reportDirectory, `${safeName}-${stamp}.json`);
const temporaryPath = `${finalPath}.${process.pid}.tmp`;
const document = {
schemaVersion: "benchmark-report-v1",
generatedAt: new Date().toISOString(),
reportName: safeName,
...payload,
};
writeFileSync(temporaryPath, `${JSON.stringify(document, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
renameSync(temporaryPath, finalPath);
return finalPath;
}