mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-03-29 23:10:35 +00:00
82 lines
1.6 KiB
Go
82 lines
1.6 KiB
Go
package common
|
||
|
||
import (
|
||
"sync/atomic"
|
||
"time"
|
||
|
||
"github.com/shirou/gopsutil/cpu"
|
||
"github.com/shirou/gopsutil/mem"
|
||
)
|
||
|
||
// DiskSpaceInfo 磁盘空间信息
|
||
type DiskSpaceInfo struct {
|
||
// 总空间(字节)
|
||
Total uint64 `json:"total"`
|
||
// 可用空间(字节)
|
||
Free uint64 `json:"free"`
|
||
// 已用空间(字节)
|
||
Used uint64 `json:"used"`
|
||
// 使用百分比
|
||
UsedPercent float64 `json:"used_percent"`
|
||
}
|
||
|
||
// SystemStatus 系统状态信息
|
||
type SystemStatus struct {
|
||
CPUUsage float64
|
||
MemoryUsage float64
|
||
DiskUsage float64
|
||
}
|
||
|
||
var latestSystemStatus atomic.Value
|
||
|
||
func init() {
|
||
latestSystemStatus.Store(SystemStatus{})
|
||
}
|
||
|
||
// StartSystemMonitor 启动系统监控
|
||
func StartSystemMonitor() {
|
||
go func() {
|
||
for {
|
||
config := GetPerformanceMonitorConfig()
|
||
if !config.Enabled {
|
||
time.Sleep(30 * time.Second)
|
||
continue
|
||
}
|
||
|
||
updateSystemStatus()
|
||
time.Sleep(5 * time.Second)
|
||
}
|
||
}()
|
||
}
|
||
|
||
func updateSystemStatus() {
|
||
var status SystemStatus
|
||
|
||
// CPU
|
||
// 注意:cpu.Percent(0, false) 返回自上次调用以来的 CPU 使用率
|
||
// 如果是第一次调用,可能会返回错误或不准确的值,但在循环中会逐渐正常
|
||
percents, err := cpu.Percent(0, false)
|
||
if err == nil && len(percents) > 0 {
|
||
status.CPUUsage = percents[0]
|
||
}
|
||
|
||
// Memory
|
||
memInfo, err := mem.VirtualMemory()
|
||
if err == nil {
|
||
status.MemoryUsage = memInfo.UsedPercent
|
||
}
|
||
|
||
// Disk
|
||
diskInfo := GetDiskSpaceInfo()
|
||
if diskInfo.Total > 0 {
|
||
status.DiskUsage = diskInfo.UsedPercent
|
||
}
|
||
|
||
latestSystemStatus.Store(status)
|
||
}
|
||
|
||
// GetSystemStatus 获取当前系统状态
|
||
func GetSystemStatus() SystemStatus {
|
||
return latestSystemStatus.Load().(SystemStatus)
|
||
}
|