优化显示

This commit is contained in:
CN-JS-HuiBai
2026-04-04 18:17:19 +08:00
parent 67bf24bdd3
commit 65eae5574f
2 changed files with 10 additions and 10 deletions

View File

@@ -328,7 +328,6 @@
</td> </td>
<td> <td>
<div style="color: var(--text-primary); font-weight: 600; font-family: var(--font-sans);">${escapeHtml(server.job)}</div> <div style="color: var(--text-primary); font-weight: 600; font-family: var(--font-sans);">${escapeHtml(server.job)}</div>
<div style="font-size: 0.65rem; color: var(--text-muted); opacity: 0.8;">${escapeHtml(server.instance)}</div>
</td> </td>
<td>${escapeHtml(server.source)}</td> <td>${escapeHtml(server.source)}</td>
<td> <td>

View File

@@ -42,18 +42,18 @@ async function testConnection(url) {
// Using native fetch to avoid follow-redirects/axios "protocol mismatch" issues in some Node environments // Using native fetch to avoid follow-redirects/axios "protocol mismatch" issues in some Node environments
const controller = new AbortController(); const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), QUERY_TIMEOUT); const timer = setTimeout(() => controller.abort(), QUERY_TIMEOUT);
// Node native fetch - handles http/https automatically // Node native fetch - handles http/https automatically
const res = await fetch(`${normalized}/api/v1/status/buildinfo`, { const res = await fetch(`${normalized}/api/v1/status/buildinfo`, {
signal: controller.signal signal: controller.signal
}); });
clearTimeout(timer); clearTimeout(timer);
if (!res.ok) { if (!res.ok) {
throw new Error(`Prometheus returned HTTP ${res.status}`); throw new Error(`Prometheus returned HTTP ${res.status}`);
} }
const data = await res.json(); const data = await res.json();
return data?.data?.version || 'unknown'; return data?.data?.version || 'unknown';
} catch (err) { } catch (err) {
@@ -74,17 +74,17 @@ async function query(baseUrl, expr) {
const params = new URLSearchParams({ query: expr }); const params = new URLSearchParams({ query: expr });
const controller = new AbortController(); const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), QUERY_TIMEOUT); const timer = setTimeout(() => controller.abort(), QUERY_TIMEOUT);
const res = await fetch(`${url}/api/v1/query?${params.toString()}`, { const res = await fetch(`${url}/api/v1/query?${params.toString()}`, {
signal: controller.signal signal: controller.signal
}); });
clearTimeout(timer); clearTimeout(timer);
if (!res.ok) { if (!res.ok) {
throw new Error(`Prometheus returned HTTP ${res.status}`); throw new Error(`Prometheus returned HTTP ${res.status}`);
} }
const data = await res.json(); const data = await res.json();
if (data.status !== 'success') { if (data.status !== 'success') {
throw new Error(`Prometheus query failed: ${data.error || 'unknown error'}`); throw new Error(`Prometheus query failed: ${data.error || 'unknown error'}`);
@@ -107,17 +107,17 @@ async function queryRange(baseUrl, expr, start, end, step) {
const params = new URLSearchParams({ query: expr, start, end, step }); const params = new URLSearchParams({ query: expr, start, end, step });
const controller = new AbortController(); const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), QUERY_TIMEOUT); const timer = setTimeout(() => controller.abort(), QUERY_TIMEOUT);
const res = await fetch(`${url}/api/v1/query_range?${params.toString()}`, { const res = await fetch(`${url}/api/v1/query_range?${params.toString()}`, {
signal: controller.signal signal: controller.signal
}); });
clearTimeout(timer); clearTimeout(timer);
if (!res.ok) { if (!res.ok) {
throw new Error(`Prometheus returned HTTP ${res.status}`); throw new Error(`Prometheus returned HTTP ${res.status}`);
} }
const data = await res.json(); const data = await res.json();
if (data.status !== 'success') { if (data.status !== 'success') {
throw new Error(`Prometheus range query failed: ${data.error || 'unknown error'}`); throw new Error(`Prometheus range query failed: ${data.error || 'unknown error'}`);
@@ -180,6 +180,7 @@ async function getOverviewMetrics(url, sourceName) {
const getOrCreate = (metric) => { const getOrCreate = (metric) => {
const key = metric.instance; const key = metric.instance;
if (!instances.has(key)) { if (!instances.has(key)) {
instances.set(key, { instances.set(key, {
instance: key, instance: key,