add machine_id
This commit is contained in:
123
cmii-uav-watchdog-agent/host_info/system_service.go
Normal file
123
cmii-uav-watchdog-agent/host_info/system_service.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user