/*
* SysDeck - Benchmark Panel (v0.0.11)
* Author: Jeremy Anderson (https://dcos.net)
*
* System benchmarking via sysbench. Attributes the cockpit-benchmark
* plugin (MIT, ealier) whose standalone plugin lives at
* https://github.com/ealier/cockpit-benchmark.
*
* This panel invokes sysbench via cockpit.spawn as a separate process —
* no cockpit-benchmark or sysbench code is bundled. sysbench is GPL-2.0
* licensed; the suite (MIT) and sysbench remain independent programs.
*
* Shows available tests, run controls, and results history.
*
* v0.1.4 SECURITY: raw sysbench output (result.raw — stdout+stderr,
* includes echoed test names) and spawn error messages are untrusted
* tool output; both previously landed in innerHTML unescaped (0.3.0
* audit). Now escaped; the numeric fields are formatted to strings
* before escaping too.
*/
function escapeHtml(s) {
return String(s == null ? '' : s)
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
export async function mount(panel, { bridge, EventBus }) {
panel.innerHTML = renderSkeleton();
let tests = [];
try {
tests = await bridge.benchmark.listTests();
} catch (err) {
panel.innerHTML = renderError(err);
return;
}
panel.innerHTML = `
sysbench + cockpit-benchmark integrationSystem Benchmark
| Test | Tool | Actions |
|---|---|---|
| ${escapeHtml(t.name)} | ${escapeHtml(t.tool)} | |
| No benchmarks available. Install sysbench. | ||
Events/sec: ${escapeHtml(result.events_per_sec ?? 'N/A')}
Avg latency: ${result.latency_ms != null ? escapeHtml(result.latency_ms.toFixed(2)) + ' ms' : 'N/A'}
${escapeHtml(result.raw || 'N/A')}${escapeHtml(result)}`;
} catch (err) {
resultsDiv.innerHTML = `${escapeHtml(err.message || err)}`;
}
btn.disabled = false;
});
});
panel.querySelector('#btn-benchmark-refresh')?.addEventListener('click', () => {
mount(panel, { bridge, EventBus });
});
}
function renderSkeleton() {
return `${escapeHtml(err.message || err)}. Install sysbench for system benchmarking.
cockpit-benchmark (MIT) by ealier — https://github.com/ealier/cockpit-benchmark
sysbench (GPL-2.0) — https://github.com/akopytov/sysbench