fix: eliminate log spam crash - use plugin parser on start, silence noisy fallback warnings

This commit is contained in:
2026-07-25 18:49:25 +08:00
parent e42ad901d4
commit eeb9ef68a6
2 changed files with 14 additions and 31 deletions
+5 -22
View File
@@ -90,14 +90,6 @@ class TelemetryListener:
host = cfg.get("telemetry_host", "0.0.0.0")
port = cfg.get("telemetry_port", 20777)
selected_game = cfg.get("selected_game_id")
parser_key = None
if selected_game:
for game in cfg.get("games", []):
if game["id"] == selected_game:
parser_key = game.get("parser", "forza")
break
loop = asyncio.get_event_loop()
try:
self._transport, _ = await loop.create_datagram_endpoint(
@@ -105,16 +97,14 @@ class TelemetryListener:
local_addr=(host, port),
)
self._running = True
self.forwarder.reload_targets()
if parser_key and parser_key in PARSER_MAP:
self._parser = self._get_parser(parser_key)
logger.info("Telemetry listener started on %s:%d [parser=%s]", host, port, parser_key)
else:
self._parser = None
logger.info("Telemetry listener started on %s:%d [auto-detect]", host, port)
selected_game = cfg.get("selected_game_id")
if selected_game:
self.set_parser_for_game(selected_game)
logger.info("Telemetry listener started on %s:%d [game=%s]",
host, port, selected_game or "none")
return True
except Exception as e:
logger.error("Failed to start telemetry listener: %s", e)
@@ -144,13 +134,6 @@ class TelemetryListener:
if self._parser:
td = self._parser.parse(data, addr)
else:
for parser_cls in PARSER_MAP.values():
p = parser_cls()
td = p.parse(data, addr)
if td and td.speed_kmh > 0:
break
if td is None:
td = TelemetryData(timestamp=time.time(), raw={"raw_hex": data.hex(), "length": len(data)})
self._latest_data = td
+9 -9
View File
@@ -28,7 +28,7 @@ class ForzaParser(BaseParser):
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
if len(data) < 312:
logger.warning("Forza data too short: %d bytes", len(data))
logger.debug("Forza data too short: %d bytes", len(data))
return td
try:
@@ -73,7 +73,7 @@ class ForzaParser(BaseParser):
})
except struct.error as e:
logger.error("Forza parse error: %s", e)
logger.debug("Forza parse error: %s", e)
return td
@@ -87,7 +87,7 @@ class ACCParser(BaseParser):
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
if len(data) < 200:
logger.warning("ACC data too short: %d bytes", len(data))
logger.debug("ACC data too short: %d bytes", len(data))
return td
try:
@@ -109,7 +109,7 @@ class ACCParser(BaseParser):
"brake": td.brake,
})
except struct.error as e:
logger.error("ACC parse error: %s", e)
logger.debug("ACC parse error: %s", e)
return td
@@ -123,7 +123,7 @@ class F1Parser(BaseParser):
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
if len(data) < 1289:
logger.warning("F1 data too short: %d bytes", len(data))
logger.debug("F1 data too short: %d bytes", len(data))
return td
try:
@@ -149,7 +149,7 @@ class F1Parser(BaseParser):
"lap_time": td.lap_time,
})
except struct.error as e:
logger.error("F1 parse error: %s", e)
logger.debug("F1 parse error: %s", e)
return td
@@ -163,7 +163,7 @@ class IRacingParser(BaseParser):
td.raw = {"raw_hex": data.hex(), "length": len(data), "addr": f"{addr[0]}:{addr[1]}"}
if len(data) < 100:
logger.warning("iRacing data too short: %d bytes", len(data))
logger.debug("iRacing data too short: %d bytes", len(data))
return td
try:
@@ -183,7 +183,7 @@ class IRacingParser(BaseParser):
"brake": td.brake,
})
except struct.error as e:
logger.error("iRacing parse error: %s", e)
logger.debug("iRacing parse error: %s", e)
return td
@@ -216,7 +216,7 @@ class ACParser(BaseParser):
"gear": td.gear,
})
except Exception as e:
logger.error("AC parse error: %s", e)
logger.debug("AC parse error: %s", e)
return td