fix(meshcore): clarify LPP telemetry WARN and stop pubkey nodeNum log spam#3680
Conversation
Two log-clarity fixes for MeshCore telemetry: - #3676: requestRemoteTelemetry() WARN now names the LPP path explicitly ("requestRemoteTelemetry (LPP)") so it isn't confused with the separate status/stats request that runs alongside it for repeater-like targets. An LPP timeout is common and non-fatal; the status path is unaffected. - #3677: GET /api/telemetry/:nodeId skips the getNode lookup for 64-hex MeshCore public keys. Previously parseInt overflowed to ~6e+76 and tripped NodesRepository.getNode's out-of-range guard on every poll, spamming '[WARN] rejecting out-of-range nodeNum 6.027...e+76'. MeshCore peers have no Meshtastic position-override semantics, so isPrivate is simply false. Adds a regression test asserting getNode is not called for a pubkey id. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VBLhGGNh35oMwTL53va1Y5
|
Claude finished @Yeraze's task —— View job PR Review
Both fixes are clean and well-targeted. Here's the detailed breakdown:
|
| Area | Finding |
|---|---|
| Code quality | ✅ Clean, minimal, well-commented changes |
| Correctness | ✅ Both fixes are logically sound |
| Performance | ✅ Eliminates a wasted DB round-trip per poll cycle |
| Security | ✅ No new attack surface introduced; isPrivate defaults conservatively to false |
| Test coverage | ✅ Regression test covers the exact fix; existing tests unaffected |
No blocking issues. Ready to merge.
Summary
Two small MeshCore telemetry log-clarity fixes.
#3676 — ambiguous LPP timeout WARN
For repeater-like targets the scheduler runs two independent telemetry paths: status (
requestNodeStatus) and LPP (requestRemoteTelemetry). A common, non-fatal LPP timeout logged:which reads like a hard failure even though the status path succeeded. The WARN now names the path explicitly —
requestRemoteTelemetry (LPP) (...) failed: ...— so operators can tell which path timed out. The siblingthrewWARN is labeled the same way.#3677 —
rejecting out-of-range nodeNum 6.027...e+76spamGET /api/telemetry/:nodeIdunconditionally ranparseInt(nodeId, 16)and calledgetNodeto read the private-position flag. MeshCore peers arrive here as a 64-hex public key, which overflowsparseIntto ~6e+76 and tripsNodesRepository.getNode's out-of-range guard on every poll (the MeshCore Info view auto-refreshes). The lookup is now skipped for 64-hex ids — they have no Meshtastic position-override semantics, soisPrivateis simplyfalse, and the warning stops.Testing
getNodeis not called for a 64-hex pubkey id.Closes #3676
Closes #3677
🤖 Generated with Claude Code