"""RateStat — named multi-period rate coordinator. Ported from net.i2p.stat.RateStat. """ from typing import List, Optional from i2p_stat.rate import Rate class RateStat: """A named statistic containing Rate objects for multiple time periods.""" def __init__( self, name: str, description: str, group: str, periods: List[int], ) -> None: self._name = name self._description = description self._group = group self._rates = [Rate(p) for p in sorted(periods)] for r in self._rates: r.set_rate_stat(self) @property def name(self) -> str: return self._name @property def group_name(self) -> str: return self._group @property def description(self) -> str: return self._description def get_periods(self) -> List[int]: return [r.period for r in self._rates] def get_rate(self, period: int) -> Optional[Rate]: for r in self._rates: if r.period == period: return r return None def contains_rate(self, period: int) -> bool: return self.get_rate(period) is not None def add_data(self, value: int, event_duration: int = 0) -> None: for r in self._rates: r.add_data(value, event_duration) def coalesce_stats(self) -> None: for r in self._rates: r.coalesce() def get_lifetime_average_value(self) -> float: if self._rates: return self._rates[0].get_lifetime_average_value() return 0.0 def get_lifetime_event_count(self) -> int: if self._rates: return self._rates[0].get_lifetime_event_count() return 0