in metric/system/cgroup/reader.go [356:387]
func (r *Reader) readControllerList(cgroupsFile string) ([]string, error) {
// edge case: There's no V2 controller
if r.cgroupMountpoints.V2Loc == "" {
return []string{}, nil
}
controllers := strings.Split(cgroupsFile, "\n")
var cgpath string
for _, controller := range controllers {
if strings.Contains(controller, "0::/") {
fields := strings.Split(controller, ":")
cgpath = fields[2]
}
}
// no v2 controllers
if cgpath == "" {
return []string{}, nil
}
cgFilePath := filepath.Join(r.cgroupMountpoints.V2Loc, cgpath, "cgroup.controllers")
if cgroupNSStateFetch() && r.rootfsMountpoint.IsSet() {
cgFilePath = filepath.Join(r.cgroupMountpoints.V2Loc, r.cgroupMountpoints.ContainerizedRootMount, cgpath, "cgroup.controllers")
}
controllersRaw, err := os.ReadFile(cgFilePath)
if err != nil {
return nil, fmt.Errorf("error reading cgroup '%s': file %s: %w", cgpath, cgFilePath, err)
}
if len(controllersRaw) == 0 {
return []string{}, nil
}
return strings.Split(string(controllersRaw), " "), nil
}