//go:build !linux && !windows package collector import ( "context" "fmt" "net" "os" "runtime" "strings" "mfd-monitor-agent/internal/status" ) // collectSystem fills portable host identity fields for non-Linux platforms. 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 fills interface, address, and MAC data using the portable net package. 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 fills portable resource fields available without platform-specific APIs. func collectResource(_ context.Context, out *status.HostStatus) error { out.CPU.LogicalCores = runtime.NumCPU() return nil } // collectProcesses reports partial process collection until platform-specific support is added. 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 reports partial TCP listener collection until platform-specific support is added. 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) }