完善serverless部署环境
This commit is contained in:
@@ -138,7 +138,10 @@
|
||||
let siteThemeQuery = null; // For media query cleanup
|
||||
let siteThemeHandler = null;
|
||||
let backgroundIntervals = []; // To track setIntervals
|
||||
let realtimeIntervalId = null;
|
||||
let lastMapDataHash = ''; // Cache for map rendering optimization
|
||||
const appRuntime = window.APP_RUNTIME || {};
|
||||
const prefersPollingRealtime = appRuntime.realtimeMode === 'polling';
|
||||
|
||||
// Load sort state from localStorage or use default
|
||||
let currentSort = { column: 'up', direction: 'desc' };
|
||||
@@ -544,12 +547,30 @@
|
||||
loadSiteSettings();
|
||||
|
||||
// Track intervals for resource management
|
||||
initWebSocket();
|
||||
if (prefersPollingRealtime) {
|
||||
startRealtimePolling();
|
||||
} else {
|
||||
initWebSocket();
|
||||
backgroundIntervals.push(setInterval(fetchLatency, REFRESH_INTERVAL));
|
||||
}
|
||||
backgroundIntervals.push(setInterval(fetchNetworkHistory, NETWORK_HISTORY_INTERVAL));
|
||||
backgroundIntervals.push(setInterval(fetchLatency, REFRESH_INTERVAL));
|
||||
}
|
||||
|
||||
// ---- Real-time WebSocket ----
|
||||
function stopRealtimePolling() {
|
||||
if (realtimeIntervalId) {
|
||||
clearInterval(realtimeIntervalId);
|
||||
realtimeIntervalId = null;
|
||||
}
|
||||
}
|
||||
|
||||
function startRealtimePolling() {
|
||||
if (realtimeIntervalId) return;
|
||||
fetchRealtimeOverview();
|
||||
realtimeIntervalId = setInterval(fetchRealtimeOverview, REFRESH_INTERVAL);
|
||||
backgroundIntervals.push(realtimeIntervalId);
|
||||
}
|
||||
|
||||
function initWebSocket() {
|
||||
if (isWsConnecting) return;
|
||||
isWsConnecting = true;
|
||||
@@ -567,6 +588,7 @@
|
||||
|
||||
ws.onopen = () => {
|
||||
isWsConnecting = false;
|
||||
stopRealtimePolling();
|
||||
console.log('WS connection established');
|
||||
};
|
||||
|
||||
@@ -587,6 +609,7 @@
|
||||
|
||||
ws.onclose = () => {
|
||||
isWsConnecting = false;
|
||||
startRealtimePolling();
|
||||
console.log('WS connection closed. Reconnecting in 5s...');
|
||||
setTimeout(initWebSocket, 5000);
|
||||
};
|
||||
@@ -791,6 +814,19 @@
|
||||
}
|
||||
|
||||
// ---- Fetch Metrics ----
|
||||
async function fetchRealtimeOverview(force = false) {
|
||||
try {
|
||||
const url = `/api/realtime/overview${force ? '?force=true' : ''}`;
|
||||
const response = await fetch(url);
|
||||
const data = await response.json();
|
||||
allServersData = data.servers || [];
|
||||
currentLatencies = data.latencies || [];
|
||||
updateDashboard(data);
|
||||
} catch (err) {
|
||||
console.error('Error fetching realtime overview:', err);
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchMetrics(force = false) {
|
||||
try {
|
||||
const url = `/api/metrics/overview${force ? '?force=true' : ''}`;
|
||||
|
||||
Reference in New Issue
Block a user