将代码与测试注释改为中文以符合仓库规范;新增中文部署指南、 示例配置,并完善构建脚本对 VERSION 注入的说明。 Co-authored-by: Cursor <cursoragent@cursor.com>
76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
//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)
|
|
}
|