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()
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()
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
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 )
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 ):