Exemple #1
0
    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()
Exemple #2
0
 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)