kra-new/internal/integration/systeminfo/provider.go

51 lines
1.6 KiB
Go

package systeminfo
import (
"context"
"runtime"
"time"
"kra/internal/biz/system"
"github.com/shirou/gopsutil/v4/cpu"
"github.com/shirou/gopsutil/v4/disk"
"github.com/shirou/gopsutil/v4/mem"
)
type Provider struct{}
func NewProvider() *Provider { return &Provider{} }
func (*Provider) Collect(ctx context.Context, mountPoints []string) (*system.ServerInfo, error) {
if ctx == nil {
ctx = context.Background()
}
if err := ctx.Err(); err != nil {
return nil, err
}
physicalCores, err := cpu.Counts(false)
if err != nil {
return nil, err
}
cpuPercent, err := cpu.PercentWithContext(ctx, 200*time.Millisecond, true)
if err != nil {
return nil, err
}
memory, err := mem.VirtualMemoryWithContext(ctx)
if err != nil {
return nil, err
}
diskInfo := make([]system.ServerDiskInfo, 0, len(mountPoints))
for _, mountPoint := range mountPoints {
if err = ctx.Err(); err != nil {
return nil, err
}
usage, usageErr := disk.UsageWithContext(ctx, mountPoint)
if usageErr != nil {
return nil, usageErr
}
diskInfo = append(diskInfo, system.ServerDiskInfo{MountPoint: mountPoint, UsedMB: usage.Used / 1024 / 1024, UsedGB: usage.Used / 1024 / 1024 / 1024, TotalMB: usage.Total / 1024 / 1024, TotalGB: usage.Total / 1024 / 1024 / 1024, UsedPercent: int(usage.UsedPercent)})
}
return &system.ServerInfo{GOOS: runtime.GOOS, NumCPU: runtime.NumCPU(), Compiler: runtime.Compiler, GoVersion: runtime.Version(), NumGoroutine: runtime.NumGoroutine(), CPUs: cpuPercent, Cores: physicalCores, UsedMB: memory.Used / 1024 / 1024, TotalMB: memory.Total / 1024 / 1024, UsedPercent: int(memory.UsedPercent), Disk: diskInfo}, nil
}