def doTestMyCapacity(self, arg): """ Here are some values. + donated_bytes : you set this in the configs + consumed_bytes : how many space was taken from you by other users + free_bytes = donated_bytes - consumed_bytes : not yet allocated space + used_bytes : size of all files, which you store on your disk for your customers + ratio : currently used space compared to consumed space """ lg.out(8, 'customers_rejector.doTestMyCapacity') failed_customers = set() current_customers = contactsdb.customers() donated_bytes = settings.getDonatedBytes() space_dict = accounting.read_customers_quotas() used_dict = accounting.read_customers_usage() unknown_customers, unused_quotas = accounting.validate_customers_quotas( space_dict) failed_customers.update(unknown_customers) for idurl in unknown_customers: space_dict.pop(idurl, None) for idurl in unused_quotas: space_dict.pop(idurl, None) consumed_bytes = accounting.count_consumed_space(space_dict) space_dict['free'] = donated_bytes - consumed_bytes if consumed_bytes < donated_bytes and len(failed_customers) == 0: accounting.write_customers_quotas(space_dict) lg.out(8, ' space is OK !!!!!!!!') self.automat('space-enough') return if failed_customers: lg.out( 8, ' found FAILED Customers:\n%s' % (' \n'.join(failed_customers))) for idurl in failed_customers: current_customers.remove(idurl) self.automat('space-overflow', (space_dict, consumed_bytes, current_customers, failed_customers)) return used_space_ratio_dict = accounting.calculate_customers_usage_ratio( space_dict, used_dict) customers_sorted = sorted( current_customers, key=lambda idurl: used_space_ratio_dict[idurl], ) while len(customers_sorted) > 0 and consumed_bytes > donated_bytes: idurl = customers_sorted.pop() allocated_bytes = int(space_dict[idurl]) consumed_bytes -= allocated_bytes space_dict.pop(idurl) failed_customers.add(idurl) current_customers.remove(idurl) lg.out(8, ' customer %s will be REMOVED' % idurl) space_dict['free'] = donated_bytes - consumed_bytes lg.out(8, ' SPACE NOT ENOUGH !!!!!!!!!!') self.automat( 'space-overflow', (space_dict, consumed_bytes, current_customers, failed_customers))
def doTestMyCapacity(self, *args, **kwargs): """ Here are some values. + donated_bytes : you set this in the settings + consumed_bytes : how many space was taken from you by other users + free_bytes = donated_bytes - consumed_bytes : not yet allocated space + used_bytes : size of all files, which you store on your disk for your customers + ratio : currently used space compared to consumed space """ if _Debug: lg.out(_DebugLevel, 'customers_rejector.doTestMyCapacity') failed_customers = set() current_customers = contactsdb.customers() donated_bytes = settings.getDonatedBytes() space_dict, free_space = accounting.read_customers_quotas() used_dict = accounting.read_customers_usage() unknown_customers, unused_quotas = accounting.validate_customers_quotas( space_dict, free_space) failed_customers.update(unknown_customers) for idurl in unknown_customers: space_dict.pop(idurl, None) for idurl in unused_quotas: space_dict.pop(idurl, None) consumed_bytes = accounting.count_consumed_space(space_dict) free_space = donated_bytes - consumed_bytes if consumed_bytes < donated_bytes and len(failed_customers) == 0: accounting.write_customers_quotas(space_dict, free_space) lg.info('storage quota checks succeed, all customers are verified') self.automat('space-enough') return if failed_customers: for idurl in failed_customers: lg.warn('customer %r failed storage quota verification' % idurl) current_customers.remove(idurl) self.automat('space-overflow', failed_customers) return used_space_ratio_dict = accounting.calculate_customers_usage_ratio( space_dict, used_dict) customers_sorted = sorted( current_customers, key=lambda idurl: used_space_ratio_dict[idurl], ) while len(customers_sorted) > 0 and consumed_bytes > donated_bytes: idurl = customers_sorted.pop() allocated_bytes = int(space_dict[idurl]) consumed_bytes -= allocated_bytes space_dict.pop(idurl) failed_customers.add(idurl) current_customers.remove(idurl) lg.warn( 'customer %r will be removed because of storage quota overflow' % idurl) free_space = donated_bytes - consumed_bytes self.automat('space-overflow', failed_customers)
def doTestMyCapacity(self, arg): """ Here are some values. + donated_bytes : you set this in the configs + consumed_bytes : how many space was taken from you by other users + free_bytes = donated_bytes - consumed_bytes : not yet allocated space + used_bytes : size of all files, which you store on your disk for your customers + ratio : currently used space compared to consumed space """ lg.out(8, 'customers_rejector.doTestMyCapacity') failed_customers = set() current_customers = contactsdb.customers() donated_bytes = settings.getDonatedBytes() space_dict = accounting.read_customers_quotas() used_dict = accounting.read_customers_usage() unknown_customers, unused_quotas = accounting.validate_customers_quotas(space_dict) failed_customers.update(unknown_customers) for idurl in unknown_customers: space_dict.pop(idurl, None) for idurl in unused_quotas: space_dict.pop(idurl, None) consumed_bytes = accounting.count_consumed_space(space_dict) space_dict['free'] = donated_bytes - consumed_bytes if consumed_bytes < donated_bytes and len(failed_customers) == 0: accounting.write_customers_quotas(space_dict) lg.out(8, ' space is OK !!!!!!!!') self.automat('space-enough') return if failed_customers: lg.out(8, ' found FAILED Customers:\n%s' % ( ' \n'.join(failed_customers))) for idurl in failed_customers: current_customers.remove(idurl) self.automat('space-overflow', ( space_dict, consumed_bytes, current_customers, failed_customers)) return used_space_ratio_dict = accounting.calculate_customers_usage_ratio(space_dict, used_dict) customers_sorted = sorted(current_customers, key=lambda idurl: used_space_ratio_dict[idurl],) while len(customers_sorted) > 0 and consumed_bytes > donated_bytes: idurl = customers_sorted.pop() allocated_bytes = int(space_dict[idurl]) consumed_bytes -= allocated_bytes space_dict.pop(idurl) failed_customers.add(idurl) current_customers.remove(idurl) lg.out(8, ' customer %s will be REMOVED' % idurl) space_dict['free'] = donated_bytes - consumed_bytes lg.out(8, ' SPACE NOT ENOUGH !!!!!!!!!!') self.automat('space-overflow', ( space_dict, consumed_bytes, current_customers, failed_customers))