From b6188c3c3addacba94546ba2b5efbf3aa7e14146 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 25 Mar 2026 18:35:29 +0100 Subject: [PATCH 1/2] feat: add error handled option --- src/batch_queue/mod.rs | 1 + src/handler/mod.rs | 1 + src/models.rs | 17 +++++++++++++++++ src/tinybird.rs | 2 ++ 4 files changed, 21 insertions(+) diff --git a/src/batch_queue/mod.rs b/src/batch_queue/mod.rs index d504e11..865842e 100644 --- a/src/batch_queue/mod.rs +++ b/src/batch_queue/mod.rs @@ -1130,6 +1130,7 @@ mod tests { core_count: None, entry_data: "{}".to_string(), context: None, + handled: false, created_at: Utc::now(), }), tracking: None, diff --git a/src/handler/mod.rs b/src/handler/mod.rs index 6f6fe2f..104966c 100644 --- a/src/handler/mod.rs +++ b/src/handler/mod.rs @@ -660,6 +660,7 @@ pub async fn insert_error_entries( core_count: params.details.core_count, entry_data: params.details.entry_data, context: params.context, + handled: data.handled, created_at, }; diff --git a/src/models.rs b/src/models.rs index 11ff768..7fc780d 100644 --- a/src/models.rs +++ b/src/models.rs @@ -44,6 +44,8 @@ pub struct ErrorTracking { pub session_id: Option, #[serde(default, rename = "buildId")] pub build_id: Option, + #[serde(default)] + pub handled: bool, } #[derive(Debug, Serialize, Deserialize)] @@ -116,6 +118,21 @@ mod tests { let errors = req.errors.unwrap(); assert_eq!(errors.len(), 1); assert_eq!(errors[0].error.error, "Error"); + assert!(!errors[0].handled); assert_eq!(req.session_id, Some("mkqsr2zu-rhhe8v3j".to_string())); } + + #[test] + fn test_error_tracking_handled_parsing() { + let json = r#"{ + "hash": "err_3d39cc9f28fb81e8b7064481c7deb8c0bb349cb0877558cc73b677c1fb9a704d", + "error": "Error", + "message": "Uncaught Error: Render error", + "handled": true + }"#; + + let result = serde_json::from_str::(json); + assert!(result.is_ok(), "Failed to parse: {:?}", result.err()); + assert!(result.unwrap().handled); + } } diff --git a/src/tinybird.rs b/src/tinybird.rs index a3aa121..4e235cd 100644 --- a/src/tinybird.rs +++ b/src/tinybird.rs @@ -100,6 +100,8 @@ pub struct ErrorTrackingRow { pub core_count: Option, pub entry_data: String, pub context: Option, + #[serde(default)] + pub handled: bool, #[serde(with = "chrono::serde::ts_milliseconds")] pub created_at: DateTime, } From 6c9ad60aeb2c3cd25ddccea128c8dc2928897fd6 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 25 Mar 2026 18:40:35 +0100 Subject: [PATCH 2/2] fix: don't default to false to prevent confusion --- src/batch_queue/mod.rs | 2 +- src/models.rs | 7 +++---- src/tinybird.rs | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/batch_queue/mod.rs b/src/batch_queue/mod.rs index 865842e..cffdeaa 100644 --- a/src/batch_queue/mod.rs +++ b/src/batch_queue/mod.rs @@ -1130,7 +1130,7 @@ mod tests { core_count: None, entry_data: "{}".to_string(), context: None, - handled: false, + handled: None, created_at: Utc::now(), }), tracking: None, diff --git a/src/models.rs b/src/models.rs index 7fc780d..8147f7e 100644 --- a/src/models.rs +++ b/src/models.rs @@ -44,8 +44,7 @@ pub struct ErrorTracking { pub session_id: Option, #[serde(default, rename = "buildId")] pub build_id: Option, - #[serde(default)] - pub handled: bool, + pub handled: Option, } #[derive(Debug, Serialize, Deserialize)] @@ -118,7 +117,7 @@ mod tests { let errors = req.errors.unwrap(); assert_eq!(errors.len(), 1); assert_eq!(errors[0].error.error, "Error"); - assert!(!errors[0].handled); + assert_eq!(errors[0].handled, None); assert_eq!(req.session_id, Some("mkqsr2zu-rhhe8v3j".to_string())); } @@ -133,6 +132,6 @@ mod tests { let result = serde_json::from_str::(json); assert!(result.is_ok(), "Failed to parse: {:?}", result.err()); - assert!(result.unwrap().handled); + assert_eq!(result.unwrap().handled, Some(true)); } } diff --git a/src/tinybird.rs b/src/tinybird.rs index 4e235cd..5452651 100644 --- a/src/tinybird.rs +++ b/src/tinybird.rs @@ -100,8 +100,7 @@ pub struct ErrorTrackingRow { pub core_count: Option, pub entry_data: String, pub context: Option, - #[serde(default)] - pub handled: bool, + pub handled: Option, #[serde(with = "chrono::serde::ts_milliseconds")] pub created_at: DateTime, }