git.sophuwu.com > statlog   
              46
            
             package device

import (
	"encoding/json"
	"fmt"
	"git.sophuwu.com/statlog/types"
	"os"
)

type MEM struct {
	Total   types.Bytes
	Free    types.Bytes
	Buffer  types.Bytes
	Used    types.Bytes
	Percent struct {
		Used     types.Percent
		WithBuff types.Percent
	}
}

func (m *MEM) update() {
	b := make([]byte, 140)
	f, _ := os.Open("/proc/meminfo")
	_, err := f.Read(b)
	if err != nil {
		return
	}
	f.Close()
	var seeker types.NumSeeker
	seeker.Init(b)
	m.Total = types.Bytes(seeker.GetNum())
	m.Free = types.Bytes(seeker.GetNum())
	m.Used = m.Total - types.Bytes(seeker.GetNum())
	m.Buffer = types.Bytes(seeker.GetNum() + seeker.GetNum())
	m.Percent.Used.CalcBytes(m.Used, m.Total)
	m.Percent.WithBuff.CalcBytes(m.Used+m.Buffer, m.Total)
}

func (m *MEM) String() string {
	return fmt.Sprintf("%s USED  %s BUFF  %s FREE", types.Bytes(m.Used), m.Buffer, m.Free)
}

func (m *MEM) JSON() (string, error) {
	b, e := json.Marshal(m)
	return string(b), e
}