| 296 | } |
| 297 | |
| 298 | async fn load_trace_events(&self, id: &str) -> Result<Option<Vec<TraceEvent>>> { |
| 299 | let path = self.trace_path(id); |
| 300 | if !path.exists() { |
| 301 | return Ok(None); |
| 302 | } |
| 303 | |
| 304 | let json = fs::read_to_string(&path) |
| 305 | .await |
| 306 | .with_context(|| format!("Failed to read trace events from {}", path.display()))?; |
| 307 | let events = serde_json::from_str(&json) |
| 308 | .with_context(|| format!("Failed to parse trace events from {}", path.display()))?; |
| 309 | Ok(Some(events)) |
| 310 | } |
| 311 | |
| 312 | async fn save_run_records(&self, id: &str, records: &[RunRecord]) -> Result<()> { |
| 313 | let path = self.runs_path(id); |