自动更新管控端
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

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
}