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 networkChart;
|
||||||
var diskChart;
|
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() {
|
function initializeCharts() {
|
||||||
// Destroy existing charts if they exist
|
// Destroy existing charts if they exist
|
||||||
if (cpuChart) {
|
if (cpuChart) {
|
||||||
@@ -4299,6 +4350,17 @@
|
|||||||
var networkElement = document.querySelector("#network-chart");
|
var networkElement = document.querySelector("#network-chart");
|
||||||
var diskElement = document.querySelector("#disk-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) {
|
if (cpuElement) {
|
||||||
cpuChart = new ApexCharts(cpuElement, cpuOptions);
|
cpuChart = new ApexCharts(cpuElement, cpuOptions);
|
||||||
cpuChart.render();
|
cpuChart.render();
|
||||||
@@ -4319,7 +4381,10 @@
|
|||||||
diskChart.render();
|
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) {
|
} catch (e) {
|
||||||
console.error('Error updating CPU chart:', e, eventData);
|
console.error('Error updating CPU chart:', e, eventData);
|
||||||
}
|
}
|
||||||
@@ -4388,6 +4456,9 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
// Mark that this chart has successfully received data
|
||||||
|
memoryChartHasData = true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Error updating Memory chart:', e, eventData);
|
console.error('Error updating Memory chart:', e, eventData);
|
||||||
}
|
}
|
||||||
@@ -4424,6 +4495,9 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
// Mark that this chart has successfully received data
|
||||||
|
networkChartHasData = true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Error updating Network chart:', e, eventData);
|
console.error('Error updating Network chart:', e, eventData);
|
||||||
}
|
}
|
||||||
@@ -4460,6 +4534,9 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
// Mark that this chart has successfully received data
|
||||||
|
diskChartHasData = true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Error updating Disk chart:', e, eventData);
|
console.error('Error updating Disk chart:', e, eventData);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user