feat: implement retry mechanism for Proxmox stats retrieval to ensure data availability for charts

This commit is contained in:
2025-12-01 08:05:53 -05:00
parent 43424ef15f
commit 970e7cd10a

View File

@@ -4260,6 +4260,57 @@
var networkChart;
var diskChart;
// Track which charts are present on the page and whether they have received data.
var cpuChartExpected = false;
var memoryChartExpected = false;
var networkChartExpected = false;
var diskChartExpected = false;
var cpuChartHasData = false;
var memoryChartHasData = false;
var networkChartHasData = false;
var diskChartHasData = false;
var statsRetryAttempts = 0;
var maxStatsRetryAttempts = 5;
function dispatchStatsWithRetry() {
function requestStatsOnce() {
statsRetryAttempts++;
try {
console.log('Requesting Proxmox stats (attempt ' + statsRetryAttempts + ')');
Livewire.dispatch('proxmox:stats');
} catch (e) {
console.warn('Failed to dispatch Proxmox stats event:', e);
}
// After a short delay, check if expected charts have received any data.
setTimeout(function () {
var allExpectedChartsHaveData =
(!cpuChartExpected || cpuChartHasData) &&
(!memoryChartExpected || memoryChartHasData) &&
(!networkChartExpected || networkChartHasData) &&
(!diskChartExpected || diskChartHasData);
if (allExpectedChartsHaveData) {
console.log('All expected charts have received data – stopping stats retries.');
return;
}
if (statsRetryAttempts < maxStatsRetryAttempts) {
requestStatsOnce();
} else {
console.warn('Max stats retry attempts reached; some charts may not have data.');
}
}, 3000);
}
// Start the retry loop
statsRetryAttempts = 0;
requestStatsOnce();
}
function initializeCharts() {
// Destroy existing charts if they exist
if (cpuChart) {
@@ -4299,6 +4350,17 @@
var networkElement = document.querySelector("#network-chart");
var diskElement = document.querySelector("#disk-chart");
cpuChartExpected = !!cpuElement;
memoryChartExpected = !!memoryElement;
networkChartExpected = !!networkElement;
diskChartExpected = !!diskElement;
// Reset data flags on re-initialization
cpuChartHasData = false;
memoryChartHasData = false;
networkChartHasData = false;
diskChartHasData = false;
if (cpuElement) {
cpuChart = new ApexCharts(cpuElement, cpuOptions);
cpuChart.render();
@@ -4319,7 +4381,10 @@
diskChart.render();
}
Livewire.dispatch('proxmox:stats');
// After charts are initialized, request stats with a short
// retry loop to ensure data is received even if the first
// request or event is missed.
dispatchStatsWithRetry();
});
}
@@ -4352,6 +4417,9 @@
}
}),
}]);
// Mark that this chart has successfully received data
cpuChartHasData = true;
} catch (e) {
console.error('Error updating CPU chart:', e, eventData);
}
@@ -4388,6 +4456,9 @@
}
})
}]);
// Mark that this chart has successfully received data
memoryChartHasData = true;
} catch (e) {
console.error('Error updating Memory chart:', e, eventData);
}
@@ -4424,6 +4495,9 @@
}
})
}]);
// Mark that this chart has successfully received data
networkChartHasData = true;
} catch (e) {
console.error('Error updating Network chart:', e, eventData);
}
@@ -4460,6 +4534,9 @@
}
})
}]);
// Mark that this chart has successfully received data
diskChartHasData = true;
} catch (e) {
console.error('Error updating Disk chart:', e, eventData);
}