feat: add use-case session management, analysis algorithms, and REST API (v0.5.0)

- Add session layer with UseCaseSession, SessionRun, SessionManager
  for use-case driven telemetry analysis (shift points, track mapping)
- Add analysis module with shift point detection (gear RPM ranges,
  upshift events, recommended shift RPM) and track map reconstruction
  (spline-aligned interpolation for center line from boundary runs)
- Add 9 REST API endpoints for session CRUD, run management, and
  analysis triggers under /api/sessions/*
- Add RecordingManager with always-on ring buffers (5 min, 18k frames)
  replacing raw binary file dumps
- Wire SessionManager in main.rs with Arc<Mutex> shared state
- Add TelemetryFrame Serialize derives for JSON API output
- Fix stop_recording race: hold active lock across flush I/O
- Fix flush: separate ring buffer lock from JSON serialization
- Fix flush failure propagation: errors prevent Stopped status
- Add data_truncated flag on SessionRun for ring buffer wrap detection
- Deduplicate gear_display into shared free function
- Deduplicate session_display into closure
- Mutex poisoning recovery on all session API handlers
This commit is contained in:
Jan-Peter von Hunnius 2026-06-05 10:40:17 +02:00
parent 56d3169033
commit 47a0896134
10 changed files with 2333 additions and 91 deletions

View file

@ -1,12 +1,17 @@
[package]
name = "rusty-telemetry"
version = "0.4.0"
version = "0.5.0"
edition = "2021"
description = "Sim racing telemetry receiver and analyzer"
[dependencies]
tokio = { version = "1", features = ["full"] }
chrono = "0.4"
chrono = { version = "0.4", features = ["serde"] }
futures = "0.3"
ratatui = "0.29"
crossterm = "0.28"
axum = "0.8"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
uuid = { version = "1", features = ["v4", "serde"] }
tower-http = { version = "0.6", features = ["cors"] }