-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
memory.go
37 lines (31 loc) · 1.24 KB
/
memory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
import (
"fmt"
linuxproc "github.com/c9s/goprocinfo/linux"
)
func GetMemory() (map[string]uint64, error) {
memInfo, err := linuxproc.ReadMemInfo("/proc/meminfo")
if err != nil {
return nil, fmt.Errorf("failed to stat meminfo data, received error: %s", err.Error())
}
used := memInfo.MemTotal - (memInfo.MemFree + memInfo.Buffers + memInfo.Cached)
swapUsed := memInfo.SwapTotal - (memInfo.SwapFree + memInfo.SwapCached)
mem := map[string]uint64{
"used_percent": uint64((float64(used) / float64(memInfo.MemTotal)) * 100),
"swap_used_percent": uint64((float64(swapUsed) / float64(memInfo.SwapTotal)) * 100),
"total": kibiToMega(memInfo.MemTotal),
"free": kibiToMega(memInfo.MemFree),
"available": kibiToMega(memInfo.MemAvailable),
"used": kibiToMega(used),
"cached": kibiToMega(memInfo.Cached),
"buffers": kibiToMega(memInfo.Buffers),
"swap_total": kibiToMega(memInfo.SwapTotal),
"swap_free": kibiToMega(memInfo.SwapFree),
"swap_used": kibiToMega(swapUsed),
"swap_cached": kibiToMega(memInfo.SwapCached),
}
return mem, nil
}
func kibiToMega(kibiVal uint64) uint64 {
return uint64(float64(kibiVal) / 976.5625)
}