Rate limit CAN timeout logs (#3898)

This commit is contained in:
Adeeb Shihadeh
2026-11-02 06:46:06 +00:00
committed by firestar5683
parent dea30ba5e2
commit f7d3dfd037
+9 -1
View File
@@ -146,6 +146,7 @@ class CANParser:
self.can_invalid_cnt: int = CAN_INVALID_CNT
self.last_nonempty_nanos: int = 0
self._last_update_nanos: int = 0
self._last_invalid_log_nanos: int | None = None
def _add_message(self, name_or_addr: str | int, freq: float | None = None) -> None:
if isinstance(name_or_addr, numbers.Number):
@@ -201,13 +202,20 @@ class CANParser:
valid = True
counters_valid = True
bus_timeout = self.bus_timeout
invalid_messages = set()
for state in self.message_states.values():
if state.counter_fail >= MAX_BAD_COUNTER:
counters_valid = False
state.rate_limited_log(self._last_update_nanos, f"counter invalid, {state.counter_fail=} {MAX_BAD_COUNTER=}")
if not state.valid(self._last_update_nanos, bus_timeout):
valid = False
state.rate_limited_log(self._last_update_nanos, "not valid (timeout or missing)")
invalid_messages.add(state.address)
if invalid_messages and (self._last_invalid_log_nanos is None or
self._last_update_nanos - self._last_invalid_log_nanos >= 10_000_000_000):
messages = ', '.join(f"{hex(addr)} {self.message_states[addr].name}" for addr in sorted(invalid_messages))
carlog.warning(f"CANParser: bus {self.bus} not valid (timeout or missing): {messages}")
self._last_invalid_log_nanos = self._last_update_nanos
# TODO: probably only want to increment this once per update() call
self.can_invalid_cnt = 0 if valid else min(self.can_invalid_cnt + 1, CAN_INVALID_CNT)