diff --git a/extensions/Servers/Proxmox/views/statistics.blade.php b/extensions/Servers/Proxmox/views/statistics.blade.php index a597a4ae3..794e6c424 100644 --- a/extensions/Servers/Proxmox/views/statistics.blade.php +++ b/extensions/Servers/Proxmox/views/statistics.blade.php @@ -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); }