func getStats()

in metric/system/cgroup/cgv2/cpu.go [84:118]


func getStats(path string) (CPUStats, error) {
	f, err := os.Open(filepath.Join(path, "cpu.stat"))
	if err != nil {
		if os.IsNotExist(err) {
			return CPUStats{}, nil
		}
		return CPUStats{}, fmt.Errorf("error reading cpu.stat: %w", err)
	}
	defer f.Close()

	sc := bufio.NewScanner(f)
	data := CPUStats{}
	for sc.Scan() {
		key, val, err := cgcommon.ParseCgroupParamKeyValue(sc.Text())
		if err != nil {
			return data, fmt.Errorf("error parsing cpu.stat file: %w", err)
		}
		switch key {
		case "usage_usec":
			data.Usage.NS = val
		case "user_usec":
			data.User.NS = val
		case "system_usec":
			data.System.NS = val
		case "nr_periods":
			data.Periods = opt.UintWith(val)
		case "nr_throttled":
			data.Throttled.Periods = opt.UintWith(val)
		case "throttled_usec":
			data.Throttled.Us = opt.UintWith(val)
		}
	}

	return data, nil
}