예제 #1
0
	def networkOptions(self):
		options = ObjectPreferences(True)
		ens = hosts.ExternalNetwork.objects.filter(type=self.getNetworkType())
		if self.getNetworkGroup():
			ens = ens.filter(group=self.getNetworkGroup())
		joins = 0
		# filter statements must be limited because each one causes an 
		# additional table to be added to a join statement
		# SQLite has an internal limit of 64 tables
		for con in self.connectionSetAll():
			dev = con.interface.device
			if dev.host:
				joins = joins + 1
				ens = ens.filter(externalnetworkbridge__host=dev.host)
				if joins > 10:
					#break the loop here keeping the filtered set
					break
		if joins > 10:
			#continue the filtering manually
			enshosts = {}
			for en in ens:
				enshosts[en] = set()
				for enb in en.externalnetworkbridge_set.all():
					enshosts[en].add(enb.host)
			for con in self.connectionSetAll():
				dev = con.interface.device
				if dev.host:
					for en in enshosts.keys():
						if not dev.host in enshosts[en]:
							enshosts.remove(en)
			ens = enshosts.keys()
		for en in ens:
			options.add(en, 1.0)
		return options
예제 #2
0
파일: __init__.py 프로젝트: m3z/ToMaTo
	def hostPreferences(self):
		prefs = ObjectPreferences(True)
		for h in hosts.getAll(self.hostgroup):
			if h.enabled:
				prefs.add(h, 1.0 - len(h.device_set.all())/100.0)
		#print "Host preferences for %s: %s" % (self, prefs) 
		return prefs
예제 #3
0
	def hostPreferences(self):
		prefs = ObjectPreferences()
		# keep it local
		for c in self.connectionSetAll():
			dev = c.interface.device
			if dev.host:
				prefs.add(dev.host, -0.1)
				for h in hosts.getAll(dev.host.group):
					prefs.add(h, 0.01)
		#print "Host preferences for %s: %s" % (self, prefs) 
		return prefs
예제 #4
0
	def hostPreferences(self):
		prefs = ObjectPreferences()
		# keep it local
		sites={}
		for c in self.connectionSetAll():
			dev = c.interface.device
			if dev.host:
				#discourage devices on the same host
				prefs.add(dev.host, -0.05)
				sites[dev.host.group] = sites.get(dev.host.group, 0.0) + 1.0
		for site, num in sites.iteritems():
			val = 0.05 * num/(num+10)
			# value increases with hosts already at that site
			# value is bounded by 0.01
			for h in hosts.getAll(site):
				prefs.add(h, val)
		#print "Host preferences for %s: %s" % (self, prefs) 
		return prefs