add machine_id

This commit is contained in:
boge
2025-03-18 15:56:00 +08:00
parent 58b470e95f
commit 6001907e8a
7 changed files with 286 additions and 27 deletions

View File

@@ -0,0 +1,123 @@
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)
}