summaryrefslogtreecommitdiffstats
path: root/BitTorrent/CurrentRateMeasure.py
diff options
context:
space:
mode:
Diffstat (limited to 'BitTorrent/CurrentRateMeasure.py')
-rw-r--r--BitTorrent/CurrentRateMeasure.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/BitTorrent/CurrentRateMeasure.py b/BitTorrent/CurrentRateMeasure.py
new file mode 100644
index 0000000..3dd940f
--- /dev/null
+++ b/BitTorrent/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 BitTorrent.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