package host_info import ( "cmii-uav-watchdog-common/models" "cmii-uav-watchdog-common/wdd_log" "os" "strings" ) // NewOSInfo 创建并返回一个 OSInfo 实例,设置默认值 func NewOSInfo() models.OSInfo { return models.OSInfo{ Name: "unknown", Version: "unknown", ID: "unknown", IDLike: "unknown", VersionID: "unknown", PrettyName: "unknown", } } // NewSystemInfo 创建并返回一个 SystemInfo 实例,设置默认值 func NewSystemInfo() models.SystemInfo { return models.SystemInfo{ MachineID: "unknown", OS: NewOSInfo(), KernelVersion: "unknown", } } // GetSystemInfo 获取 Linux 系统信息 func GetSystemInfo() models.SystemInfo { sysInfo := NewSystemInfo() // 初始化结构体 // 获取机器 ID machineID := getMachineID() if machineID != "" { sysInfo.MachineID = machineID } // 获取 machine serial serialID := getMachineSerial() if serialID != "" { sysInfo.MachineSerial = serialID } // 获取操作系统版本 sysInfo.OS = getOSVersion() // 获取内核版本 kernelVersion := getKernelVersion() if kernelVersion != "" { sysInfo.KernelVersion = kernelVersion } // 获取节点名称 sysInfo.NodeName = "unknown" nodeName := os.Getenv("NODE_NAME") if nodeName != "" { sysInfo.NodeName = nodeName } // 获取节点IP sysInfo.NodeIP = "unknown" ip := os.Getenv("NODE_IP") if ip != "" { sysInfo.NodeIP = ip } return sysInfo } func getOSVersion() models.OSInfo { data, err := os.ReadFile("/etc/os-release") if err != nil { wdd_log.Error("读取 /etc/os-release 失败: %v", err) return NewOSInfo() // 返回默认值 } osInfo := NewOSInfo() // 初始化 OSInfo 结构体 lines := strings.Split(string(data), "\n") for _, line := range lines { line = strings.TrimSpace(line) if line == "" { continue } parts := strings.SplitN(line, "=", 2) if len(parts) != 2 { continue } key := strings.Trim(parts[0], `"`) value := strings.Trim(parts[1], `"`) // 解析不同的字段 switch key { case "NAME": osInfo.Name = value case "VERSION": osInfo.Version = value case "ID": osInfo.ID = value case "ID_LIKE": osInfo.IDLike = value case "VERSION_ID": osInfo.VersionID = value case "PRETTY_NAME": osInfo.PrettyName = value } } return osInfo } // getMachineID 从 /sys/devices/virtual/dmi/id/product_uuid 文件中获取机器 ID func getMachineID() string { data, err := os.ReadFile("/sys/devices/virtual/dmi/id/product_uuid") if err != nil { wdd_log.Error("读取 /sys/devices/virtual/dmi/id/product_uuid 失败: %v", err) return "" } return strings.TrimSpace(string(data)) // 去除多余空格 } // getMachineID 从 /sys/devices/virtual/dmi/id/product_uuid 文件中获取机器 ID func getMachineSerial() string { data, err := os.ReadFile("/sys/devices/virtual/dmi/id/product_serial") if err != nil { wdd_log.Error("读取 /sys/devices/virtual/dmi/id/product_serial 失败: %v", err) return "" } return strings.TrimSpace(string(data)) // 去除多余空格 } // getKernelVersion 获取内核版本 func getKernelVersion() string { data, err := os.ReadFile("/proc/version") if err != nil { wdd_log.Error("读取 /proc/version 失败: %v", err) return "" } return strings.TrimSpace(string(data)) }