//go:build !linux && !windows package collector import ( "context" "fmt" "net" "os" "runtime" "strings" "mfd-monitor-agent/internal/status" ) // collectSystem 为非 Linux/Windows 平台填充可移植的主机标识字段。 func collectSystem(_ context.Context, hostID string, out *status.HostStatus) error { hostname, err := os.Hostname() if err != nil { return err } out.Host.HostID = hostID if out.Host.HostID == "" { out.Host.HostID = hostname } out.Host.Hostname = hostname out.Host.Platform = runtime.GOOS out.Host.Arch = runtime.GOARCH return nil } // collectNetwork 使用可移植的 net 包填充网卡、地址与 MAC 数据。 func collectNetwork(_ context.Context, out *status.HostStatus) error { ifaces, err := net.Interfaces() if err != nil { return err } seenIPs := map[string]struct{}{} seenMACs := map[string]struct{}{} for _, iface := range ifaces { item := status.NetworkInterface{Name: iface.Name, MAC: iface.HardwareAddr.String(), MTU: iface.MTU, Flags: strings.Fields(iface.Flags.String())} addrs, _ := iface.Addrs() for _, addr := range addrs { item.Addresses = append(item.Addresses, addr.String()) seenIPs[addr.String()] = struct{}{} } if item.MAC != "" { seenMACs[item.MAC] = struct{}{} } out.Network.Interfaces = append(out.Network.Interfaces, item) } out.Network.IPv4s, out.Network.IPv6s = networkAddressSets(seenIPs) for mac := range seenMACs { out.Network.MACs = append(out.Network.MACs, mac) } return nil } // collectResource 填充无需平台专用 API 的可移植资源字段。 func collectResource(_ context.Context, out *status.HostStatus) error { out.CPU.LogicalCores = runtime.NumCPU() return nil } // collectProcesses 在尚未实现平台专用支持时,将进程采集标记为 partial。 func collectProcesses(_ context.Context, out *status.HostStatus) error { out.Processes.Status = "partial" return fmt.Errorf("process collection is not implemented for %s without platform-specific support", runtime.GOOS) } // collectSockets 在尚未实现平台专用支持时,将 TCP 监听采集标记为 partial。 func collectSockets(_ context.Context, out *status.HostStatus) error { out.TCPListeners.Status = "partial" return fmt.Errorf("tcp listener process mapping is not implemented for %s without platform-specific support", runtime.GOOS) }