Files
pulse/internal/monitoring/monitor_pve_node_vm_builder.go
T
pulse-triage[bot] 2df28d5877 Defer and coordinate Proxmox guest-agent reads around backup locks
Check every QGA read against fresh VM config locks, coordinate configured endpoint aliases and VM migration, discard in-flight backup payloads and cool down uncertain completions without retries. Preserve labelled cache evidence and keep carried samples out of History. Includes real-client monitoring, memory and counter provenance controls; native freeze/thaw acceptance remains separate. Refs #2439.

Change-source: pulse-maintainer
2026-10-03 13:58:05 +01:00

64 lines
1.6 KiB
Go

package monitoring
import (
"context"
"github.com/rcourtman/pulse-go-rewrite/internal/models"
"github.com/rcourtman/pulse-go-rewrite/pkg/proxmox"
)
func (m *Monitor) pollNodeVMsWithClusterResourceBuilder(
ctx context.Context,
instanceName string,
node string,
vms []proxmox.VM,
client PVEClientInterface,
prevVMByID map[string]models.VM,
vmIDToHostAgent map[string]models.Host,
) ([]models.VM, map[string]struct{}) {
templateSubjects := make(map[string]struct{})
resources := make([]indexedClusterResource, 0, len(vms))
for _, vm := range vms {
if vm.Template == 1 {
if key := pveBackupTemplateSubjectKey(instanceName, "qemu", node, vm.VMID); key != "" {
templateSubjects[key] = struct{}{}
}
continue
}
guestID := makeGuestID(instanceName, node, vm.VMID)
resources = append(resources, indexedClusterResource{
order: len(resources),
resource: proxmox.ClusterResource{
ID: guestID,
Type: "qemu",
Node: node,
Pool: vm.Pool,
Status: vm.Status,
Name: vm.Name,
VMID: vm.VMID,
CPU: vm.CPU,
MaxCPU: vm.CPUs,
Mem: vm.Mem,
MaxMem: vm.MaxMem,
Disk: vm.Disk,
MaxDisk: vm.MaxDisk,
NetIn: vm.NetIn,
NetOut: vm.NetOut,
DiskRead: vm.DiskRead,
DiskWrite: vm.DiskWrite,
Uptime: vm.Uptime,
Template: vm.Template,
Tags: vm.Tags,
Lock: vm.Lock,
IOCounters: vm.IOCounters,
ObservedAt: vm.ObservedAt,
},
guestID: guestID,
})
}
return m.collectClusterVMResources(ctx, instanceName, resources, client, prevVMByID, vmIDToHostAgent), templateSubjects
}