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
}