Files
pulse/internal/monitoring/guest_agent_evidence.go
T
2026-07-02 23:52:02 +01:00

46 lines
1.2 KiB
Go

package monitoring
import (
"strings"
"time"
"github.com/rcourtman/pulse-go-rewrite/internal/models"
"github.com/rcourtman/pulse-go-rewrite/pkg/proxmox"
)
const recentGuestAgentEvidenceMaxAge = 10 * time.Minute
func hasRecentGuestAgentEvidence(prev *models.VM, now time.Time) bool {
// Previous unified read-state snapshots normalize guest status to resource health
// (for example "online"), so continuity depends on recent guest-agent evidence
// rather than on replaying an exact prior runtime status string.
if prev == nil || prev.Type != "qemu" {
return false
}
if prev.LastSeen.IsZero() || now.Sub(prev.LastSeen) > recentGuestAgentEvidenceMaxAge {
return false
}
if prev.AgentVersion != "" ||
prev.GuestAgentStatus == "available" ||
len(prev.IPAddresses) > 0 ||
len(prev.NetworkInterfaces) > 0 ||
prev.OSName != "" ||
prev.OSVersion != "" {
return true
}
if len(prev.Disks) > 0 && !strings.HasPrefix(prev.DiskStatusReason, "prev-") {
return true
}
return false
}
func shouldQueryGuestAgent(vmStatus *proxmox.VMStatus, prev *models.VM, now time.Time) bool {
if vmStatus != nil {
return vmStatus.Agent.IsAvailable()
}
return hasRecentGuestAgentEvidence(prev, now)
}