From 7592c950215c90f7104ea81af040efb9cd331398 Mon Sep 17 00:00:00 2001 From: Pulse Monitor Date: Mon, 25 Aug 2025 14:11:58 +0000 Subject: [PATCH] fix: prevent duplicate node names in alert IDs for single-node setups When the instance name equals the node name (common in single-node setups), avoid generating redundant IDs like "pve-pve-100" by using just "pve-100". This fixes alert acknowledgment issues where the UI couldn't match alert IDs due to the duplicate node name pattern. Addresses #353 --- internal/monitoring/monitor.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/internal/monitoring/monitor.go b/internal/monitoring/monitor.go index b09036332..7771a04d2 100644 --- a/internal/monitoring/monitor.go +++ b/internal/monitoring/monitor.go @@ -899,7 +899,13 @@ func (m *Monitor) pollVMsAndContainersEfficient(ctx context.Context, instanceNam var allContainers []models.Container for _, res := range resources { - guestID := fmt.Sprintf("%s-%s-%d", instanceName, res.Node, res.VMID) + // Avoid duplicating node name in ID when instance name equals node name + var guestID string + if instanceName == res.Node { + guestID = fmt.Sprintf("%s-%d", res.Node, res.VMID) + } else { + guestID = fmt.Sprintf("%s-%s-%d", instanceName, res.Node, res.VMID) + } // Debug log the resource type log.Debug(). @@ -1267,7 +1273,13 @@ func (m *Monitor) pollVMsWithNodes(ctx context.Context, instanceName string, cli } // Calculate I/O rates - guestID := fmt.Sprintf("%s-%s-%d", instanceName, node.Node, vm.VMID) + // Avoid duplicating node name in ID when instance name equals node name + var guestID string + if instanceName == node.Node { + guestID = fmt.Sprintf("%s-%d", node.Node, vm.VMID) + } else { + guestID = fmt.Sprintf("%s-%s-%d", instanceName, node.Node, vm.VMID) + } currentMetrics := IOMetrics{ DiskRead: int64(vm.DiskRead), DiskWrite: int64(vm.DiskWrite), @@ -1566,7 +1578,13 @@ func (m *Monitor) pollContainersWithNodes(ctx context.Context, instanceName stri } // Calculate I/O rates - guestID := fmt.Sprintf("%s-%s-%d", instanceName, node.Node, ct.VMID) + // Avoid duplicating node name in ID when instance name equals node name + var guestID string + if instanceName == node.Node { + guestID = fmt.Sprintf("%s-%d", node.Node, ct.VMID) + } else { + guestID = fmt.Sprintf("%s-%s-%d", instanceName, node.Node, ct.VMID) + } currentMetrics := IOMetrics{ DiskRead: int64(ct.DiskRead), DiskWrite: int64(ct.DiskWrite),