fix: truncate traceroute chart x-values to whole seconds to prevent Vico crash (#5122)

This commit is contained in:
James Rich 2026-04-14 06:01:03 -05:00 committed by GitHub
parent 743851b0b5
commit 3c7e1266f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View file

@ -112,7 +112,7 @@ internal fun resolveTraceroutePoints(requests: List<MeshLog>, results: List<Mesh
val requestPacketId = request.fromRadio.packet?.id
val result = results.find { it.fromRadio.packet?.decoded?.request_id == requestPacketId }
val route = result?.fromRadio?.packet?.fullRouteDiscovery
val timeSeconds = request.received_date.toDouble() / MS_PER_SEC
val timeSeconds = (request.received_date / MS_PER_SEC).toDouble()
val forwardHops = route?.let { maxOf(0, it.route.size - 2) }
val returnHops = route?.let { if (it.route_back.isNotEmpty()) maxOf(0, it.route_back.size - 2) else null }

View file

@ -241,6 +241,19 @@ class TracerouteChartTest {
assertNull(point.returnHops)
}
@Test
fun timeSeconds_truncatesSubSecondPrecision() {
// received_date with sub-second remainder (e.g. 1000 seconds + 456 ms)
val requestTime = 1000L * MS_PER_SEC + 456L
val requests = listOf(makeRequest(id = 1, receivedDateMillis = requestTime))
val results = emptyList<MeshLog>()
val point = resolveTraceroutePoints(requests, results).first()
// Must truncate to whole seconds to avoid Vico "x-values are too precise" crash
assertEquals(1000.0, point.timeSeconds)
}
@Test
fun returnHops_computedWhenRouteBackAvailable() {
val requests = listOf(makeRequest(id = 1, receivedDateMillis = 1000L * MS_PER_SEC))