diff options
Diffstat (limited to 'NohGooee/CurrentRateMeasure.py')
-rw-r--r-- | NohGooee/CurrentRateMeasure.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/NohGooee/CurrentRateMeasure.py b/NohGooee/CurrentRateMeasure.py new file mode 100644 index 0000000..86e16da --- /dev/null +++ b/NohGooee/CurrentRateMeasure.py @@ -0,0 +1,48 @@ +# The contents of this file are subject to the BitTorrent Open Source License +# Version 1.1 (the License). You may not copy or use this file, in either +# source code or executable form, except in compliance with the License. You +# may obtain a copy of the License at http://www.bittorrent.com/license/. +# +# Software distributed under the License is distributed on an AS IS basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. + +# Written by Bram Cohen + +from NohGooee.platform import bttime + + +class Measure(object): + + def __init__(self, max_rate_period, fudge=5): + self.max_rate_period = max_rate_period + self.ratesince = bttime() - fudge + self.last = self.ratesince + self.rate = 0.0 + self.total = 0 + + def update_rate(self, amount): + self.total += amount + t = bttime() + self.rate = (self.rate * (self.last - self.ratesince) + + amount) / (t - self.ratesince) + self.last = t + if self.ratesince < t - self.max_rate_period: + self.ratesince = t - self.max_rate_period + + def get_rate(self): + self.update_rate(0) + return self.rate + + def get_rate_noupdate(self): + return self.rate + + def time_until_rate(self, newrate): + if self.rate <= newrate: + return 0 + t = bttime() - self.ratesince + return ((self.rate * t) / newrate) - t + + def get_total(self): + return self.total |