Fix dashboard node charts for clusters showing all nodes correctly

- Changed logic to process ALL nodes from cluster, not just the first one
- Added processedClusterIPs set to avoid duplicate processing of cluster servers
- Now clusters show all nodes (pve1, pve2, pve3) instead of duplicating first node
- Fixed issue where node names were incorrect after node reconnection
This commit is contained in:
2025-12-15 21:05:31 +05:00
parent ceba95b1ef
commit dae3315e36

View File

@@ -75,10 +75,17 @@ async function loadProxmoxNodesStats() {
// Собрать все данные сначала, потом отрисовать // Собрать все данные сначала, потом отрисовать
const chartsToRender = []; const chartsToRender = [];
const seenNodes = new Set(); // Для дедупликации нод кластера const seenNodes = new Set(); // Для дедупликации нод кластера
const processedClusterIPs = new Set(); // Для отслеживания обработанных кластеров
// Загрузить данные для каждого сервера // Загрузить данные для каждого сервера
for (const server of onlineServers) { for (const server of onlineServers) {
try { try {
// Если это кластер и мы уже обработали сервер с таким IP - пропускаем
// (все серверы кластера видят одни и те же ноды)
if (processedClusterIPs.has(server.ip_address)) {
continue;
}
// Получить список нод // Получить список нод
const nodesResponse = await fetchWithAuth(`/proxmox/api/${server.id}/nodes`); const nodesResponse = await fetchWithAuth(`/proxmox/api/${server.id}/nodes`);
if (!nodesResponse || !nodesResponse.ok) { if (!nodesResponse || !nodesResponse.ok) {
@@ -94,9 +101,14 @@ async function loadProxmoxNodesStats() {
continue; continue;
} }
// Для кластеров берём только ПЕРВУЮ ноду, т.к. все серверы кластера имеют одинаковые ноды // Если это кластер (более одной ноды) - запомнить IP чтобы не обрабатывать дубликаты
// Используем IP сервера + имя ноды для дедупликации if (nodes.length > 1) {
const node = nodes[0].node; processedClusterIPs.add(server.ip_address);
}
// Обработать ВСЕ ноды этого сервера
for (const nodeInfo of nodes) {
const node = nodeInfo.node;
const nodeKey = `${server.ip_address}-${node}`; const nodeKey = `${server.ip_address}-${node}`;
if (seenNodes.has(nodeKey)) { if (seenNodes.has(nodeKey)) {
@@ -126,6 +138,7 @@ async function loadProxmoxNodesStats() {
nodeName: node, nodeName: node,
data: data data: data
}); });
}
} catch (error) { } catch (error) {
console.error(`Error loading stats for server ${server.id}:`, error); console.error(`Error loading stats for server ${server.id}:`, error);