A Python port of the Invisible Internet Project (I2P)
1"""FrequencyStat — named multi-period frequency coordinator.
2
3Ported from net.i2p.stat.FrequencyStat.
4"""
5
6from typing import List, Optional
7
8from i2p_stat.frequency import Frequency
9
10
11class FrequencyStat:
12 """A named statistic containing Frequency objects for multiple 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._frequencies = [Frequency(p) for p in periods]
25
26 @property
27 def name(self) -> str:
28 return self._name
29
30 @property
31 def group_name(self) -> str:
32 return self._group
33
34 @property
35 def description(self) -> str:
36 return self._description
37
38 def get_periods(self) -> List[int]:
39 return [f.period for f in self._frequencies]
40
41 def get_frequency(self, period: int) -> Optional[Frequency]:
42 for f in self._frequencies:
43 if f.period == period:
44 return f
45 return None
46
47 def event_occurred(self) -> None:
48 for f in self._frequencies:
49 f.event_occurred()
50
51 def coalesce_stats(self) -> None:
52 for f in self._frequencies:
53 f.recalculate()
54
55 def get_event_count(self) -> int:
56 if self._frequencies:
57 return self._frequencies[0].get_event_count()
58 return 0