A:增加工具函数;增加部分测试照片
This commit is contained in:
1 parent
150d398db6
commit
ae8f64d53b
23 files changed
+1850
No files matched your search
@@ -0,0 +1,194 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
// SystemInfo 系统信息结构体
|
||||
type SystemInfo struct {
|
||||
OS string `json:"os"`
|
||||
Arch string `json:"arch"`
|
||||
CPUCount int `json:"cpu_count"`
|
||||
Is64Bit bool `json:"is_64_bit"`
|
||||
Hostname string `json:"hostname"`
|
||||
Username string `json:"username"`
|
||||
GoVersion string `json:"go_version"`
|
||||
Compiler string `json:"compiler"`
|
||||
NumGoroutine int `json:"num_goroutine"`
|
||||
}
|
||||
|
||||
// CPUInfo CPU信息结构体
|
||||
type CPUInfo struct {
|
||||
ModelName string `json:"model_name"`
|
||||
Cores int `json:"cores"`
|
||||
Threads int `json:"threads"`
|
||||
Frequency string `json:"frequency"`
|
||||
Usage float64 `json:"usage"`
|
||||
}
|
||||
|
||||
// MemoryInfo 内存信息结构体
|
||||
type MemoryInfo struct {
|
||||
Total uint64 `json:"total"`
|
||||
Available uint64 `json:"available"`
|
||||
Used uint64 `json:"used"`
|
||||
UsedPct float64 `json:"used_percent"`
|
||||
}
|
||||
|
||||
// DiskInfo 磁盘信息结构体
|
||||
type DiskInfo struct {
|
||||
Path string `json:"path"` // 磁盘路径
|
||||
Total uint64 `json:"total"` // 总空间 (字节)
|
||||
Free uint64 `json:"free"` // 可用空间 (字节)
|
||||
Used uint64 `json:"used"` // 已使用空间 (字节)
|
||||
UsedPct float64 `json:"used_percent"` // 使用百分比
|
||||
FileSystem string `json:"file_system"` // 文件系统类型
|
||||
}
|
||||
|
||||
// NetworkInfo 网络信息结构体
|
||||
type NetworkInfo struct {
|
||||
InterfaceName string `json:"interface_name"`
|
||||
IPAddress string `json:"ip_address"`
|
||||
MACAddress string `json:"mac_address"`
|
||||
MTU int `json:"mtu"`
|
||||
}
|
||||
|
||||
// ProcessInfo 进程信息结构体
|
||||
type ProcessInfo struct {
|
||||
PID int `json:"pid"`
|
||||
PPID int `json:"ppid"`
|
||||
Name string `json:"name"`
|
||||
CPUPercent float64 `json:"cpu_percent"`
|
||||
MemoryUsage uint64 `json:"memory_usage"`
|
||||
}
|
||||
|
||||
// SysUtils 系统工具类
|
||||
type SysUtils struct{}
|
||||
|
||||
// NewSysUtils 创建新的系统工具实例
|
||||
func NewSysUtils() *SysUtils {
|
||||
return &SysUtils{}
|
||||
}
|
||||
|
||||
// GetSystemInfo 获取基本系统信息
|
||||
func (s *SysUtils) GetSystemInfo() SystemInfo {
|
||||
hostname, _ := os.Hostname()
|
||||
username := os.Getenv("USER")
|
||||
if username == "" {
|
||||
username = os.Getenv("USERNAME") // Windows
|
||||
}
|
||||
|
||||
return SystemInfo{
|
||||
OS: runtime.GOOS,
|
||||
Arch: runtime.GOARCH,
|
||||
CPUCount: runtime.NumCPU(),
|
||||
Is64Bit: s.Is64Bit(),
|
||||
Hostname: hostname,
|
||||
Username: username,
|
||||
GoVersion: runtime.Version(),
|
||||
Compiler: runtime.Compiler,
|
||||
NumGoroutine: runtime.NumGoroutine(),
|
||||
}
|
||||
}
|
||||
|
||||
// GetCurrentProcessInfo 获取当前进程信息
|
||||
func (s *SysUtils) GetCurrentProcessInfo() ProcessInfo {
|
||||
pid := os.Getpid()
|
||||
ppid := os.Getppid()
|
||||
|
||||
var m runtime.MemStats
|
||||
runtime.ReadMemStats(&m)
|
||||
|
||||
return ProcessInfo{
|
||||
PID: pid,
|
||||
PPID: ppid,
|
||||
Name: os.Args[0],
|
||||
MemoryUsage: m.Alloc,
|
||||
}
|
||||
}
|
||||
|
||||
// GetSystemUptime 获取系统启动时间
|
||||
func (s *SysUtils) GetSystemUptime() time.Duration {
|
||||
return s.getSystemUptime()
|
||||
}
|
||||
|
||||
// FormatBytes 格式化字节数为人类可读格式
|
||||
func (s *SysUtils) FormatBytes(bytes uint64) string {
|
||||
const unit = 1024
|
||||
if bytes < unit {
|
||||
return fmt.Sprintf("%d B", bytes)
|
||||
}
|
||||
div, exp := uint64(unit), 0
|
||||
for n := bytes / unit; n >= unit; n /= unit {
|
||||
div *= unit
|
||||
exp++
|
||||
}
|
||||
return fmt.Sprintf("%.1f %cB", float64(bytes)/float64(div), "KMGTPE"[exp])
|
||||
}
|
||||
|
||||
// PrintSystemInfo 打印完整的系统信息
|
||||
func (s *SysUtils) PrintSystemInfo() {
|
||||
fmt.Println("========== 系统信息 ==========")
|
||||
sysInfo := s.GetSystemInfo()
|
||||
fmt.Printf("操作系统: %s\n", sysInfo.OS)
|
||||
fmt.Printf("架构: %s\n", sysInfo.Arch)
|
||||
fmt.Printf("CPU核心数: %d\n", sysInfo.CPUCount)
|
||||
fmt.Printf("64位系统: %v\n", sysInfo.Is64Bit)
|
||||
fmt.Printf("主机名: %s\n", sysInfo.Hostname)
|
||||
fmt.Printf("用户名: %s\n", sysInfo.Username)
|
||||
fmt.Printf("Go版本: %s\n", sysInfo.GoVersion)
|
||||
fmt.Printf("编译器: %s\n", sysInfo.Compiler)
|
||||
fmt.Printf("Goroutine数量: %d\n", sysInfo.NumGoroutine)
|
||||
|
||||
fmt.Println("\n========== CPU信息 ==========")
|
||||
cpuInfo := s.GetCPUInfo()
|
||||
fmt.Printf("型号: %s\n", cpuInfo.ModelName)
|
||||
fmt.Printf("核心数: %d\n", cpuInfo.Cores)
|
||||
fmt.Printf("线程数: %d\n", cpuInfo.Threads)
|
||||
|
||||
fmt.Println("\n========== 内存信息 ==========")
|
||||
memInfo := s.GetMemoryInfo()
|
||||
fmt.Printf("总内存: %s\n", s.FormatBytes(memInfo.Total))
|
||||
fmt.Printf("已用内存: %s\n", s.FormatBytes(memInfo.Used))
|
||||
fmt.Printf("可用内存: %s\n", s.FormatBytes(memInfo.Available))
|
||||
fmt.Printf("使用率: %.2f%%\n", memInfo.UsedPct)
|
||||
|
||||
fmt.Println("\n========== 磁盘信息 ==========")
|
||||
diskInfo, _ := s.GetDiskUsage(".")
|
||||
if diskInfo != nil {
|
||||
fmt.Printf("路径: %s\n", diskInfo.Path)
|
||||
fmt.Printf("总空间: %s\n", s.FormatBytes(diskInfo.Total))
|
||||
fmt.Printf("已用空间: %s\n", s.FormatBytes(diskInfo.Used))
|
||||
fmt.Printf("可用空间: %s\n", s.FormatBytes(diskInfo.Free))
|
||||
fmt.Printf("使用率: %.2f%%\n", diskInfo.UsedPct)
|
||||
}
|
||||
|
||||
fmt.Println("\n========== 网络接口 ==========")
|
||||
networkInfos := s.GetNetworkInterfaces()
|
||||
for _, netInfo := range networkInfos {
|
||||
fmt.Printf("接口: %s\n", netInfo.InterfaceName)
|
||||
fmt.Printf("IP地址: %s\n", netInfo.IPAddress)
|
||||
fmt.Printf("MAC地址: %s\n", netInfo.MACAddress)
|
||||
fmt.Printf("MTU: %d\n", netInfo.MTU)
|
||||
fmt.Println("---")
|
||||
}
|
||||
|
||||
fmt.Println("\n========== GPU信息 ==========")
|
||||
gpus := s.GetGPUInfo()
|
||||
for i, gpu := range gpus {
|
||||
fmt.Printf("GPU %d: %s\n", i+1, gpu)
|
||||
}
|
||||
|
||||
fmt.Println("\n========== 进程信息 ==========")
|
||||
processInfo := s.GetCurrentProcessInfo()
|
||||
fmt.Printf("进程ID: %d\n", processInfo.PID)
|
||||
fmt.Printf("父进程ID: %d\n", processInfo.PPID)
|
||||
fmt.Printf("进程名: %s\n", processInfo.Name)
|
||||
fmt.Printf("内存使用: %s\n", s.FormatBytes(processInfo.MemoryUsage))
|
||||
|
||||
fmt.Println("\n========== 系统运行时间 ==========")
|
||||
uptime := s.GetSystemUptime()
|
||||
fmt.Printf("运行时间: %s\n", uptime.String())
|
||||
}
|
||||
Reference in new issue
Block a user