func()

in pkg/exporter/nettop/k8s.go [81:139]


func (pc *PodCache) getSandboxPID(cgroupPath string) (int, error) {
	var earliestTime time.Time
	var sandboxPID int

	err := filepath.Walk(cgroupPath, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if !info.IsDir() {
			return nil
		}

		tasksFile := filepath.Join(path, "tasks")
		content, err := os.ReadFile(tasksFile)
		if err != nil {
			return nil
		}

		pids := strings.Split(strings.TrimSpace(string(content)), "\n")
		for _, pidStr := range pids {
			pid, err := strconv.Atoi(pidStr)
			if err != nil {
				continue
			}

			procPath := filepath.Join("/proc", pidStr)
			info, err := os.Stat(procPath)
			if err != nil {
				continue
			}

			cmdlinePath := filepath.Join(procPath, "cmdline")
			cmdline, err := os.ReadFile(cmdlinePath)
			if err != nil {
				continue
			}
			if !strings.Contains(string(cmdline), "pause") {
				continue
			}

			if earliestTime.IsZero() || info.ModTime().Before(earliestTime) {
				earliestTime = info.ModTime()
				sandboxPID = pid
			}
		}
		return nil
	})

	if err != nil {
		return 0, err
	}

	if sandboxPID == 0 {
		return 0, fmt.Errorf("sandbox PID not found")
	}

	return sandboxPID, nil
}