예제 #1
0
    def GetTracker(self, network_context):

        with self._lock:

            if network_context in self._network_contexts_to_tracker_containers:

                return self._GetTracker(network_context)

            else:

                return HydrusNetworking.BandwidthTracker()
예제 #2
0
    def __init__(self, name, network_context=None, bandwidth_tracker=None):

        if network_context is None:

            network_context = ClientNetworkingContexts.GLOBAL_NETWORK_CONTEXT

        if bandwidth_tracker is None:

            bandwidth_tracker = HydrusNetworking.BandwidthTracker()

        HydrusSerialisable.SerialisableBaseNamed.__init__(self, name)

        self.network_context = network_context
        self.bandwidth_tracker = bandwidth_tracker
    def DeleteHistory(self, network_contexts):

        with self._lock:

            for network_context in network_contexts:

                if network_context in self._network_contexts_to_bandwidth_trackers:

                    del self._network_contexts_to_bandwidth_trackers[
                        network_context]

                    if network_context == ClientNetworkingContexts.GLOBAL_NETWORK_CONTEXT:

                        # just to reset it, so we have a 0 global context at all times
                        self._network_contexts_to_bandwidth_trackers[
                            ClientNetworkingContexts.
                            GLOBAL_NETWORK_CONTEXT] = HydrusNetworking.BandwidthTracker(
                            )

            self._SetDirty()
예제 #4
0
    def _GetTracker(self,
                    network_context: ClientNetworkingContexts.NetworkContext,
                    making_it_dirty=False):

        if network_context not in self._network_contexts_to_tracker_containers:

            bandwidth_tracker = HydrusNetworking.BandwidthTracker()

            tracker_container_name = HydrusData.GenerateKey().hex()

            tracker_container = NetworkBandwidthManagerTrackerContainer(
                tracker_container_name,
                network_context=network_context,
                bandwidth_tracker=bandwidth_tracker)

            self._tracker_container_names_to_tracker_containers[
                tracker_container_name] = tracker_container
            self._network_contexts_to_tracker_containers[
                network_context] = tracker_container

            # note this discards ephemeral network contexts, which have temporary identifiers that are generally invisible to the user

            if not network_context.IsEphemeral():

                self._tracker_container_names.add(tracker_container_name)
                self._dirty_tracker_container_names.add(tracker_container_name)

            self._SetDirty()

        tracker_container = self._network_contexts_to_tracker_containers[
            network_context]

        if making_it_dirty and not network_context.IsEphemeral():

            self._dirty_tracker_container_names.add(
                tracker_container.GetName())

        return tracker_container.bandwidth_tracker
예제 #5
0
 def test_bandwidth_tracker( self ):
     
     bandwidth_tracker = HydrusNetworking.BandwidthTracker()
     
     self.assertEqual( bandwidth_tracker.GetCurrentMonthSummary(), 'used 0B in 0 requests this month' )
     
     now = HydrusData.GetNow()
     
     with patch.object( HydrusData, 'GetNow', return_value = now ):
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 0 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 0 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 1 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 1 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 2 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 2 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 6 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 6 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 3600 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 3600 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, None ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, None ), 0 )
         
         #
         
         bandwidth_tracker.ReportDataUsed( 1024 )
         bandwidth_tracker.ReportRequestUsed()
         
         self.assertEqual( bandwidth_tracker.GetCurrentMonthSummary(), 'used 1.0KB in 1 requests this month' )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 0 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 0 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 1 ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 1 ), 1 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 2 ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 2 ), 1 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 6 ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 6 ), 1 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 3600 ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 3600 ), 1 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, None ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, None ), 1 )
         
     
     #
     
     five_secs_from_now = now + 5
     
     with patch.object( HydrusData, 'GetNow', return_value = five_secs_from_now ):
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 0 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 0 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 1 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 1 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 2 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 2 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 6 ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 6 ), 1 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 3600 ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 3600 ), 1 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, None ), 1024 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, None ), 1 )
         
         #
         
         bandwidth_tracker.ReportDataUsed( 32 )
         bandwidth_tracker.ReportRequestUsed()
         
         bandwidth_tracker.ReportDataUsed( 32 )
         bandwidth_tracker.ReportRequestUsed()
         
         self.assertEqual( bandwidth_tracker.GetCurrentMonthSummary(), 'used 1.1KB in 3 requests this month' )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 0 ), 0 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 0 ), 0 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 1 ), 64 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 1 ), 2 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 2 ), 64 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 2 ), 2 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 6 ), 1088 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 6 ), 3 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, 3600 ), 1088 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, 3600 ), 3 )
         
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_DATA, None ), 1088 )
         self.assertEqual( bandwidth_tracker.GetUsage( HC.BANDWIDTH_TYPE_REQUESTS, None ), 3 )
예제 #6
0
from mock import patch

from hydrus.core import HydrusConstants as HC
from hydrus.core import HydrusData
from hydrus.core import HydrusNetworking

now = HydrusData.GetNow()

now_10 = now + 10

now_20 = now + 20

with patch.object( HydrusData, 'GetNow', return_value = now ):
    
    HIGH_USAGE = HydrusNetworking.BandwidthTracker()
    
    for i in range( 100 ):
        
        HIGH_USAGE.ReportRequestUsed()
        HIGH_USAGE.ReportDataUsed( random.randint( 512, 1024 ) )
        
    
    LOW_USAGE = HydrusNetworking.BandwidthTracker()
    
    LOW_USAGE.ReportRequestUsed()
    LOW_USAGE.ReportDataUsed( 1024 )
    
    ZERO_USAGE = HydrusNetworking.BandwidthTracker()
    
class TestBandwidthRules( unittest.TestCase ):