Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit e2cec2a

Browse files
committed
A fix the result output to README.md file.
1 parent 42f461f commit e2cec2a

File tree

1 file changed

+84
-40
lines changed

1 file changed

+84
-40
lines changed

analyze.js

Lines changed: 84 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#!/usr/bin/env node
2-
32
const { execSync } = require('child_process');
43
const fs = require('fs');
54
const path = require('path');
@@ -16,6 +15,7 @@ function extractMetric(file, metric) {
1615
}
1716

1817
function average(values) {
18+
if (values.length === 0) return 0;
1919
const sum = values.reduce((a, b) => parseFloat(a) + parseFloat(b), 0);
2020
return sum / values.length;
2121
}
@@ -42,10 +42,12 @@ servers.forEach((server, idx) => {
4242
const latencyVals = [];
4343
for (let j = 0; j < 3; j++) {
4444
const fileIdx = startIdx + j;
45-
const reqSec = extractMetric(resultFiles[fileIdx], "Requests/sec");
46-
const latency = extractMetric(resultFiles[fileIdx], "Latency");
47-
if (reqSec !== null) reqSecVals.push(reqSec);
48-
if (latency !== null) latencyVals.push(latency);
45+
if (fileIdx < resultFiles.length) {
46+
const reqSec = extractMetric(resultFiles[fileIdx], "Requests/sec");
47+
const latency = extractMetric(resultFiles[fileIdx], "Latency");
48+
if (reqSec !== null) reqSecVals.push(reqSec);
49+
if (latency !== null) latencyVals.push(latency);
50+
}
4951
}
5052
avgReqSecs[server] = average(reqSecVals);
5153
avgLatencies[server] = average(latencyVals);
@@ -54,25 +56,43 @@ servers.forEach((server, idx) => {
5456
const reqSecData = "/tmp/reqSec.dat";
5557
const latencyData = "/tmp/latency.dat";
5658

57-
fs.writeFileSync(reqSecData, "Server Value\n" + servers.map(server => `${server} ${avgReqSecs[server]}`).join('\n'));
58-
fs.writeFileSync(latencyData, "Server Value\n" + servers.map(server => `${server} ${avgLatencies[server]}`).join('\n'));
59+
try {
60+
fs.writeFileSync(reqSecData, "Server Value\n" + servers.map(server => `${server} ${avgReqSecs[server]}`).join('\n'));
61+
fs.writeFileSync(latencyData, "Server Value\n" + servers.map(server => `${server} ${avgLatencies[server]}`).join('\n'));
62+
} catch (error) {
63+
console.error(`Error writing data files: ${error.message}`);
64+
}
5965

6066
let whichBench = 1;
61-
if (resultFiles[0].startsWith("bench2")) {
62-
whichBench = 2;
63-
} else if (resultFiles[0].startsWith("bench3")) {
64-
whichBench = 3;
67+
if (resultFiles.length > 0) {
68+
if (resultFiles[0].startsWith("bench2")) {
69+
whichBench = 2;
70+
} else if (resultFiles[0].startsWith("bench3")) {
71+
whichBench = 3;
72+
}
6573
}
6674

6775
const reqSecHistogramFile = `req_sec_histogram${whichBench}.png`;
6876
const latencyHistogramFile = `latency_histogram${whichBench}.png`;
6977

7078
function getMaxValue(data) {
71-
return Math.max(...data.split('\n').slice(1).map(line => parseFloat(line.split(' ')[1])));
79+
try {
80+
return Math.max(...data.split('\n').slice(1).map(line => parseFloat(line.split(' ')[1])));
81+
} catch (error) {
82+
console.error(`Error getting max value: ${error.message}`);
83+
return 0;
84+
}
7285
}
7386

74-
const reqSecMax = getMaxValue(fs.readFileSync(reqSecData, 'utf-8')) * 1.2;
75-
const latencyMax = getMaxValue(fs.readFileSync(latencyData, 'utf-8')) * 1.2;
87+
let reqSecMax, latencyMax;
88+
try {
89+
reqSecMax = getMaxValue(fs.readFileSync(reqSecData, 'utf-8')) * 1.2;
90+
latencyMax = getMaxValue(fs.readFileSync(latencyData, 'utf-8')) * 1.2;
91+
} catch (error) {
92+
console.error(`Error reading data files: ${error.message}`);
93+
reqSecMax = 0;
94+
latencyMax = 0;
95+
}
7696

7797
const gnuplotScript = `
7898
set term pngcairo size 1280,720 enhanced font 'Courier,12'
@@ -94,19 +114,26 @@ plot '${latencyData}' using 2:xtic(1) title 'Latency'
94114
`;
95115

96116
const gnuplotScriptFile = '/tmp/gnuplot_script.gp';
97-
fs.writeFileSync(gnuplotScriptFile, gnuplotScript);
117+
try {
118+
fs.writeFileSync(gnuplotScriptFile, gnuplotScript);
119+
} catch (error) {
120+
console.error(`Error writing gnuplot script: ${error.message}`);
121+
}
98122

99123
try {
100124
execSync(`gnuplot ${gnuplotScriptFile}`, { stdio: 'inherit' });
101125
console.log('Gnuplot executed successfully');
102126
} catch (error) {
103127
console.error('Error executing gnuplot:', error.message);
104-
process.exit(1);
105128
}
106129

107130
const assetsDir = path.join(__dirname, "assets");
108131
if (!fs.existsSync(assetsDir)) {
109-
fs.mkdirSync(assetsDir);
132+
try {
133+
fs.mkdirSync(assetsDir);
134+
} catch (error) {
135+
console.error(`Error creating assets directory: ${error.message}`);
136+
}
110137
}
111138

112139
function moveFile(source, destination) {
@@ -138,11 +165,15 @@ const lastServerReqSecs = avgReqSecs[lastServer];
138165

139166
const resultsFile = "results.md";
140167

141-
if (!fs.existsSync(resultsFile) || fs.readFileSync(resultsFile, 'utf8').trim() === '') {
142-
fs.writeFileSync(resultsFile, `<!-- PERFORMANCE_RESULTS_START -->
168+
try {
169+
if (!fs.existsSync(resultsFile) || fs.readFileSync(resultsFile, 'utf8').trim() === '') {
170+
fs.writeFileSync(resultsFile, `<!-- PERFORMANCE_RESULTS_START -->
143171
144172
| Query | Server | Requests/sec | Latency (ms) | Relative |
145173
|-------:|--------:|--------------:|--------------:|---------:|`);
174+
}
175+
} catch (error) {
176+
console.error(`Error initializing results file: ${error.message}`);
146177
}
147178

148179
let resultsTable = "";
@@ -169,30 +200,43 @@ sortedServers.forEach((server) => {
169200
resultsTable += `\n|| [${formattedServerNames[server]}] | \`${formattedReqSecs}\` | \`${formattedLatencies}\` | \`${relativePerformance}x\` |`;
170201
});
171202

172-
fs.appendFileSync(resultsFile, resultsTable);
203+
try {
204+
fs.appendFileSync(resultsFile, resultsTable);
205+
} catch (error) {
206+
console.error(`Error appending to results file: ${error.message}`);
207+
}
173208

174209
if (whichBench === 3) {
175-
fs.appendFileSync(resultsFile, "\n\n<!-- PERFORMANCE_RESULTS_END -->");
176-
177-
const finalResults = fs
178-
.readFileSync(resultsFile, "utf-8")
179-
.replace(/(\r\n|\n|\r)/gm, "\\n");
180-
181-
const readmePath = "README.md";
182-
let readmeContent = fs.readFileSync(readmePath, "utf-8");
183-
const performanceResultsRegex =
184-
/<!-- PERFORMANCE_RESULTS_START -->[\s\S]*<!-- PERFORMANCE_RESULTS_END -->/;
185-
if (performanceResultsRegex.test(readmeContent)) {
186-
readmeContent = readmeContent.replace(
187-
performanceResultsRegex,
188-
finalResults
189-
);
190-
} else {
191-
readmeContent += `\n${finalResults}`;
210+
try {
211+
fs.appendFileSync(resultsFile, "\n\n<!-- PERFORMANCE_RESULTS_END -->");
212+
213+
const finalResults = fs
214+
.readFileSync(resultsFile, "utf-8")
215+
.replace(/\\/g, ''); // Remove backslashes
216+
217+
const readmePath = "README.md";
218+
let readmeContent = fs.readFileSync(readmePath, "utf-8");
219+
const performanceResultsRegex =
220+
/<!-- PERFORMANCE_RESULTS_START -->[\s\S]*<!-- PERFORMANCE_RESULTS_END -->/;
221+
if (performanceResultsRegex.test(readmeContent)) {
222+
readmeContent = readmeContent.replace(
223+
performanceResultsRegex,
224+
finalResults
225+
);
226+
} else {
227+
readmeContent += `\n${finalResults}`;
228+
}
229+
fs.writeFileSync(readmePath, readmeContent);
230+
console.log("README.md updated successfully");
231+
} catch (error) {
232+
console.error(`Error updating README: ${error.message}`);
192233
}
193-
fs.writeFileSync(readmePath, readmeContent);
194234
}
195235

196236
resultFiles.forEach((file) => {
197-
fs.unlinkSync(file);
198-
});
237+
try {
238+
fs.unlinkSync(file);
239+
} catch (error) {
240+
console.error(`Error deleting file ${file}: ${error.message}`);
241+
}
242+
});

0 commit comments

Comments
 (0)