def check_quota(self):
        """
        Check whether the user is within quota.  Should be called before
        every write.  Will raise() if the library has exceeded its allotted
        quota.
        """
        # Don't check on every write, that would be slow
        if self.quota_countdown > 0:
            self.quota_countdown -= 1
            return

        # Re-cache the quota after the countdown
        self.quota = self.get_library_metadata(ArcticLibraryBinding.QUOTA)
        if self.quota is None or self.quota == 0:
            self.quota = 0
            return

        # Figure out whether the user has exceeded their quota
        library = self.arctic[self.get_name()]
        stats = library.stats()

        def to_gigabytes(bytes_):
            return bytes_ / 1024. / 1024. / 1024.

        # Have we exceeded our quota?
        size = stats['totals']['size']
        count = stats['totals']['count']
        if size >= self.quota:
            raise QuotaExceededException("Mongo Quota Exceeded: %s %.3f / %.0f GB used" % (
                '.'.join([self.database_name, self.library]),
                to_gigabytes(size),
                to_gigabytes(self.quota)))

        # Quota not exceeded, print an informational message and return
        try:
            avg_size = size // count if count > 1 else 100 * 1024
            remaining = self.quota - size
            remaining_count = remaining / avg_size
            if remaining_count < 100 or float(remaining) / self.quota < 0.1:
                logger.warning("Mongo Quota: %s %.3f / %.0f GB used" % (
                    '.'.join([self.database_name, self.library]),
                    to_gigabytes(size),
                    to_gigabytes(self.quota)))
            else:
                logger.info("Mongo Quota: %s %.3f / %.0f GB used" % (
                    '.'.join([self.database_name, self.library]),
                    to_gigabytes(size),
                    to_gigabytes(self.quota)))

            # Set-up a timer to prevent us for checking for a few writes.
            # This will check every average half-life
            self.quota_countdown = int(max(remaining_count // 2, 1))
        except Exception as e:
            logger.warning("Encountered an exception while calculating quota statistics: %s" % str(e))
def check_quota ( self ) : if self . quota_countdown > 0 : self . quota_countdown -= 1 return self . quota = self . get_library_metadata ( ArcticLibraryBinding . QUOTA ) if self . quota is None or self . quota == 0 : self . quota = 0 return library = self . arctic [ self . get_name ( ) ] stats = library . stats ( ) def to_gigabytes ( bytes_ ) : return bytes_ / 1024. / 1024. / 1024. size = stats [ 'totals' ] [ 'size' ] count = stats [ 'totals' ] [ 'count' ] if size >= self . quota : raise QuotaExceededException ( "Mongo Quota Exceeded: %s %.3f / %.0f GB used" % ( '.' . join ( [ self . database_name , self . library ] ) , to_gigabytes ( size ) , to_gigabytes ( self . quota ) ) ) try : avg_size = size // count if count > 1 else 100 * 1024 remaining = self . quota - size remaining_count = remaining / avg_size if remaining_count < 100 or float ( remaining ) / self . quota < 0.1 : logger . warning ( "Mongo Quota: %s %.3f / %.0f GB used" % ( '.' . join ( [ self . database_name , self . library ] ) , to_gigabytes ( size ) , to_gigabytes ( self . quota ) ) ) else : logger . info ( "Mongo Quota: %s %.3f / %.0f GB used" % ( '.' . join ( [ self . database_name , self . library ] ) , to_gigabytes ( size ) , to_gigabytes ( self . quota ) ) ) self . quota_countdown = int ( max ( remaining_count // 2 , 1 ) ) except Exception as e : logger . warning ( "Encountered an exception while calculating quota statistics: %s" % str ( e ) )
Check whether the user is within quota.  Should be called before
        every write.  Will raise() if the library has exceeded its allotted
        quota.