e0253fba48
Run UX: when start_run throws before/around launch (e.g. ENOSPC creating the temp dir — the box is out of disk), the run was marked "failed" with empty output. Now the exception is broadcast + written to the run output/results so the run view shows e.g. "[run error] OSError: [Errno 28] No space left on device" instead of a blank failure. Widget audit follow-ups (no broken links were found; these are consistency): - host_resource_history widget now charts root (/) disk, consistent with the host panel (was the opaque "disk worst"). - host_resources widget: tooltip on the health dot explaining it warns on the worst mount while the number shows root. - status_overview widget detail_url /status → /status/ (avoid redirect). - Normalize ad-hoc widget empty-states to the shared .empty style (wording, which distinguishes "configured" vs "data yet", preserved). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
821 B
HTML
25 lines
821 B
HTML
<div class="widget-history">
|
|
<h3>{{ host.name }} — last {{ hours }}h</h3>
|
|
<canvas id="host-agent-chart-{{ host.id }}" width="600" height="200"></canvas>
|
|
<script>
|
|
(function() {
|
|
const ctx = document.getElementById("host-agent-chart-{{ host.id }}").getContext("2d");
|
|
const series = {{ series|tojson }};
|
|
new Chart(ctx, {
|
|
type: "line",
|
|
data: {
|
|
datasets: [
|
|
{ label: "CPU %", data: series.cpu_pct.map(p => ({x: p.t, y: p.v})) },
|
|
{ label: "Mem %", data: series.mem_used_pct.map(p => ({x: p.t, y: p.v})) },
|
|
{ label: "Disk / %", data: series.disk_root.map(p => ({x: p.t, y: p.v})) },
|
|
],
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
scales: { x: { type: "time" }, y: { min: 0, max: 100 } },
|
|
},
|
|
});
|
|
})();
|
|
</script>
|
|
</div>
|