A Python port of the Invisible Internet Project (I2P)
at main 68 lines 1.7 kB view raw
1"""RateStat — named multi-period rate coordinator. 2 3Ported from net.i2p.stat.RateStat. 4""" 5 6from typing import List, Optional 7 8from i2p_stat.rate import Rate 9 10 11class RateStat: 12 """A named statistic containing Rate objects for multiple time periods.""" 13 14 def __init__( 15 self, 16 name: str, 17 description: str, 18 group: str, 19 periods: List[int], 20 ) -> None: 21 self._name = name 22 self._description = description 23 self._group = group 24 self._rates = [Rate(p) for p in sorted(periods)] 25 for r in self._rates: 26 r.set_rate_stat(self) 27 28 @property 29 def name(self) -> str: 30 return self._name 31 32 @property 33 def group_name(self) -> str: 34 return self._group 35 36 @property 37 def description(self) -> str: 38 return self._description 39 40 def get_periods(self) -> List[int]: 41 return [r.period for r in self._rates] 42 43 def get_rate(self, period: int) -> Optional[Rate]: 44 for r in self._rates: 45 if r.period == period: 46 return r 47 return None 48 49 def contains_rate(self, period: int) -> bool: 50 return self.get_rate(period) is not None 51 52 def add_data(self, value: int, event_duration: int = 0) -> None: 53 for r in self._rates: 54 r.add_data(value, event_duration) 55 56 def coalesce_stats(self) -> None: 57 for r in self._rates: 58 r.coalesce() 59 60 def get_lifetime_average_value(self) -> float: 61 if self._rates: 62 return self._rates[0].get_lifetime_average_value() 63 return 0.0 64 65 def get_lifetime_event_count(self) -> int: 66 if self._rates: 67 return self._rates[0].get_lifetime_event_count() 68 return 0