in pkg/process/finders/storage.go [268:317]
func (s *ProcessStorage) SyncAllProcessInFinder(finder api.ProcessDetectType, processes []api.DetectedProcess) {
s.mutex.Lock()
defer s.mutex.Unlock()
newProcesses := make([]*ProcessContext, 0)
existingProcesses := s.processes[finder]
existingProcessHasFounded := make(map[*ProcessContext]bool)
for _, p := range existingProcesses {
existingProcessHasFounded[p] = false
}
addProcessBuilder := s.newProcessEventBuilder(ProcessOperateAdd)
for _, syncProcess := range processes {
if syncProcess == nil {
continue
}
founded := false
for _, existingProcess := range existingProcesses {
if syncProcess.Pid() == existingProcess.Pid() && syncProcess.Entity().SameWith(existingProcess.Entity()) {
newProcesses = append(newProcesses, existingProcess)
existingProcessHasFounded[existingProcess] = true
founded = true
break
}
}
// if not found in existing processes, need to add this process
if !founded {
processContext := s.constructNewProcessContext(finder, syncProcess)
newProcesses = append(newProcesses, processContext)
addProcessBuilder.AddProcess(syncProcess.Pid(), newProcesses[len(newProcesses)-1])
log.Infof("detected new process by sync all: pid: %d, entity: %s", syncProcess.Pid(), syncProcess.Entity())
}
}
addProcessBuilder.Send()
// log the dead processes
eventBuilder := s.newProcessEventBuilder(ProcessOperateDelete)
for p, found := range existingProcessHasFounded {
if found {
continue
}
log.Infof("the process has been recognized as dead, so deleted. pid: %d, entity: %s, id: %s", p.Pid(), p.Entity(), p.id)
eventBuilder.AddProcess(p.Pid(), p)
}
s.processes[finder] = newProcesses
eventBuilder.Send()
}