func memoryStats()

in metric/system/cgroup/cgv1/memory.go [143:196]


func memoryStats(path string, mem *MemorySubsystem) error {
	f, err := os.Open(filepath.Join(path, "memory.stat"))
	if err != nil {
		if os.IsNotExist(err) {
			return nil
		}
		return err
	}
	defer f.Close()

	sc := bufio.NewScanner(f)
	for sc.Scan() {
		t, v, err := cgcommon.ParseCgroupParamKeyValue(sc.Text())
		if err != nil {
			return err
		}
		switch t {
		case "cache":
			mem.Stats.Cache.Bytes = v
		case "rss":
			mem.Stats.RSS.Bytes = v
		case "rss_huge":
			mem.Stats.RSSHuge.Bytes = v
		case "mapped_file":
			mem.Stats.MappedFile.Bytes = v
		case "pgpgin":
			mem.Stats.PagesIn = v
		case "pgpgout":
			mem.Stats.PagesOut = v
		case "pgfault":
			mem.Stats.PageFaults = v
		case "pgmajfault":
			mem.Stats.MajorPageFaults = v
		case "swap":
			mem.Stats.Swap.Bytes = v
		case "active_anon":
			mem.Stats.ActiveAnon.Bytes = v
		case "inactive_anon":
			mem.Stats.InactiveAnon.Bytes = v
		case "active_file":
			mem.Stats.ActiveFile.Bytes = v
		case "inactive_file":
			mem.Stats.InactiveFile.Bytes = v
		case "unevictable":
			mem.Stats.Unevictable.Bytes = v
		case "hierarchical_memory_limit":
			mem.Stats.HierarchicalMemoryLimit.Bytes = v
		case "hierarchical_memsw_limit":
			mem.Stats.HierarchicalMemswLimit.Bytes = v
		}
	}

	return sc.Err()
}