Files
argus/rear/pkg/utils/sys_utils_common.go
T

99 lines
2.0 KiB
Go

package utils
import (
"net"
"runtime"
"unsafe"
)
// Is64Bit 检查系统是否为64位
func (s *SysUtils) Is64Bit() bool {
return unsafe.Sizeof(uintptr(0)) == 8
}
// GetNetworkInterfaces 获取网络接口信息
func (s *SysUtils) GetNetworkInterfaces() []NetworkInfo {
var networkInfos []NetworkInfo
interfaces, err := net.Interfaces()
if err != nil {
return networkInfos
}
for _, iface := range interfaces {
// 跳过回环接口和未启用的接口
if iface.Flags&net.FlagLoopback != 0 || iface.Flags&net.FlagUp == 0 {
continue
}
addrs, err := iface.Addrs()
if err != nil {
continue
}
var ipAddr string
for _, addr := range addrs {
if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
if ipNet.IP.To4() != nil {
ipAddr = ipNet.IP.String()
break
}
}
}
if ipAddr != "" {
networkInfo := NetworkInfo{
InterfaceName: iface.Name,
IPAddress: ipAddr,
MACAddress: iface.HardwareAddr.String(),
MTU: iface.MTU,
}
networkInfos = append(networkInfos, networkInfo)
}
}
return networkInfos
}
// GetCPUInfo 获取CPU信息
func (s *SysUtils) GetCPUInfo() CPUInfo {
cpuInfo := CPUInfo{
Cores: runtime.NumCPU(),
Threads: runtime.NumCPU(), // 在Go中通常相等
}
// 调用平台特定的方法来获取详细信息
s.getCPUInfoPlatform(&cpuInfo)
return cpuInfo
}
// GetMemoryInfo 获取内存信息
func (s *SysUtils) GetMemoryInfo() MemoryInfo {
var memInfo MemoryInfo
// 调用平台特定的方法
s.getMemoryInfoPlatform(&memInfo)
if memInfo.Total > 0 {
memInfo.UsedPct = float64(memInfo.Used) / float64(memInfo.Total) * 100
}
return memInfo
}
// GetDiskUsage 获取磁盘使用情况
func (s *SysUtils) GetDiskUsage(path string) (*DiskInfo, error) {
return s.getDiskUsagePlatform(path)
}
// GetAllDisksInfo 跨平台获取所有磁盘信息
func (s *SysUtils) GetAllDisksInfo() ([]*DiskInfo, error) {
return s.getAllDisksInfoPlatform()
}
// GetGPUInfo 获取GPU信息
func (s *SysUtils) GetGPUInfo() []string {
return s.getGPUInfoPlatform()
}