You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.2 KiB
147 lines
3.2 KiB
package core
|
|
|
|
import (
|
|
"aufs/config"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"os/exec"
|
|
"os/user"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
type Iplist struct {
|
|
Ips []Ips `json:"ip"`
|
|
}
|
|
type Ips struct {
|
|
Netcard string `json:"netcard"`
|
|
Mac string `json:"mac"`
|
|
Ip string `json:"ip"`
|
|
}
|
|
|
|
// json 结构体
|
|
type HdResp struct {
|
|
Status string `json:"status"` //状态
|
|
Hip string `json:"hostip"` //主机ip
|
|
Hname string `json:"hostname"` //主机名
|
|
Cpu string `json:"cpu"` //cpu
|
|
Mem string `json:"mem"` //内存
|
|
Disks string `json:"disks"` //磁盘
|
|
Net string `json:"net"` //网络
|
|
Osname string `json:"osname"` //操作系统
|
|
|
|
}
|
|
|
|
// 服务器的硬件信息
|
|
func Hdinfo(w http.ResponseWriter, r *http.Request) {
|
|
// 获取服务器的信息
|
|
hostip, err := config.GetLocalIP()
|
|
|
|
if err != nil {
|
|
fmt.Println("获取主机IP失败:", err)
|
|
return
|
|
}
|
|
hostname, err := os.Hostname()
|
|
if err != nil {
|
|
fmt.Println("获取主机名失败:", err)
|
|
return
|
|
}
|
|
|
|
// respone file list
|
|
response := HdResp{
|
|
Status: "success",
|
|
Hip: hostip,
|
|
Hname: hostname,
|
|
Cpu: fmt.Sprintf("%d", runtime.NumCPU()), // cpu、的数量
|
|
|
|
Mem: getMachieMem(),
|
|
|
|
Disks: "", // 因 getDiskInfo 未定义,暂时使用空字符串占位,需实现 getDiskInfo 函数后再修改,
|
|
|
|
Net: getMachieNet(), // 因 getMachieNet 未定义,暂时使用空字符串占位,需实现 getMachieNet 函数后再修改,
|
|
Osname: runtime.GOOS,
|
|
}
|
|
// 开启跨域
|
|
uCorsHadler(w, r)
|
|
json.NewEncoder(w).Encode(response)
|
|
}
|
|
|
|
func getMachieNet() string {
|
|
var iplist Iplist
|
|
|
|
var ret []string
|
|
ifaces, err := net.Interfaces()
|
|
if err != nil {
|
|
fmt.Println("无法获取网络接口信息:", err)
|
|
} else {
|
|
for _, iface := range ifaces {
|
|
|
|
ret = append(ret, iface.Name)
|
|
ret = append(ret, iface.HardwareAddr.String())
|
|
// ip地址信息等
|
|
var ipaddr []string
|
|
addrs, _ := iface.Addrs()
|
|
for _, addr := range addrs {
|
|
ipaddr = append(ipaddr, addr.String())
|
|
}
|
|
// 合并到ret 中
|
|
ret = append(ret, strings.Join(ipaddr, ","))
|
|
|
|
iplist.Ips = append(iplist.Ips, Ips{iface.Name, iface.HardwareAddr.String(), strings.Join(ipaddr, ",")})
|
|
|
|
//
|
|
jsonobj, err := json.Marshal(iplist)
|
|
if err != nil {
|
|
fmt.Println("er", err)
|
|
|
|
}
|
|
ret[0] = string(jsonobj)
|
|
|
|
// fmt.Println("网络接口名称:", iface.Name)
|
|
// fmt.Println("硬件地址 (MAC):", iface.HardwareAddr)
|
|
// addrs, _ := iface.Addrs()
|
|
// for _, addr := range addrs {
|
|
// fmt.Println("IP地址:", addr.String())
|
|
// }
|
|
// fmt.Println()
|
|
}
|
|
}
|
|
return ret[0]
|
|
|
|
// return strings.Join(ret, ",")
|
|
|
|
}
|
|
|
|
func getCurrentUser() (*user.User, error) {
|
|
currentUser, err := user.Current()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return currentUser, nil
|
|
}
|
|
|
|
func getDiskInfo() (string, error) {
|
|
var diskInfo string
|
|
// 执行 df 命令获取磁盘信息
|
|
cmd := exec.Command("df", "-h")
|
|
output, err := cmd.Output()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
diskInfo = string(output)
|
|
return diskInfo, nil
|
|
}
|
|
|
|
// 内存信息
|
|
func getMachieMem() string {
|
|
var m runtime.MemStats
|
|
runtime.ReadMemStats(&m)
|
|
// 内存使用占比
|
|
// memUsage := fmt.Sprintf("%.2f%%", float64(m.Alloc)/float64(m.Sys)*100)
|
|
ttmem := fmt.Sprintf("%v MB\n", m.TotalAlloc/1024/1024)
|
|
|
|
return ttmem
|
|
}
|
|
|