as
This commit is contained in:
@@ -9,7 +9,7 @@ from dataclasses import asdict, dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from config import N, POLL_PERIOD_S, STALE_PERIODS
|
||||
from config import DEFAULT_REPORT_INTERVAL_MIN, N, STALE_PERIODS
|
||||
from protocol import BATT_UNKNOWN, DIST_NO_TARGET
|
||||
|
||||
log = logging.getLogger("collector.registry")
|
||||
@@ -128,9 +128,15 @@ class Registry:
|
||||
self.by_addr.pop(addr, None)
|
||||
sensor.state = "lost"
|
||||
|
||||
def reevaluate(self, now: Optional[float] = None, period_s: float = POLL_PERIOD_S) -> bool:
|
||||
def reevaluate(
|
||||
self,
|
||||
now: Optional[float] = None,
|
||||
period_s: Optional[float] = None,
|
||||
) -> bool:
|
||||
"""Update stale/lost. Returns True if any slot freed or state changed."""
|
||||
now = time.time() if now is None else now
|
||||
if period_s is None:
|
||||
period_s = float(DEFAULT_REPORT_INTERVAL_MIN * 60)
|
||||
stale_after = period_s * STALE_PERIODS
|
||||
lost_after = period_s * STALE_PERIODS * 2
|
||||
changed = False
|
||||
@@ -186,7 +192,14 @@ class Registry:
|
||||
reports.append(pack_report(s.battery, s.flags, s.dist))
|
||||
return bitmap, reports
|
||||
|
||||
def status_dict(self) -> dict:
|
||||
def status_dict(
|
||||
self,
|
||||
names: Optional[Dict[str, str]] = None,
|
||||
report_interval_min: int = DEFAULT_REPORT_INTERVAL_MIN,
|
||||
) -> dict:
|
||||
names = names or {}
|
||||
now = time.time()
|
||||
period_s = max(1, int(report_interval_min) * 60)
|
||||
slots_out = []
|
||||
for i in range(self.n):
|
||||
s = self.slots[i]
|
||||
@@ -197,13 +210,16 @@ class Registry:
|
||||
d["slot"] = i
|
||||
d["empty"] = False
|
||||
d["reading"] = None if s.dist == DIST_NO_TARGET else s.dist
|
||||
d["name"] = names.get(s.addr, "")
|
||||
d["age_s"] = max(0, int(now - s.last_seen)) if s.last_seen else None
|
||||
slots_out.append(d)
|
||||
return {
|
||||
"n": self.n,
|
||||
"pool_full": self.pool_full(),
|
||||
"period_s": POLL_PERIOD_S,
|
||||
"period_s": period_s,
|
||||
"report_interval_min": int(report_interval_min),
|
||||
"slots": slots_out,
|
||||
"ts": time.time(),
|
||||
"ts": now,
|
||||
}
|
||||
|
||||
def save(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user