agent: add system-info endpoint

This commit is contained in:
yusing
2025-02-10 12:34:08 +08:00
parent 9120bbea34
commit 73e2660e59
8 changed files with 151 additions and 18 deletions

View File

@@ -0,0 +1,62 @@
package metrics
import (
"context"
"encoding/json"
"time"
"github.com/shirou/gopsutil/v4/cpu"
"github.com/shirou/gopsutil/v4/disk"
"github.com/shirou/gopsutil/v4/mem"
"github.com/yusing/go-proxy/internal/utils/strutils"
)
type (
SystemInfo struct {
CPUAverage float64
Memory *mem.VirtualMemoryStat
Disk *disk.UsageStat
}
)
func GetSystemInfo(ctx context.Context) (*SystemInfo, error) {
memoryInfo, err := mem.VirtualMemory()
if err != nil {
return nil, err
}
cpuAverage, err := cpu.PercentWithContext(ctx, time.Second, false)
if err != nil {
return nil, err
}
diskInfo, err := disk.Usage("/")
if err != nil {
return nil, err
}
return &SystemInfo{
CPUAverage: cpuAverage[0],
Memory: memoryInfo,
Disk: diskInfo,
}, nil
}
func (info *SystemInfo) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"cpu_average": info.CPUAverage,
"memory": map[string]interface{}{
"total": strutils.FormatByteSize(info.Memory.Total),
"available": strutils.FormatByteSize(info.Memory.Available),
"used": strutils.FormatByteSize(info.Memory.Used),
"used_percent": info.Memory.UsedPercent,
"free": strutils.FormatByteSize(info.Memory.Free),
},
"disk": map[string]interface{}{
"total": strutils.FormatByteSize(info.Disk.Total),
"used": strutils.FormatByteSize(info.Disk.Used),
"used_percent": info.Disk.UsedPercent,
"free": strutils.FormatByteSize(info.Disk.Free),
"fs_type": info.Disk.Fstype,
},
})
}