feat: Fleet Forge UEM - device management, agent, remote desktop (VNC), TLS reverse proxy
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package metrics
|
||||
|
||||
import (
|
||||
"os"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/shirou/gopsutil/v3/cpu"
|
||||
"github.com/shirou/gopsutil/v3/disk"
|
||||
"github.com/shirou/gopsutil/v3/load"
|
||||
"github.com/shirou/gopsutil/v3/mem"
|
||||
"github.com/shirou/gopsutil/v3/host"
|
||||
)
|
||||
|
||||
type Snapshot struct {
|
||||
CPUPercent float64
|
||||
MemoryPercent float64
|
||||
MemoryUsed uint64
|
||||
MemoryTotal uint64
|
||||
DiskPercent float64
|
||||
DiskUsed uint64
|
||||
DiskTotal uint64
|
||||
Load1 float64
|
||||
Load5 float64
|
||||
Load15 float64
|
||||
UptimeSeconds uint64
|
||||
}
|
||||
|
||||
func Collect() (*Snapshot, error) {
|
||||
s := &Snapshot{}
|
||||
|
||||
if percents, err := cpu.Percent(0, false); err == nil && len(percents) > 0 {
|
||||
s.CPUPercent = percents[0]
|
||||
}
|
||||
|
||||
if v, err := mem.VirtualMemory(); err == nil {
|
||||
s.MemoryPercent = v.UsedPercent
|
||||
s.MemoryUsed = v.Used
|
||||
s.MemoryTotal = v.Total
|
||||
}
|
||||
|
||||
if d, err := disk.Usage("/"); err == nil {
|
||||
s.DiskPercent = d.UsedPercent
|
||||
s.DiskUsed = d.Used
|
||||
s.DiskTotal = d.Total
|
||||
}
|
||||
|
||||
if avg, err := load.Avg(); err == nil {
|
||||
s.Load1 = avg.Load1
|
||||
s.Load5 = avg.Load5
|
||||
s.Load15 = avg.Load15
|
||||
}
|
||||
|
||||
if up, err := host.Uptime(); err == nil {
|
||||
s.UptimeSeconds = up
|
||||
}
|
||||
|
||||
if runtime.GOOS == "linux" {
|
||||
if data, err := os.ReadFile("/proc/loadavg"); err == nil {
|
||||
fields := strings.Fields(string(data))
|
||||
if len(fields) >= 3 {
|
||||
s.Load1, _ = strconv.ParseFloat(fields[0], 64)
|
||||
s.Load5, _ = strconv.ParseFloat(fields[1], 64)
|
||||
s.Load15, _ = strconv.ParseFloat(fields[2], 64)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return s, nil
|
||||
}
|
||||
Reference in New Issue
Block a user