124 lines
2.7 KiB
Go
124 lines
2.7 KiB
Go
package services
|
|
|
|
import (
|
|
"cmii-uav-watchdog-common/models"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// NewOSInfo 创建并返回一个 OSInfo 实例,设置默认值
|
|
func NewOSInfo() models.OSInfo {
|
|
return models.OSInfo{
|
|
Name: "unknown",
|
|
Version: "unknown",
|
|
ID: "unknown",
|
|
IDLike: "unknown",
|
|
VersionID: "unknown",
|
|
PrettyName: "unknown",
|
|
HomeURL: "unknown",
|
|
SupportURL: "unknown",
|
|
BugReportURL: "unknown",
|
|
PrivacyURL: "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
|
|
}
|
|
// 获取操作系统版本
|
|
sysInfo.OS = getOSVersion()
|
|
|
|
// 获取内核版本
|
|
kernelVersion := getKernelVersion()
|
|
if kernelVersion != "" {
|
|
sysInfo.KernelVersion = kernelVersion
|
|
}
|
|
|
|
return sysInfo
|
|
}
|
|
func getOSVersion() models.OSInfo {
|
|
data, err := os.ReadFile("/etc/os-release")
|
|
if err != nil {
|
|
log.Printf("Error reading /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
|
|
case "HOME_URL":
|
|
osInfo.HomeURL = value
|
|
case "SUPPORT_URL":
|
|
osInfo.SupportURL = value
|
|
case "BUG_REPORT_URL":
|
|
osInfo.BugReportURL = value
|
|
case "PRIVACY_URL":
|
|
osInfo.PrivacyURL = value
|
|
}
|
|
}
|
|
|
|
return osInfo
|
|
}
|
|
|
|
// getMachineID 从 /etc/machine-id 文件中获取机器 ID
|
|
func getMachineID() string {
|
|
data, err := os.ReadFile("/etc/machine-id")
|
|
if err != nil {
|
|
log.Printf("Error reading /etc/machine-id: %v", err)
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(string(data)) // 去除多余空格
|
|
}
|
|
|
|
// getKernelVersion 获取内核版本
|
|
func getKernelVersion() string {
|
|
data, err := os.ReadFile("/proc/version")
|
|
if err != nil {
|
|
log.Printf("Error reading /proc/version: %v", err)
|
|
return ""
|
|
}
|
|
return string(data)
|
|
}
|