37 lines
765 B
Go
37 lines
765 B
Go
//go:build linux
|
|||
|
|
|
||
|
|
package sysinfo
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"syscall"
|
||
|
|
)
|
||
|
|
|
||
|
|
func readPlatform() (Stats, CPUSample) {
|
||
|
|
var (
|
||
|
|
stats Stats
|
||
|
|
sample CPUSample
|
||
|
|
)
|
||
|
|
if raw, err := os.ReadFile("/proc/stat"); err == nil {
|
||
|
|
sample = parseProcStat(string(raw))
|
||
|
|
}
|
||
|
|
if raw, err := os.ReadFile("/proc/meminfo"); err == nil {
|
||
|
|
stats.MemTotalBytes, stats.MemUsedBytes = parseMemInfo(string(raw))
|
||
|
|
}
|
||
|
|
stats.DiskTotalBytes, stats.DiskUsedBytes = diskUsage("/")
|
||
|
|
return stats, sample
|
||
|
|
}
|
||
|
|
|
||
|
|
func diskUsage(path string) (total, used uint64) {
|
||
|
|
var stat syscall.Statfs_t
|
||
|
|
if err := syscall.Statfs(path, &stat); err != nil {
|
||
|
|
return 0, 0
|
||
|
|
}
|
||
|
|
total = stat.Blocks * uint64(stat.Bsize)
|
||
|
|
free := stat.Bavail * uint64(stat.Bsize)
|
||
|
|
if free > total {
|
||
|
|
return total, 0
|
||
|
|
}
|
||
|
|
return total, total - free
|
||
|
|
}
|