feat: implement retry mechanism for Proxmox stats retrieval to ensure data availability for charts
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user