func()

in pkg/process/finders/kubernetes/finder.go [146:206]


func (f *ProcessFinder) analyzeProcesses() error {
	// find out all containers
	containers := f.registry.BuildPodContainers()
	if len(containers) == 0 {
		return nil
	}

	processes, err := process.Processes()
	if err != nil {
		return err
	}

	result := make([]base.DetectedProcess, 0)
	for _, p := range processes {
		createTime, err := p.CreateTime()
		if err != nil {
			continue
		}
		processCahceKey := fmt.Sprintf("%d_%d", p.Pid, createTime)
		cachedProcesses, exist := f.processCache.Get(processCahceKey)
		if exist {
			for _, pro := range cachedProcesses.([]*Process) {
				result = append(result, pro)
			}
			continue
		}

		cgroups, err := f.getProcessCGroup(p.Pid)
		if err != nil {
			continue
		}

		var c *PodContainer
		for _, cgroup := range cgroups {
			if cc := containers[cgroup]; cc != nil {
				c = cc
				break
			}
		}
		if c == nil {
			continue
		}

		// find process builder
		ps, err := f.buildProcesses(p, c)
		if err != nil {
			log.Warnf("find process builder error for pid: %d, err: %v", p.Pid, err)
			continue
		}

		for _, pro := range ps {
			result = append(result, pro)
		}
		f.processCache.Add(processCahceKey, ps)
	}

	if len(result) > 0 {
		f.manager.SyncAllProcessInFinder(result)
	}
	return nil
}