118 lines
2.0 KiB
Go
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)
|
|
}
|