add memory stats
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package drivers
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type MemInfoDriver struct{}
|
||||
|
||||
func NewMemInfoDriver() *MemInfoDriver {
|
||||
return &MemInfoDriver{}
|
||||
}
|
||||
|
||||
// Read /proc/meminfo for active system memory statistics
|
||||
func (r *MemInfoDriver) ReadUsageSensors() (MemoryUsage, error) {
|
||||
usage := MemoryUsage{}
|
||||
file, err := os.Open("/proc/meminfo")
|
||||
if err != nil {
|
||||
return usage, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var memTotal, memAvailable float64
|
||||
scanner := bufio.NewScanner(file)
|
||||
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
fields := strings.Fields(line)
|
||||
if len(fields) < 2 {
|
||||
continue
|
||||
}
|
||||
|
||||
val, err := strconv.ParseFloat(fields[1], 64)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
switch fields[0] {
|
||||
case "MemTotal:":
|
||||
memTotal = val // stored in kB
|
||||
case "MemAvailable:":
|
||||
memAvailable = val // stored in kB
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return usage, err
|
||||
}
|
||||
|
||||
used := memTotal - memAvailable
|
||||
usedPct := (used / memTotal) * 100
|
||||
|
||||
usage = MemoryUsage{
|
||||
TotalGB: memTotal / (1024 * 1024),
|
||||
AvailableGB: memAvailable / (1024 * 1024),
|
||||
UsedGB: used / (1024 * 1024),
|
||||
UsedPercent: usedPct,
|
||||
}
|
||||
|
||||
return usage, nil
|
||||
}
|
||||
Reference in New Issue
Block a user