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
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
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
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