Files
Sentinel-EdgeAgent/pkg/utils/utils.go
T
2026-05-26 13:53:23 +08:00

118 lines
2.0 KiB
Go

package utils
import (
"encoding/json"
"fmt"
"net"
"os"
"runtime"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/mem"
)
func GetLocalIP() string {
ifaces, err := net.Interfaces()
if err != nil {
return ""
}
for _, iface := range ifaces {
if iface.Flags&net.FlagUp == 0 {
continue // 接口未启用
}
if iface.Flags&net.FlagLoopback != 0 {
continue // 忽略回环
}
addrs, err := iface.Addrs()
if err != nil {
continue
}
for _, addr := range addrs {
var ip net.IP
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
case *net.IPAddr:
ip = v.IP
}
if ip == nil || ip.IsLoopback() {
continue
}
ip = ip.To4()
if ip == nil {
continue
}
return ip.String()
}
}
return ""
}
func GetHostname() string {
name, err := os.Hostname()
if err != nil {
return ""
}
return name
}
func GetMacAddress() string {
ifaces, err := net.Interfaces()
if err != nil {
return ""
}
for _, iface := range ifaces {
if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 {
continue
}
mac := iface.HardwareAddr.String()
if mac != "" {
return mac
}
}
return ""
}
func GetOSInfo() string {
return runtime.GOOS // windows, linux, darwin
}
func GetCPUInfo() string {
info, err := cpu.Info()
if err != nil || len(info) == 0 {
return ""
}
return info[0].ModelName
}
func GetMemory() string {
v, err := mem.VirtualMemory()
if err != nil {
return ""
}
return fmt.Sprintf("%dMB", v.Total/1024/1024)
}
func GetDisk() string {
usage, err := disk.Usage("/")
if err != nil {
return ""
}
return fmt.Sprintf("%dGB", usage.Total/1024/1024/1024)
}
func PayloadToMap(payload []byte) (map[string]interface{}, error) {
var result map[string]interface{}
err := json.Unmarshal(payload, &result)
if err != nil {
return nil, err
}
return result, nil
}
func JSONToString(data map[string]interface{}) string {
jsonBytes, err := json.Marshal(data)
if err != nil {
return ""
}
return string(jsonBytes)
}