in pkg/exporter/nettop/cgroup.go [32:75]
func tasksInsidePodCgroup(path string, absolutePath bool) []int {
//TODO watch file changes by inotify
if cgroupRoot == "" || path == "" {
return nil
}
base := path
if !absolutePath {
base = filepath.Join(cgroupRoot, "memory", path)
}
m := make(map[int]int)
err := filepath.Walk(base, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() && strings.HasSuffix(path, "/tasks") {
tasks, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("failed read cgroup tasks %s: %w", path, err)
}
for _, s := range strings.Split(string(tasks), "\n") {
s = strings.TrimSpace(s)
if s == "" {
continue
}
i, err := strconv.Atoi(s)
if err != nil {
return fmt.Errorf("invalid tasks pid format in %s : %w", path, err)
}
m[i] = 1
}
}
return nil
})
if err != nil {
log.Errorf("failed list tasks: %v", err)
}
var ret []int
for k := range m {
ret = append(ret, k)
}
return ret
}