def __init__(self, conf): """Initzialize a new instance of out state-checker. :param logger logger: The logger to use. :param dict conf: Our StateCheckers configuration. """ self.db = Factory.get('Database')(client_encoding='UTF-8') self.co = Factory.get('Constants')(self.db) self.ac = Factory.get('Account')(self.db) self.pe = Factory.get('Person')(self.db) self.gr = Factory.get('Group')(self.db) self.et = Factory.get('EmailTarget')(self.db) self.eq = EmailQuota(self.db) self.ea = EmailAddress(self.db) self.ef = EmailForward(self.db) self.cu = CerebrumUtils() self.config = conf self._ldap_page_size = 1000 self._cache_randzone_users = self._populate_randzone_cache( self.config['randzone_unreserve_group']) self._cache_accounts = self._populate_account_cache( self.co.spread_exchange_account) self._cache_addresses = self._populate_address_cache() self._cache_local_delivery = self._populate_local_delivery_cache() self._cache_forwards = self._populate_forward_cache() self._cache_quotas = self._populate_quota_cache() self._cache_targets = self._populate_target_cache() self._cache_names = self._populate_name_cache() self._cache_group_names = self._populate_group_name_cache() self._cache_no_reservation = self._populate_no_reservation_cache() self._cache_primary_accounts = self._populate_primary_account_cache()
def __init__(self): """Initialize the Utils.""" self.db = Factory.get('Database')(client_encoding='UTF-8') self.en = Factory.get('Entity')(self.db) self.ac = Factory.get('Account')(self.db) self.pe = Factory.get('Person')(self.db) self.gr = Factory.get('Group')(self.db) self.co = Factory.get('Constants')(self.db) self.ed = EmailDomain(self.db) self.eq = EmailQuota(self.db) self.ef = EmailForward(self.db) self.et = Factory.get('EmailTarget')(self.db) self.dg = DistributionGroup(self.db)
def process_servers(server_type, except_re): es = EmailServer(db) eq = EmailQuota(db) existing_servers = {} # This lists all hosts, so we need to filter on server_type later. for row in es.list_traits(co.trait_email_server_weight): existing_servers[int(row['entity_id'])] = True assigned = {} for row in es.list_email_server_ext(server_type=server_type): # logger.debug("Processing %r" % row.dict()) if except_re and except_re.match(row['name']): logger.debug("Skipping server named '%s'" % row['name']) continue srv = int(row['server_id']) assigned[srv] = eq.get_quota_stats_by_server(srv)['total_quota'] or 0 logger.debug("%s has assigned quota %d" % (row['name'], assigned[srv])) max_weight = max(assigned.values()) * 110 / 100 for srv in assigned: es.clear() es.find(srv) # We add 1 to handle the case with only one server weight = max_weight - assigned[srv] + 1 logger.debug("Assigning weight %d to server ID %d" % (weight, srv)) es.populate_trait(co.trait_email_server_weight, numval=weight) es.write_db() if srv in existing_servers: del existing_servers[srv] for obsolete in existing_servers: es.clear() es.find(obsolete) if server_type and es.email_server_type != server_type: continue logger.info("Deleting old weight trait for %s" % es.name) es.delete_trait(co.trait_email_server_weight)