git.sophuwu.com > statlog   
              47
            
             package device

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

type MEM struct {
	Total   types.Bytes `json:"Total"`
	Free    types.Bytes `json:"Free"`
	Buffer  types.Bytes `json:"Buffer"`
	Used    types.Bytes `json:"Used"`
	Percent struct {
		Used     types.Percent `json:"Used"`
		WithBuff types.Percent `json:"WithBuff"`
	} `json:"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.FromKiB(seeker.GetNum())
	m.Free.FromKiB(seeker.GetNum())
	m.Used.FromKiB(seeker.GetNum())
	m.Used = m.Total - m.Used
	m.Buffer.FromKiB(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 (%s) USED  %s BUFF  %s FREE", types.Bytes(m.Used), m.Percent.Used.String(), m.Buffer, m.Free)
}

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