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
}