コード例 #1
0
    def _affecting_processes(self,
                             process,
                             packages,
                             affected_process_factory=AffectedProcess):
        collection = AffectedProcessesCollection()
        process_files = process.files
        for package in packages:
            matching_files = set()
            for package_file in self._PACKAGE_MANAGER.package_files(
                    package.name):
                package_file = FilenameCleaner.strip(package_file)
                if not package_file in process_files:
                    continue

                if process.create_time() <= package.modified:
                    matching_files.add(package_file)

            if matching_files:
                aff_pkg = package
                aff_pkg.files = matching_files

                affected = affected_process_factory(process.pid)
                affected.__dict__.update(process.__dict__)
                affected.packages.update([aff_pkg])
                collection.update([affected])
        return collection
コード例 #2
0
ファイル: tracer.py プロジェクト: FrostyX/tracer
	def _affecting_children(self, process, packages, affected_process_factory):
		if not self._rules.find(process.name()):
			return {}

		processes = AffectedProcessesCollection()
		for child in process.children():
			processes.update(self._affecting_processes(child, packages, affected_process_factory))
			processes.update(self._affecting_children(child, packages, affected_process_factory))
		return processes
コード例 #3
0
	def _affecting_children(self, process, packages, affected_process_factory):
		if not self._rules.find(process.name()):
			return {}

		processes = AffectedProcessesCollection()
		for child in process.children():
			processes.update(self._affecting_processes(child, packages, affected_process_factory))
			processes.update(self._affecting_children(child, packages, affected_process_factory))
		return processes
コード例 #4
0
ファイル: test_collections.py プロジェクト: ygemici/tracer
	def test_processes_update(self):
		p1 = AffectedProcess(1234)
		p2 = AffectedProcess(1234)
		p2.files = set(['foo', 'bar', 'baz'])

		c = AffectedProcessesCollection()
		c.update([p1])
		c.update([p2])

		self.assertIn(p1, c)
		self.assertIn('bar', c[c.index(p1)].files)
コード例 #5
0
ファイル: tracer.py プロジェクト: FrostyX/tracer
	def trace_application(self, app, affected_process_factory=AffectedProcess):
		"""
		Returns collection of processes where each of them contains
		packages which affected it. Packages contains only files matching
		with the particular process
		"""
		packages = self._modified_packages()
		processes = AffectedProcessesCollection()
		for process in app.instances:
			processes.update(self._affecting_processes(process, packages, affected_process_factory))
			processes.update(self._affecting_children(process, packages, affected_process_factory))
		return processes
コード例 #6
0
	def trace_application(self, app_name, affected_process_factory=AffectedProcess):
		"""
		Returns collection of processes where each of them contains
		packages which affected it. Packages contains only files matching
		with the particular process
		"""
		packages = self._modified_packages()
		processes = AffectedProcessesCollection()
		for process in self._applications.find(app_name).instances:
			processes.update(self._affecting_processes(process, packages, affected_process_factory))
			processes.update(self._affecting_children(process, packages, affected_process_factory))
		return processes
コード例 #7
0
ファイル: tracer.py プロジェクト: FrostyX/tracer
	def _affecting_processes(self, process, packages, affected_process_factory=AffectedProcess):
		collection = AffectedProcessesCollection()
		process_files = process.files
		for package in packages:
			matching_files = set()
			for package_file in self._PACKAGE_MANAGER.package_files(package.name):
				package_file = FilenameCleaner.strip(package_file)
				if not package_file in process_files:
					continue

				if process.create_time() <= package.modified:
					matching_files.add(package_file)

			if matching_files:
				aff_pkg = package
				aff_pkg.files = matching_files

				affected = affected_process_factory(process.pid)
				affected.__dict__.update(process.__dict__)
				affected.packages.update([aff_pkg])
				collection.update([affected])
		return collection