stadiamaps / ferrostar

A FOSS navigation SDK built from the ground up for the future
https://stadiamaps.github.io/ferrostar/
Other
179 stars 25 forks source link

Navigation session recording #103

Open ianthetechie opened 6 months ago

ianthetechie commented 6 months ago

We need to enable collection of an event log of a navigation session for debugging. This feature will not be turned on by default, and there will be no mechanism for uploading these anywhere automatically.

Near-term, we will build on this feature to record and replay sessions in our test apps so that we can reproduce strange behaviors and test fixes in a fairly reproducible manner. Mid-term, the GSoC project moves things a direction that would let us build web-based debugging tools (for certain types of issues).

In the March 30 Ferrostar weekly sync call, we discussed a few options; @Archdoog suggested SQLite and I suggested CSV. After having it in the back of my head for almost a week, I'm inclined to go with JSON now for the following reasons.

(Side note on space efficiency: JSON compresses well; I thought about doing something like messagepack, but the libs are not well maintained. Most devs needing device telemetry will probably not need to work with this format as it's designed for debugging issues, not tracking assets or similar purposes.)

I'm labeling this as iOS and android for now since I think that's where the implementation will eventually live. I could think of some ways to do it in Rust, but this feels like it's best kept in the platform layer, since we'll need to put any replay mechanisms there anyways, and it's probably not going to be pure code.

ianthetechie commented 6 months ago

I also just realized that I forgot to state something which should have been obvious at the beginning: we need to record the Route object as well.

Possibly non-obvious: we will probably not be able to guarantee compatibility of recordings across semver breaking releases.