func()

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()
}