implement grouped memorymaps output

pull/567/head
Tagir Bakirov 7 years ago
parent 8048a2e9c5
commit 47166d6a81

@ -537,6 +537,9 @@ func (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {
func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {
pid := p.Pid
var ret []MemoryMapsStat
if grouped {
ret = make([]MemoryMapsStat, 1)
}
smapsPath := common.HostProc(strconv.Itoa(int(pid)), "smaps")
contents, err := ioutil.ReadFile(smapsPath)
if err != nil {
@ -599,7 +602,20 @@ func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]M
if err != nil {
return &ret, err
}
ret = append(ret, g)
if grouped {
ret.Size += g.Size
ret.Rss += g.Rss
ret.Pss += g.Pss
ret.SharedClean += g.SharedClean
ret.SharedDirty += g.SharedDirty
ret.PrivateClean += g.PrivateClean
ret.PrivateDirty += g.PrivateDirty
ret.Referenced += g.Referenced
ret.Anonymous += g.Anonymous
ret.Swap += g.Swap
} else {
ret = append(ret, g)
}
}
// starts new block
blocks = make([]string, 16)

@ -89,6 +89,7 @@ func Test_Process_memory_maps(t *testing.T) {
t.Errorf("error %v", err)
}
// ungrouped memory maps
mmaps, err := ret.MemoryMaps(false)
if err != nil {
t.Errorf("memory map get error %v", err)
@ -99,6 +100,18 @@ func Test_Process_memory_maps(t *testing.T) {
t.Errorf("memory map get error %v", m)
}
}
// grouped memory maps
mmaps, err := ret.MemoryMaps(true)
if err != nil {
t.Errorf("memory map get error %v", err)
}
if len(mmaps) != 1 {
t.Errorf("grouped memory maps length (%v) is not equal to 1", len(mmaps))
}
if mmaps[0] == empty {
t.Errorf("memory map is empty")
}
}
func Test_Process_MemoryInfo(t *testing.T) {
p := testGetProcess()

Loading…
Cancel
Save