instrumentation: add next-share/
[cs-p2p-next.git] / instrumentation / next-share / BaseLib / Core / BitTornado / CurrentRateMeasure.py
1 # Written by Bram Cohen
2 # see LICENSE.txt for license information
3
4 from clock import clock
5
6 class Measure:
7     def __init__(self, max_rate_period, fudge = 1):
8         self.max_rate_period = max_rate_period
9         self.ratesince = clock() - fudge
10         self.last = self.ratesince
11         self.rate = 0.0
12         self.total = 0L
13
14     def update_rate(self, amount):
15         self.total += amount
16         t = clock()
17         self.rate = (self.rate * (self.last - self.ratesince) + 
18             amount) / (t - self.ratesince + 0.0001)
19         self.last = t
20         if self.ratesince < t - self.max_rate_period:
21             self.ratesince = t - self.max_rate_period
22
23     def get_rate(self):
24         self.update_rate(0)
25         #print 'Rate: %f (%d bytes)' % (self.rate, self.total)
26         return self.rate
27
28     def get_rate_noupdate(self):
29         return self.rate
30
31     def time_until_rate(self, newrate):
32         if self.rate <= newrate:
33             return 0
34         t = clock() - self.ratesince
35         return ((self.rate * t) / newrate) - t
36
37     def get_total(self):
38         return self.total