diff --git a/package.json b/package.json
index 2520ff4..af0f27f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "site-gateway",
- "version": "0.11.67",
+ "version": "0.11.68",
"private": true,
"description": "Site Gateway: simple self-hosted website publishing, reverse proxying, and automatic HTTPS.",
"type": "module",
diff --git a/src/public/app.js b/src/public/app.js
index 4c00c12..cb78327 100644
--- a/src/public/app.js
+++ b/src/public/app.js
@@ -281,7 +281,8 @@ function renderPerformance() {
$("#performance-sparkline").innerHTML = points.length ? `${gridLines}` : "";
if (!points.length) $("#performance-sparkline-labels").innerHTML = 'No request data for this window yet.';
const routes = data.routes || [];
- $("#performance-rows").innerHTML = routes.length ? routes.map(route => `
| ${escapeHtml(route.host)} | ${route.hourRequests} | ${route.dayRequests} | ${route.dayErrors ? `${route.dayErrors}` : "0"} | ${route.dayAvgMs == null ? "—" : `${route.dayAvgMs} ms`} |
`).join("") : '| No requests have been logged yet. |
';
+ const countCell = (count, errors) => `${count}${errors ? ` · ${errors}` : ""}`;
+ $("#performance-rows").innerHTML = routes.length ? routes.map(route => `| ${escapeHtml(route.host)} | ${countCell(route.hourRequests, route.hourErrors)} | ${countCell(route.dayRequests, route.dayErrors)} | ${route.dayAvgMs == null ? "—" : `${route.dayAvgMs} ms`} |
`).join("") : '| No requests have been logged yet. |
';
if (selected) $(`#performance-rows tr.row-highlight`)?.scrollIntoView({ block: "nearest" });
}
diff --git a/src/public/index.html b/src/public/index.html
index b05b7b5..2eb9299 100644
--- a/src/public/index.html
+++ b/src/public/index.html
@@ -155,7 +155,7 @@
Per-route
Throughput by domain
Requests, error rate, and average response time for each configured domain.
-
+
diff --git a/src/public/styles.css b/src/public/styles.css
index 509e1de..5656ba8 100644
--- a/src/public/styles.css
+++ b/src/public/styles.css
@@ -272,9 +272,9 @@ select{appearance:none!important;-webkit-appearance:none!important;background-re
.performance-table{width:100%;border-collapse:collapse;font-size:.82rem;table-layout:fixed}
.performance-table th,.performance-table td{padding:13px 15px;text-align:left;border-top:1px solid var(--line);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.performance-table thead th{border-top:0;color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;white-space:normal}
-.performance-table th:nth-child(1),.performance-table td:nth-child(1){width:32%}
-.performance-table th:nth-child(2),.performance-table td:nth-child(2){width:14%}
-.performance-table th:nth-child(3),.performance-table td:nth-child(3){width:14%}
-.performance-table th:nth-child(4),.performance-table td:nth-child(4){width:19%;text-align:center}
-.performance-table th:nth-child(5),.performance-table td:nth-child(5){width:21%}
-@media(max-width:760px){.performance-table th:nth-child(2),.performance-table td:nth-child(2),.performance-table th:nth-child(3),.performance-table td:nth-child(3){display:none}.performance-table th:nth-child(1),.performance-table td:nth-child(1){width:46%}.performance-table th:nth-child(4),.performance-table td:nth-child(4){width:27%}.performance-table th:nth-child(5),.performance-table td:nth-child(5){width:27%}}
+.performance-table th:nth-child(1),.performance-table td:nth-child(1){width:34%}
+.performance-table th:nth-child(2),.performance-table td:nth-child(2){width:20%;text-align:center}
+.performance-table th:nth-child(3),.performance-table td:nth-child(3){width:23%;text-align:center}
+.performance-table th:nth-child(4),.performance-table td:nth-child(4){width:23%;text-align:center}
+.performance-table .count-divider{color:var(--muted);margin:0 2px}
+@media(max-width:760px){.performance-table th:nth-child(2),.performance-table td:nth-child(2){display:none}.performance-table th:nth-child(1),.performance-table td:nth-child(1){width:40%}.performance-table th:nth-child(3),.performance-table td:nth-child(3){width:30%}.performance-table th:nth-child(4),.performance-table td:nth-child(4){width:30%}}