diff --git a/CHANGELOG.md b/CHANGELOG.md index c850c81985..8d285ce0fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * General * Stop reporting db file sizes during init phase ([#3331](https://github.com/mozilla/glean/pull/3331)) * Tiny performance improvement for putting tasks on the dispatcher ([#3318](https://github.com/mozilla/glean/pull/3318)) + * Instrument the case when the `client_id.txt` file does not exist yet ([#3339](https://github.com/mozilla/glean/pull/3339)) # v66.1.2 (2025-11-25) diff --git a/glean-core/metrics.yaml b/glean-core/metrics.yaml index eda34050ed..0e559ec806 100644 --- a/glean-core/metrics.yaml +++ b/glean-core/metrics.yaml @@ -1188,6 +1188,7 @@ glean.health: - permission-denied - io - c0ffee-in-file + - file-not-found file_write_error: type: labeled_counter diff --git a/glean-core/src/core/mod.rs b/glean-core/src/core/mod.rs index 5baa278a40..fd5866a80f 100644 --- a/glean-core/src/core/mod.rs +++ b/glean-core/src/core/mod.rs @@ -299,6 +299,11 @@ impl Glean { Ok(id) => Some(id), Err(ClientIdFileError::NotFound) => { // That's ok, the file might just not exist yet. + glean + .health_metrics + .file_read_error + .get("file-not-found") + .add_sync(&glean, 1); None } Err(ClientIdFileError::PermissionDenied) => { diff --git a/glean-core/src/internal_metrics.rs b/glean-core/src/internal_metrics.rs index ebc5fbd9ce..b0e405f64b 100644 --- a/glean-core/src/internal_metrics.rs +++ b/glean-core/src/internal_metrics.rs @@ -467,6 +467,7 @@ impl HealthMetrics { Cow::from("permission-denied"), Cow::from("io"), Cow::from("c0ffee-in-file"), + Cow::from("file-not-found"), ]), ), file_write_error: LabeledMetric::::new( diff --git a/glean-core/tests/clientid_textfile.rs b/glean-core/tests/clientid_textfile.rs index 05f585ec25..11133f4a36 100644 --- a/glean-core/tests/clientid_textfile.rs +++ b/glean-core/tests/clientid_textfile.rs @@ -441,6 +441,25 @@ mod read_errors { .unwrap(); assert_eq!(1, state); } + + #[test] + fn file_not_found_is_reported() { + let (glean, temp) = new_glean(None); + + glean.submit_ping_by_name("health", Some("pre_init")); + let mut pending = get_queued_pings(temp.path()).unwrap(); + assert_eq!(1, pending.len()); + let payload = pending.pop().unwrap().1; + + let state = &payload["metrics"]["string"]["glean.health.exception_state"]; + assert_eq!(&serde_json::Value::Null, state); + + let state = payload["metrics"]["labeled_counter"]["glean.health.file_read_error"] + ["file-not-found"] + .as_i64() + .unwrap(); + assert_eq!(1, state); + } } mod write_errors {