func()

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
}