Bug 1874923 - Update Glean to 56.1.0 r=janerik,supply-chain-reviewers,mach-reviewers,ahochheiden

Differential Revision: https://phabricator.services.mozilla.com/D199093
This commit is contained in:
Perry McManis 2024-01-22 15:45:27 +00:00
parent 94b5f6b41c
commit c314357a6d
34 changed files with 356 additions and 565 deletions

8
Cargo.lock generated
View file

@ -2281,9 +2281,9 @@ dependencies = [
[[package]] [[package]]
name = "glean" name = "glean"
version = "56.0.0" version = "56.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bd4421c9e77e098f774ce712128179069dd6a56904d3b95c9cf35b8418e3d6a" checksum = "e12e51799c1e40ba51f24e0ff232d35ea321403920bea31dc11de1afaeb541ef"
dependencies = [ dependencies = [
"chrono", "chrono",
"crossbeam-channel", "crossbeam-channel",
@ -2301,9 +2301,9 @@ dependencies = [
[[package]] [[package]]
name = "glean-core" name = "glean-core"
version = "56.0.0" version = "56.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a39d53b7dd7b0b81325273cd601f7ae19fba48e0916413c72952a3cf2b82293e" checksum = "3f7570206325e7a20c45b60bf63f1f5b69c2ce0ee79ca0dc774e7c39eaab19aa"
dependencies = [ dependencies = [
"android_logger", "android_logger",
"bincode", "bincode",

View file

@ -60,7 +60,7 @@ allprojects {
topsrcdir = gradle.mozconfig.topsrcdir topsrcdir = gradle.mozconfig.topsrcdir
topobjdir = gradle.mozconfig.topobjdir topobjdir = gradle.mozconfig.topobjdir
gleanVersion = "56.0.0" gleanVersion = "56.1.0"
if (gleanVersion != getRustVersionFor("glean")) { if (gleanVersion != getRustVersionFor("glean")) {
throw new StopExecutionException("Mismatched Glean version, expected: ${gleanVersion}," + throw new StopExecutionException("Mismatched Glean version, expected: ${gleanVersion}," +
" found ${getRustVersionFor("glean")}") " found ${getRustVersionFor("glean")}")

8
gfx/wr/Cargo.lock generated
View file

@ -996,9 +996,9 @@ dependencies = [
[[package]] [[package]]
name = "glean" name = "glean"
version = "56.0.0" version = "56.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bd4421c9e77e098f774ce712128179069dd6a56904d3b95c9cf35b8418e3d6a" checksum = "e12e51799c1e40ba51f24e0ff232d35ea321403920bea31dc11de1afaeb541ef"
dependencies = [ dependencies = [
"chrono", "chrono",
"crossbeam-channel", "crossbeam-channel",
@ -1016,9 +1016,9 @@ dependencies = [
[[package]] [[package]]
name = "glean-core" name = "glean-core"
version = "56.0.0" version = "56.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a39d53b7dd7b0b81325273cd601f7ae19fba48e0916413c72952a3cf2b82293e" checksum = "3f7570206325e7a20c45b60bf63f1f5b69c2ce0ee79ca0dc774e7c39eaab19aa"
dependencies = [ dependencies = [
"android_logger", "android_logger",
"bincode", "bincode",

View file

@ -52,7 +52,7 @@ svg_fmt = "0.4"
tracy-rs = "0.1.2" tracy-rs = "0.1.2"
derive_more = { version = "0.99", default-features = false, features = ["add_assign"] } derive_more = { version = "0.99", default-features = false, features = ["add_assign"] }
etagere = "0.2.6" etagere = "0.2.6"
glean = "56.0.0" glean = "56.1.0"
firefox-on-glean = { version = "0.1.0", optional = true } firefox-on-glean = { version = "0.1.0", optional = true }
swgl = { path = "../swgl", optional = true } swgl = { path = "../swgl", optional = true }
topological-sort = "0.1" topological-sort = "0.1"

View file

@ -25,7 +25,7 @@ tracy-rs = "0.1.2"
log = "0.4" log = "0.4"
lazy_static = "1" lazy_static = "1"
fxhash = "0.2.1" fxhash = "0.2.1"
glean = { version = "56.0.0", optional = true } glean = { version = "56.1.0", optional = true }
firefox-on-glean = { version = "0.1.0", optional = true } firefox-on-glean = { version = "0.1.0", optional = true }
serde = { optional = true, version = "1.0", features = ["serde_derive"] } serde = { optional = true, version = "1.0", features = ["serde_derive"] }

View file

@ -93,7 +93,7 @@ vendored:third_party/python/wheel
vendored:third_party/python/zipp vendored:third_party/python/zipp
# glean-sdk may not be installable if a wheel isn't available # glean-sdk may not be installable if a wheel isn't available
# and it has to be built from source. # and it has to be built from source.
pypi-optional:glean-sdk==56.0.0:telemetry will not be collected pypi-optional:glean-sdk==56.1.0:telemetry will not be collected
# Mach gracefully handles the case where `psutil` is unavailable. # Mach gracefully handles the case where `psutil` is unavailable.
# We aren't (yet) able to pin packages in automation, so we have to # We aren't (yet) able to pin packages in automation, so we have to
# support down to the oldest locally-installed version (5.4.2). # support down to the oldest locally-installed version (5.4.2).

View file

@ -1,17 +1,6 @@
# cargo-vet imports lock # cargo-vet imports lock
[[unpublished.qcms]]
version = "0.3.0"
audited_as = "0.2.0"
[[publisher.aho-corasick]]
version = "0.7.20"
when = "2022-11-22"
user-id = 189
user-login = "BurntSushi"
user-name = "Andrew Gallant"
[[publisher.aho-corasick]] [[publisher.aho-corasick]]
version = "1.1.0" version = "1.1.0"
when = "2023-09-18" when = "2023-09-18"
@ -54,13 +43,6 @@ user-id = 1258
user-login = "padenot" user-login = "padenot"
user-name = "Paul Adenot" user-name = "Paul Adenot"
[[publisher.authenticator]]
version = "0.4.0-alpha.23"
when = "2023-10-05"
user-id = 175410
user-login = "jschanck"
user-name = "John Schanck"
[[publisher.authenticator]] [[publisher.authenticator]]
version = "0.4.0-alpha.24" version = "0.4.0-alpha.24"
when = "2023-11-29" when = "2023-11-29"
@ -223,29 +205,15 @@ user-login = "jrmuizel"
user-name = "Jeff Muizelaar" user-name = "Jeff Muizelaar"
[[publisher.glean]] [[publisher.glean]]
version = "55.0.0" version = "56.1.0"
when = "2023-10-23" when = "2024-01-17"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.glean]]
version = "56.0.0"
when = "2023-11-30"
user-id = 48 user-id = 48
user-login = "badboy" user-login = "badboy"
user-name = "Jan-Erik Rediger" user-name = "Jan-Erik Rediger"
[[publisher.glean-core]] [[publisher.glean-core]]
version = "55.0.0" version = "56.1.0"
when = "2023-10-23" when = "2024-01-17"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.glean-core]]
version = "56.0.0"
when = "2023-11-30"
user-id = 48 user-id = 48
user-login = "badboy" user-login = "badboy"
user-name = "Jan-Erik Rediger" user-name = "Jan-Erik Rediger"
@ -313,13 +281,6 @@ user-id = 1
user-login = "alexcrichton" user-login = "alexcrichton"
user-name = "Alex Crichton" user-name = "Alex Crichton"
[[publisher.libc]]
version = "0.2.146"
when = "2023-06-06"
user-id = 2915
user-login = "Amanieu"
user-name = "Amanieu d'Antras"
[[publisher.libc]] [[publisher.libc]]
version = "0.2.150" version = "0.2.150"
when = "2023-11-05" when = "2023-11-05"
@ -411,32 +372,12 @@ user-id = 3618
user-login = "dtolnay" user-login = "dtolnay"
user-name = "David Tolnay" user-name = "David Tolnay"
[[publisher.prio]]
version = "0.12.1"
when = "2023-04-13"
user-id = 101233
user-login = "le-automaton"
[[publisher.prio]] [[publisher.prio]]
version = "0.15.3" version = "0.15.3"
when = "2023-10-03" when = "2023-10-03"
user-id = 213776 user-id = 213776
user-login = "divviup-github-automation" user-login = "divviup-github-automation"
[[publisher.proc-macro2]]
version = "1.0.66"
when = "2023-07-16"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.proc-macro2]]
version = "1.0.69"
when = "2023-10-09"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.proc-macro2]] [[publisher.proc-macro2]]
version = "1.0.74" version = "1.0.74"
when = "2024-01-02" when = "2024-01-02"
@ -451,13 +392,6 @@ user-id = 5946
user-login = "jrmuizel" user-login = "jrmuizel"
user-name = "Jeff Muizelaar" user-name = "Jeff Muizelaar"
[[publisher.quote]]
version = "1.0.28"
when = "2023-05-25"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.quote]] [[publisher.quote]]
version = "1.0.35" version = "1.0.35"
when = "2024-01-02" when = "2024-01-02"
@ -465,13 +399,6 @@ user-id = 3618
user-login = "dtolnay" user-login = "dtolnay"
user-name = "David Tolnay" user-name = "David Tolnay"
[[publisher.regex]]
version = "1.7.1"
when = "2023-01-09"
user-id = 189
user-login = "BurntSushi"
user-name = "Andrew Gallant"
[[publisher.regex]] [[publisher.regex]]
version = "1.9.4" version = "1.9.4"
when = "2023-08-26" when = "2023-08-26"
@ -486,13 +413,6 @@ user-id = 189
user-login = "BurntSushi" user-login = "BurntSushi"
user-name = "Andrew Gallant" user-name = "Andrew Gallant"
[[publisher.regex-syntax]]
version = "0.6.28"
when = "2022-11-05"
user-id = 189
user-login = "BurntSushi"
user-name = "Andrew Gallant"
[[publisher.regex-syntax]] [[publisher.regex-syntax]]
version = "0.7.5" version = "0.7.5"
when = "2023-08-26" when = "2023-08-26"
@ -535,34 +455,6 @@ user-id = 2915
user-login = "Amanieu" user-login = "Amanieu"
user-name = "Amanieu d'Antras" user-name = "Amanieu d'Antras"
[[publisher.serde]]
version = "1.0.163"
when = "2023-05-11"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde]]
version = "1.0.192"
when = "2023-11-07"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde]]
version = "1.0.193"
when = "2023-11-21"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde]]
version = "1.0.194"
when = "2024-01-02"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde]] [[publisher.serde]]
version = "1.0.195" version = "1.0.195"
when = "2024-01-06" when = "2024-01-06"
@ -577,34 +469,6 @@ user-id = 3618
user-login = "dtolnay" user-login = "dtolnay"
user-name = "David Tolnay" user-name = "David Tolnay"
[[publisher.serde_derive]]
version = "1.0.163"
when = "2023-05-10"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde_derive]]
version = "1.0.192"
when = "2023-11-07"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde_derive]]
version = "1.0.193"
when = "2023-11-21"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde_derive]]
version = "1.0.194"
when = "2024-01-02"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.serde_derive]] [[publisher.serde_derive]]
version = "1.0.195" version = "1.0.195"
when = "2024-01-06" when = "2024-01-06"
@ -640,20 +504,6 @@ user-id = 2017
user-login = "mbrubeck" user-login = "mbrubeck"
user-name = "Matt Brubeck" user-name = "Matt Brubeck"
[[publisher.syn]]
version = "2.0.18"
when = "2023-05-26"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.syn]]
version = "2.0.39"
when = "2023-11-06"
user-id = 3618
user-login = "dtolnay"
user-name = "David Tolnay"
[[publisher.syn]] [[publisher.syn]]
version = "2.0.46" version = "2.0.46"
when = "2024-01-02" when = "2024-01-02"
@ -661,13 +511,6 @@ user-id = 3618
user-login = "dtolnay" user-login = "dtolnay"
user-name = "David Tolnay" user-name = "David Tolnay"
[[publisher.termcolor]]
version = "1.2.0"
when = "2023-01-15"
user-id = 189
user-login = "BurntSushi"
user-name = "Andrew Gallant"
[[publisher.termcolor]] [[publisher.termcolor]]
version = "1.4.0" version = "1.4.0"
when = "2023-11-14" when = "2023-11-14"
@ -731,173 +574,54 @@ user-id = 1139
user-login = "Manishearth" user-login = "Manishearth"
user-name = "Manish Goregaokar" user-name = "Manish Goregaokar"
[[publisher.uniffi]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi]] [[publisher.uniffi]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_bindgen]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_bindgen]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_bindgen]] [[publisher.uniffi_bindgen]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_build]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_build]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_build]] [[publisher.uniffi_build]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_checksum_derive]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_checksum_derive]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_checksum_derive]] [[publisher.uniffi_checksum_derive]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_core]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_core]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_core]] [[publisher.uniffi_core]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_macros]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_macros]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_macros]] [[publisher.uniffi_macros]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_meta]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_meta]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_meta]] [[publisher.uniffi_meta]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_testing]]
version = "0.24.3"
when = "2023-08-01"
user-id = 48
user-login = "badboy"
user-name = "Jan-Erik Rediger"
[[publisher.uniffi_testing]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_testing]] [[publisher.uniffi_testing]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
user-id = 127697 user-id = 127697
user-login = "bendk" user-login = "bendk"
[[publisher.uniffi_udl]]
version = "0.25.2"
when = "2023-11-20"
user-id = 111105
user-login = "mhammond"
user-name = "Mark Hammond"
[[publisher.uniffi_udl]] [[publisher.uniffi_udl]]
version = "0.25.3" version = "0.25.3"
when = "2023-12-07" when = "2023-12-07"
@ -918,13 +642,6 @@ user-id = 189
user-login = "BurntSushi" user-login = "BurntSushi"
user-name = "Andrew Gallant" user-name = "Andrew Gallant"
[[publisher.warp]]
version = "0.3.3"
when = "2022-09-27"
user-id = 359
user-login = "seanmonstar"
user-name = "Sean McArthur"
[[publisher.warp]] [[publisher.warp]]
version = "0.3.6" version = "0.3.6"
when = "2023-09-27" when = "2023-09-27"
@ -939,13 +656,6 @@ user-id = 1
user-login = "alexcrichton" user-login = "alexcrichton"
user-name = "Alex Crichton" user-name = "Alex Crichton"
[[publisher.wasm-encoder]]
version = "0.33.1"
when = "2023-09-18"
user-id = 1
user-login = "alexcrichton"
user-name = "Alex Crichton"
[[publisher.wasm-encoder]] [[publisher.wasm-encoder]]
version = "0.38.0" version = "0.38.0"
when = "2023-11-20" when = "2023-11-20"
@ -953,13 +663,6 @@ user-id = 1
user-login = "alexcrichton" user-login = "alexcrichton"
user-name = "Alex Crichton" user-name = "Alex Crichton"
[[publisher.wasm-smith]]
version = "0.12.17"
when = "2023-09-18"
user-id = 1
user-login = "alexcrichton"
user-name = "Alex Crichton"
[[publisher.wasm-smith]] [[publisher.wasm-smith]]
version = "0.13.0" version = "0.13.0"
when = "2023-11-20" when = "2023-11-20"
@ -967,13 +670,6 @@ user-id = 1
user-login = "alexcrichton" user-login = "alexcrichton"
user-name = "Alex Crichton" user-name = "Alex Crichton"
[[publisher.wast]]
version = "65.0.1"
when = "2023-09-18"
user-id = 1
user-login = "alexcrichton"
user-name = "Alex Crichton"
[[publisher.wast]] [[publisher.wast]]
version = "69.0.0" version = "69.0.0"
when = "2023-11-20" when = "2023-11-20"
@ -1044,19 +740,6 @@ I am employed by a member of the Bytecode Alliance and plan to continue doing
so and will actively maintain this crate over time. so and will actively maintain this crate over time.
""" """
[[audits.bytecode-alliance.wildcard-audits.wasmparser]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
user-id = 1 # Alex Crichton (alexcrichton)
start = "2020-07-13"
end = "2024-04-14"
notes = """
This is a Bytecode Alliance authored crate maintained in the `wasm-tools`
repository of which I'm one of the primary maintainers and publishers for.
I am employed by a member of the Bytecode Alliance and plan to continue doing
so and will actively maintain this crate over time.
"""
[[audits.bytecode-alliance.wildcard-audits.wast]] [[audits.bytecode-alliance.wildcard-audits.wast]]
who = "Alex Crichton <alex@alexcrichton.com>" who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
@ -1264,12 +947,6 @@ criteria = "safe-to-deploy"
version = "0.2.5" version = "0.2.5"
notes = "I am the author of this crate." notes = "I am the author of this crate."
[[audits.bytecode-alliance.audits.libc]]
who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy"
delta = "0.2.146 -> 0.2.147"
notes = "Only new type definitions and updating others for some platforms, no major changes"
[[audits.bytecode-alliance.audits.memoffset]] [[audits.bytecode-alliance.audits.memoffset]]
who = "Alex Crichton <alex@alexcrichton.com>" who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
@ -1429,18 +1106,6 @@ criteria = "safe-to-deploy"
version = "0.1.1" version = "0.1.1"
notes = "No unsafe usage or ambient capabilities" notes = "No unsafe usage or ambient capabilities"
[[audits.embark-studios.audits.thiserror]]
who = "Johan Andersson <opensource@embark-studios.com>"
criteria = "safe-to-deploy"
version = "1.0.40"
notes = "Wrapper over implementation crate, found no unsafe or ambient capabilities used"
[[audits.embark-studios.audits.thiserror-impl]]
who = "Johan Andersson <opensource@embark-studios.com>"
criteria = "safe-to-deploy"
version = "1.0.40"
notes = "Found no unsafe or ambient capabilities used"
[[audits.embark-studios.audits.yaml-rust]] [[audits.embark-studios.audits.yaml-rust]]
who = "Johan Andersson <opensource@embark-studios.com>" who = "Johan Andersson <opensource@embark-studios.com>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
@ -1480,12 +1145,6 @@ criteria = "safe-to-deploy"
version = "0.3.1" version = "0.3.1"
aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT"
[[audits.google.audits.h2]]
who = "ChromeOS"
criteria = "safe-to-run"
version = "0.3.14"
aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT"
[[audits.google.audits.http]] [[audits.google.audits.http]]
who = "ChromeOS" who = "ChromeOS"
criteria = "safe-to-run" criteria = "safe-to-run"
@ -1596,13 +1255,6 @@ criteria = "safe-to-run"
version = "0.3.0" version = "0.3.0"
aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT"
[[audits.isrg.wildcard-audits.prio]]
who = "David Cook <dcook@divviup.org>"
criteria = "safe-to-deploy"
user-id = 101233 # le-automaton
start = "2020-09-28"
end = "2024-03-23"
[[audits.isrg.wildcard-audits.prio]] [[audits.isrg.wildcard-audits.prio]]
who = "David Cook <dcook@divviup.org>" who = "David Cook <dcook@divviup.org>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
@ -1696,78 +1348,6 @@ who = "Brandon Pitman <bran@bran.land>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"
delta = "0.10.7 -> 0.10.8" delta = "0.10.7 -> 0.10.8"
[[audits.mozilla.wildcard-audits.uniffi]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2021-11-22"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_bindgen]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2021-11-22"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_build]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2021-11-22"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_checksum_derive]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2023-11-20"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_core]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2023-11-20"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_macros]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2021-11-22"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_meta]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2023-11-20"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_testing]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2023-11-20"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.uniffi_udl]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy"
user-id = 111105 # Mark Hammond (mhammond)
start = "2023-11-20"
end = "2024-11-28"
aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml"
[[audits.mozilla.wildcard-audits.zeitstempel]] [[audits.mozilla.wildcard-audits.zeitstempel]]
who = "Jan-Erik Rediger <jrediger@mozilla.com>" who = "Jan-Erik Rediger <jrediger@mozilla.com>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"

View file

@ -1,6 +1,6 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: glean-parser Name: glean-parser
Version: 10.0.3 Version: 11.0.1
Summary: Parser tools for Mozilla's Glean telemetry Summary: Parser tools for Mozilla's Glean telemetry
Home-page: https://github.com/mozilla/glean_parser Home-page: https://github.com/mozilla/glean_parser
Author: The Glean Team Author: The Glean Team
@ -10,11 +10,11 @@ Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Description-Content-Type: text/markdown Description-Content-Type: text/markdown
License-File: LICENSE License-File: LICENSE
License-File: AUTHORS.md License-File: AUTHORS.md
@ -43,7 +43,7 @@ code for various integrations, linting and coverage testing.
## Requirements ## Requirements
- Python 3.7 (or later) - Python 3.8 (or later)
The following library requirements are installed automatically when The following library requirements are installed automatically when
`glean_parser` is installed by `pip`. `glean_parser` is installed by `pip`.
@ -79,6 +79,18 @@ $ glean_parser check < ping.json
## Unreleased ## Unreleased
## 11.0.1
- Fix javascript_server template to include non-event metric parameters in #record call for event metrics ([#643](https://github.com/mozilla/glean_parser/pull/643))
- events: Increase extra key limit to 50 ([Bug 1869429](https://bugzilla.mozilla.org/show_bug.cgi?id=1869429))
## 11.0.0
- Add updated logging logic for Ruby Server ([#642](https://github.com/mozilla/glean_parser/pull/642))
- Add support for event metric type in server-side JavaScript outputter ([DENG-1736](https://mozilla-hub.atlassian.net/browse/DENG-1736))
- BREAKING CHANGE: Dropped support for Python 3.7 ([#638](https://github.com/mozilla/glean_parser/pull/638))
- Add official support for Python 3.11+ ([#638](https://github.com/mozilla/glean_parser/pull/638))
## 10.0.3 ## 10.0.3
- Warn about empty or TODO-tagged data reviews in the list ([#634](https://github.com/mozilla/glean_parser/pull/634)) - Warn about empty or TODO-tagged data reviews in the list ([#634](https://github.com/mozilla/glean_parser/pull/634))

View file

@ -1,9 +1,9 @@
glean_parser/__init__.py,sha256=bJljD052_0y-efcBhYpllICVCXOMHLcXRLNyrvfgt5A,533 glean_parser/__init__.py,sha256=bJljD052_0y-efcBhYpllICVCXOMHLcXRLNyrvfgt5A,533
glean_parser/__main__.py,sha256=7kIBMO-kL7boJxYrKp3CkRr4xX4_ct4BqCiCvtg2jjU,8631 glean_parser/__main__.py,sha256=Rw0PpuQtAvdHJMK1YLozeZkc6x1yjeNZwidu4faovdk,8633
glean_parser/coverage.py,sha256=2IwC4XMDtDamMkBFoYilmqJzW4gyypq65YVCur8SNas,4405 glean_parser/coverage.py,sha256=2IwC4XMDtDamMkBFoYilmqJzW4gyypq65YVCur8SNas,4405
glean_parser/data_review.py,sha256=BweeeTkNNS6HrIDkztawhbDByrk_-Avxpg7YeST3VAs,2152 glean_parser/data_review.py,sha256=BweeeTkNNS6HrIDkztawhbDByrk_-Avxpg7YeST3VAs,2152
glean_parser/javascript.py,sha256=w4ZhNBHBKWYk0h3t7G0Ud2tR__hRqzn9dlEXNKLdQrA,11230 glean_parser/javascript.py,sha256=w4ZhNBHBKWYk0h3t7G0Ud2tR__hRqzn9dlEXNKLdQrA,11230
glean_parser/javascript_server.py,sha256=a-mpoSZ_ZnDWtRGKIVxH6NxSUST42yP9vJU85kQcRKE,6004 glean_parser/javascript_server.py,sha256=SDV9tPL1uZMyS1VSyo5lOFuNPFHZu-PZxr1vhND-GzM,7971
glean_parser/kotlin.py,sha256=5z8_74xlqvHDsedwZhGf1_qb7swPEgIZumkJIuj3ef8,12598 glean_parser/kotlin.py,sha256=5z8_74xlqvHDsedwZhGf1_qb7swPEgIZumkJIuj3ef8,12598
glean_parser/lint.py,sha256=STqdgyOhR4Q3fHivSizgn9bOOyqrNHhzjaqyJxz6qzI,19948 glean_parser/lint.py,sha256=STqdgyOhR4Q3fHivSizgn9bOOyqrNHhzjaqyJxz6qzI,19948
glean_parser/markdown.py,sha256=GkCr1CrV6mnRQseT6FO1-JJ7Eup8X3lxUfRMBTxXpe4,9066 glean_parser/markdown.py,sha256=GkCr1CrV6mnRQseT6FO1-JJ7Eup8X3lxUfRMBTxXpe4,9066
@ -19,26 +19,26 @@ glean_parser/translation_options.py,sha256=Lxzr6G7MP0tC_ZYlZXftS4j0SLiqO-5mGVTEc
glean_parser/util.py,sha256=X5YFAU4kWdDJjMsJzXH-QJVSjUJc_qvXktiM-dJSfzo,16004 glean_parser/util.py,sha256=X5YFAU4kWdDJjMsJzXH-QJVSjUJc_qvXktiM-dJSfzo,16004
glean_parser/validate_ping.py,sha256=0TNvILH6dtzJDys3W8Kqorw6kk03me73OCUDtpoHcXU,2118 glean_parser/validate_ping.py,sha256=0TNvILH6dtzJDys3W8Kqorw6kk03me73OCUDtpoHcXU,2118
glean_parser/schemas/metrics.1-0-0.schema.yaml,sha256=cND3cvi6iBfPUVmtfIBQfGJV9AALpbvN7nu8E33_J-o,19566 glean_parser/schemas/metrics.1-0-0.schema.yaml,sha256=cND3cvi6iBfPUVmtfIBQfGJV9AALpbvN7nu8E33_J-o,19566
glean_parser/schemas/metrics.2-0-0.schema.yaml,sha256=wAlXT7hKZDzF1P8yyIftkmIhrcRhJ1XEjZV0FUTIks8,25849 glean_parser/schemas/metrics.2-0-0.schema.yaml,sha256=sfrARxefWy1WN5HxUKjwjN8lGobbPds5l7Y46VHfP1g,25849
glean_parser/schemas/pings.1-0-0.schema.yaml,sha256=hwCnsKpEysmrmVp-QHGBArEkVY3vaU1rVsxlTwhAzws,4315 glean_parser/schemas/pings.1-0-0.schema.yaml,sha256=hwCnsKpEysmrmVp-QHGBArEkVY3vaU1rVsxlTwhAzws,4315
glean_parser/schemas/pings.2-0-0.schema.yaml,sha256=l-nIuyXJ9-D0X_U6hzGVbhIBhtZDg-rGau-RDrhgpng,4705 glean_parser/schemas/pings.2-0-0.schema.yaml,sha256=l-nIuyXJ9-D0X_U6hzGVbhIBhtZDg-rGau-RDrhgpng,4705
glean_parser/schemas/tags.1-0-0.schema.yaml,sha256=OGXIJlvvVW1vaqB_NVZnwKeZ-sLlfH57vjBSHbj6DNI,1231 glean_parser/schemas/tags.1-0-0.schema.yaml,sha256=OGXIJlvvVW1vaqB_NVZnwKeZ-sLlfH57vjBSHbj6DNI,1231
glean_parser/templates/data_review.jinja2,sha256=jeYU29T1zLSyu9fKBBFu5BFPfIw8_hmOUXw8RXhRXK8,3287 glean_parser/templates/data_review.jinja2,sha256=jeYU29T1zLSyu9fKBBFu5BFPfIw8_hmOUXw8RXhRXK8,3287
glean_parser/templates/javascript.buildinfo.jinja2,sha256=4mXiZCQIk9if4lxlA05kpSIL4a95IdwGwqle2OqqNAs,474 glean_parser/templates/javascript.buildinfo.jinja2,sha256=4mXiZCQIk9if4lxlA05kpSIL4a95IdwGwqle2OqqNAs,474
glean_parser/templates/javascript.jinja2,sha256=cT_bG-jC6m4afECXmcsqHwiiHjRuVtJnfv90OD2Mwxw,2669 glean_parser/templates/javascript.jinja2,sha256=cT_bG-jC6m4afECXmcsqHwiiHjRuVtJnfv90OD2Mwxw,2669
glean_parser/templates/javascript_server.jinja2,sha256=XbYhHWZQ2zkAZyzwLTvfbyV4xLrG97hMh5yRoybF-6c,5773 glean_parser/templates/javascript_server.jinja2,sha256=H991yQOKJMwSgM0bLEA-Q5Z15LWsfEPh6bTYz_owSCU,9423
glean_parser/templates/kotlin.buildinfo.jinja2,sha256=X0lk2SNu5OIIj2i6mUyF9CWFQIonLgfqkgT5fA-5G6c,920 glean_parser/templates/kotlin.buildinfo.jinja2,sha256=X0lk2SNu5OIIj2i6mUyF9CWFQIonLgfqkgT5fA-5G6c,920
glean_parser/templates/kotlin.geckoview.jinja2,sha256=MJOgtoDXmBjE9pwk-G6T89y36RZuMbDWM_-DBN_gFJo,5099 glean_parser/templates/kotlin.geckoview.jinja2,sha256=MJOgtoDXmBjE9pwk-G6T89y36RZuMbDWM_-DBN_gFJo,5099
glean_parser/templates/kotlin.jinja2,sha256=3DqUMXJRkmTvSp_5IRyvGmw5iXYWdox7coMFe3YDxcc,5247 glean_parser/templates/kotlin.jinja2,sha256=3DqUMXJRkmTvSp_5IRyvGmw5iXYWdox7coMFe3YDxcc,5247
glean_parser/templates/markdown.jinja2,sha256=vAHHGGm28HRDPd3zO_wQMAUZIuxE9uQ7hl3NpXxcKV4,3425 glean_parser/templates/markdown.jinja2,sha256=vAHHGGm28HRDPd3zO_wQMAUZIuxE9uQ7hl3NpXxcKV4,3425
glean_parser/templates/qmldir.jinja2,sha256=m6IGsp-tgTiOfQ7VN8XW6GqX0gJqJkt3B6Pkaul6FVo,156 glean_parser/templates/qmldir.jinja2,sha256=m6IGsp-tgTiOfQ7VN8XW6GqX0gJqJkt3B6Pkaul6FVo,156
glean_parser/templates/ruby_server.jinja2,sha256=_gcGMe9Gb3eVj7QeXEBRkYBYn3NWK3_K9e0k6jcElNM,6609 glean_parser/templates/ruby_server.jinja2,sha256=vm4BEenOqzomQNTLFfMOzlWHARnsWUjTBbnR-v2cadI,6247
glean_parser/templates/rust.jinja2,sha256=pdbjq_JGm8XWHsVXk0m2xZ5Pd-Y9T_zxJfZKBoT0ERU,3635 glean_parser/templates/rust.jinja2,sha256=pdbjq_JGm8XWHsVXk0m2xZ5Pd-Y9T_zxJfZKBoT0ERU,3635
glean_parser/templates/swift.jinja2,sha256=NfZdvrG8LGT4H2AWk-vB_GDTMcpW1XZJcApO4OF5AYE,4874 glean_parser/templates/swift.jinja2,sha256=NfZdvrG8LGT4H2AWk-vB_GDTMcpW1XZJcApO4OF5AYE,4874
glean_parser-10.0.3.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455 glean_parser-11.0.1.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
glean_parser-10.0.3.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725 glean_parser-11.0.1.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
glean_parser-10.0.3.dist-info/METADATA,sha256=pwF-0xZEus2muTqypVlVlOTV1uz--Bx6chSQaQPrP68,30127 glean_parser-11.0.1.dist-info/METADATA,sha256=z5yLEYgY4EV1e_cHNQhenhkwK5ryURgljfTfaYK-NYs,30877
glean_parser-10.0.3.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92 glean_parser-11.0.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
glean_parser-10.0.3.dist-info/entry_points.txt,sha256=mf9d3sv8BwSjjR58x9KDnpVkONCnv3fPQC2NjJl15Xg,68 glean_parser-11.0.1.dist-info/entry_points.txt,sha256=mf9d3sv8BwSjjR58x9KDnpVkONCnv3fPQC2NjJl15Xg,68
glean_parser-10.0.3.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13 glean_parser-11.0.1.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
glean_parser-10.0.3.dist-info/RECORD,, glean_parser-11.0.1.dist-info/RECORD,,

View file

@ -1,5 +1,5 @@
Wheel-Version: 1.0 Wheel-Version: 1.0
Generator: bdist_wheel (0.41.3) Generator: bdist_wheel (0.42.0)
Root-Is-Purelib: true Root-Is-Purelib: true
Tag: py3-none-any Tag: py3-none-any

View file

@ -303,12 +303,14 @@ def coverage(coverage_file, metrics_files, format, output, allow_reserved):
) )
def data_review_request(bug, metrics_files): def data_review_request(bug, metrics_files):
""" """
Generate a skeleton Data Review Request for all metrics in metrics_files Generate a skeleton Data Review Request for all metrics in METRICS_FILES
whose bug_numbers fields contain the provided bug string. whose bug_numbers fields contain the provided BUG string.
For example, providing "1694739" matches For example, providing "1694739" matches
"https://bugzilla.mozilla.org/show_bug.cgi?id=1694739". "https://bugzilla.mozilla.org/show_bug.cgi?id=1694739".
To ensure substrings don't match, the provided bug string will match only To ensure substrings don't match, the provided bug string will match only
if it is bounded by non-word characters. if it is bounded by non-word characters.
Prints to stdout. Prints to stdout.
""" """
sys.exit(mod_data_review.generate(bug, [Path(x) for x in metrics_files])) sys.exit(mod_data_review.generate(bug, [Path(x) for x in metrics_files]))

View file

@ -9,14 +9,24 @@ Outputter to generate server Javascript code for collecting events.
This outputter is different from the rest of the outputters in that the code it This outputter is different from the rest of the outputters in that the code it
generates does not use the Glean SDK. It is meant to be used to collect events generates does not use the Glean SDK. It is meant to be used to collect events
using "events as pings" pattern in server-side environments. In these environments in server-side environments. In these environments SDK assumptions to measurement
SDK assumptions to measurement window and connectivity don't hold. window and connectivity don't hold.
Generated code takes care of assembling pings with metrics, serializing to messages Generated code takes care of assembling pings with metrics, serializing to messages
conforming to Glean schema, and logging with mozlog. Then it's the role of the ingestion conforming to Glean schema, and logging with mozlog. Then it's the role of the ingestion
pipeline to pick the messages up and process. pipeline to pick the messages up and process.
Warning: this outputter supports limited set of metrics, Warning: this outputter supports limited set of metrics,
see `SUPPORTED_METRIC_TYPES` below. see `SUPPORTED_METRIC_TYPES` below.
There are two patterns for event structure supported in this environment:
* Events as `Event` metric type, where we generate a single class per ping with
`record{event_name}` method for each event metric. This is recommended to use for new
applications as it allows to fully leverage standard Data Platform tools
post-ingestion.
* Custom pings-as-events, where for each ping we generate a class with a single `record`
method, usually with an `event_name` string metric.
Therefore, unlike in other outputters, here we don't generate classes for each metric.
""" """
from collections import defaultdict from collections import defaultdict
from pathlib import Path from pathlib import Path
@ -28,11 +38,14 @@ from . import util
# Adding a metric here will require updating the `generate_js_metric_type` function # Adding a metric here will require updating the `generate_js_metric_type` function
# and might require changes to the template. # and might require changes to the template.
SUPPORTED_METRIC_TYPES = ["string"] SUPPORTED_METRIC_TYPES = ["string", "event"]
def event_class_name(pingName: str) -> str: def event_class_name(ping_name: str, event_metric_exists: bool) -> str:
return util.Camelize(pingName) + "ServerEvent" # For compatibility with FxA codebase we don't want to add "Logger" suffix
# when custom pings without event metrics are used.
suffix = "Logger" if event_metric_exists else ""
return util.Camelize(ping_name) + "ServerEvent" + suffix
def generate_metric_name(metric: metrics.Metric) -> str: def generate_metric_name(metric: metrics.Metric) -> str:
@ -47,12 +60,20 @@ def generate_js_metric_type(metric: metrics.Metric) -> str:
return metric.type return metric.type
def generate_metric_argument_description(metric: metrics.Metric) -> str: def generate_ping_factory_method(ping: str, event_metric_exists: bool) -> str:
return metric.description.replace("\n", " ").rstrip() # `ServerEventLogger` better describes role of the class that this factory
# method generates, but for compatibility with existing FxA codebase
# we use `Event` suffix if no event metrics are defined.
suffix = "ServerEventLogger" if event_metric_exists else "Event"
return f"create{util.Camelize(ping)}{suffix}"
def generate_ping_factory_method(ping: str) -> str: def generate_event_metric_record_function_name(metric: metrics.Metric) -> str:
return f"create{util.Camelize(ping)}Event" return f"record{util.Camelize(metric.category)}{util.Camelize(metric.name)}"
def clean_string(s: str) -> str:
return s.replace("\n", " ").rstrip()
def output( def output(
@ -79,24 +100,16 @@ def output(
("metric_name", generate_metric_name), ("metric_name", generate_metric_name),
("metric_argument_name", generate_metric_argument_name), ("metric_argument_name", generate_metric_argument_name),
("js_metric_type", generate_js_metric_type), ("js_metric_type", generate_js_metric_type),
("metric_argument_description", generate_metric_argument_description),
("factory_method", generate_ping_factory_method), ("factory_method", generate_ping_factory_method),
(
"event_metric_record_function_name",
generate_event_metric_record_function_name,
),
("clean_string", clean_string),
), ),
) )
# In this environment we don't use a concept of measurement window for collecting event_metric_exists = False
# metrics. Only "events as pings" are supported.
# For each ping we generate code which contains all the logic for assembling it
# with metrics, serializing, and submitting. Therefore we don't generate classes for
# each metric as in standard outputters.
PING_METRIC_ERROR_MSG = (
" Server-side environment is simplified and this"
+ " parser doesn't generate individual metric files. Make sure to pass all"
+ " your ping and metric definitions in a single invocation of the parser."
)
if "pings" not in objs:
print("❌ No ping definition found." + PING_METRIC_ERROR_MSG)
return
# Go through all metrics in objs and build a map of # Go through all metrics in objs and build a map of
# ping->list of metric categories->list of metrics # ping->list of metric categories->list of metrics
@ -113,11 +126,39 @@ def output(
+ " metric type." + " metric type."
) )
continue continue
if metric.type == "event":
# This is used in the template - generated code is slightly
# different when event metric type is used.
event_metric_exists = True
for ping in metric.send_in_pings: for ping in metric.send_in_pings:
metrics_by_type = ping_to_metrics[ping] metrics_by_type = ping_to_metrics[ping]
metrics_list = metrics_by_type.setdefault(metric.type, []) metrics_list = metrics_by_type.setdefault(metric.type, [])
metrics_list.append(metric) metrics_list.append(metric)
PING_METRIC_ERROR_MSG = (
" Server-side environment is simplified and this"
+ " parser doesn't generate individual metric files. Make sure to pass all"
+ " your ping and metric definitions in a single invocation of the parser."
)
if "pings" not in objs:
# If events are meant to be sent in custom pings, we need to make sure they
# are defined. Otherwise we won't have destination tables defined and
# submissions won't pass validation at ingestion.
if event_metric_exists:
if "events" not in ping_to_metrics:
# Event metrics can be sent in standard `events` ping
# or in custom pings.
print(
""
+ PING_METRIC_ERROR_MSG
+ "\n You need to either send your event metrics in standard"
+ " `events` ping or define a custom one."
)
return
else:
print("❌ No ping definition found." + PING_METRIC_ERROR_MSG)
return
if not ping_to_metrics: if not ping_to_metrics:
print("❌ No pings with metrics found." + PING_METRIC_ERROR_MSG) print("❌ No pings with metrics found." + PING_METRIC_ERROR_MSG)
return return
@ -129,6 +170,7 @@ def output(
template.render( template.render(
parser_version=__version__, parser_version=__version__,
pings=ping_to_metrics, pings=ping_to_metrics,
event_metric_exists=event_metric_exists,
lang=lang, lang=lang,
) )
) )

View file

@ -368,7 +368,7 @@ definitions:
description: | description: |
The acceptable keys on the "extra" object sent with events. This is an The acceptable keys on the "extra" object sent with events. This is an
object mapping the key to an object containing metadata about the key. object mapping the key to an object containing metadata about the key.
A maximum of 15 extra keys is allowed. A maximum of 50 extra keys is allowed.
This metadata object has the following keys: This metadata object has the following keys:
- `description`: **Required.** A description of the key. - `description`: **Required.** A description of the key.
@ -390,7 +390,7 @@ definitions:
- quantity - quantity
required: required:
- description - description
maxProperties: 15 maxProperties: 50
default: {} default: {}
gecko_datapoint: gecko_datapoint:

View file

@ -17,19 +17,27 @@ import mozlog{% if lang == "typescript" %}, { Logger }{% endif %} from 'mozlog';
const GLEAN_EVENT_MOZLOG_TYPE = 'glean-server-event'; const GLEAN_EVENT_MOZLOG_TYPE = 'glean-server-event';
{% if lang == "typescript" %} {% if lang == "typescript" %}
type LoggerOptions = { app: string; fmt?: 'heka' }; type LoggerOptions = { app: string; fmt?: 'heka' };
{% if event_metric_exists %}
type Event = {
category: string;
name: string;
extra: Record<string, any>;
timestamp?: number;
};
{% endif %}
{% endif %} {% endif %}
let _logger{% if lang == "typescript" %}: Logger{% endif %}; let _logger{% if lang == "typescript" %}: Logger{% endif %};
{% for ping, metrics_by_type in pings.items() %} {% for ping, metrics_by_type in pings.items() %}
class {{ ping|event_class_name }} { class {{ ping|event_class_name(event_metric_exists) }} {
{% if lang == "typescript" %} {% if lang == "typescript" %}
_applicationId: string; _applicationId: string;
_appDisplayVersion: string; _appDisplayVersion: string;
_channel: string; _channel: string;
{% endif %} {% endif %}
/** /**
* Create {{ ping|event_class_name }} instance. * Create {{ ping|event_class_name(event_metric_exists) }} instance.
* *
* @param {string} applicationId - The application ID. * @param {string} applicationId - The application ID.
* @param {string} appDisplayVersion - The application display version. * @param {string} appDisplayVersion - The application display version.
@ -64,6 +72,9 @@ class {{ ping|event_class_name }} {
{% endif %} {% endif %}
} }
} }
{% if event_metric_exists %}
#record({
{% else %}
/** /**
* Record and submit a server event object. * Record and submit a server event object.
* Event is logged using internal mozlog logger. * Event is logged using internal mozlog logger.
@ -73,40 +84,60 @@ class {{ ping|event_class_name }} {
* information and scrubbed at ingestion. * information and scrubbed at ingestion.
{% for metric_type, metrics in metrics_by_type.items() %} {% for metric_type, metrics in metrics_by_type.items() %}
{% for metric in metrics %} {% for metric in metrics %}
* @param { {{-metric|js_metric_type-}} } {{ metric|metric_argument_name }} - {{ metric|metric_argument_description }}. * @param { {{-metric|js_metric_type-}} } {{ metric|metric_argument_name }} - {{ metric.description|clean_string }}.
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
*/ */
record({ record({
{% endif %}
user_agent, user_agent,
ip_address, ip_address,
{% for metric_type, metrics in metrics_by_type.items() %} {% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{% for metric in metrics %} {% for metric in metrics %}
{{ metric|metric_argument_name }}, {{ metric|metric_argument_name }},
{% endfor %} {% endfor %}
{% endif %}
{% endfor %} {% endfor %}
{% if event_metric_exists %}
event,
{% endif %}
{% if lang == "typescript" %} {% if lang == "typescript" %}
}: { }: {
user_agent: string, user_agent: string,
ip_address: string, ip_address: string,
{% for metric_type, metrics in metrics_by_type.items() %} {% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{% for metric in metrics %} {% for metric in metrics %}
{{ metric|metric_argument_name }}: {{ metric|js_metric_type }}; {{ metric|metric_argument_name }}: {{ metric|js_metric_type }},
{% endfor %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endfor %}
{% if event_metric_exists %}
event: Event
{% endif %}
{% endif %}
}) { }) {
const timestamp = new Date().toISOString(); const now = new Date();
const timestamp = now.toISOString();
{% if event_metric_exists %}
event.timestamp = now.getTime();
{% endif %}
const eventPayload = { const eventPayload = {
metrics: { metrics: {
{% for metric_type, metrics in metrics_by_type.items() %} {% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{{ metric_type }}: { {{ metric_type }}: {
{% for metric in metrics %} {% for metric in metrics %}
'{{ metric|metric_name }}': {{ metric|metric_argument_name }}, '{{ metric|metric_name }}': {{ metric|metric_argument_name }},
{% endfor %} {% endfor %}
}, },
{% endif %}
{% endfor %} {% endfor %}
}, },
{% if event_metric_exists %}
events: [event],
{% endif %}
ping_info: { ping_info: {
seq: 0, // this is required, however doesn't seem to be useful in server context seq: 0, // this is required, however doesn't seem to be useful in server context
start_time: timestamp, start_time: timestamp,
@ -140,11 +171,98 @@ class {{ ping|event_class_name }} {
// this is similar to how FxA currently logs with mozlog: https://github.com/mozilla/fxa/blob/4c5c702a7fcbf6f8c6b1f175e9172cdd21471eac/packages/fxa-auth-server/lib/log.js#L289 // this is similar to how FxA currently logs with mozlog: https://github.com/mozilla/fxa/blob/4c5c702a7fcbf6f8c6b1f175e9172cdd21471eac/packages/fxa-auth-server/lib/log.js#L289
_logger.info(GLEAN_EVENT_MOZLOG_TYPE, ping); _logger.info(GLEAN_EVENT_MOZLOG_TYPE, ping);
} }
{% if event_metric_exists %}
{% for event in metrics_by_type["event"] %}
/**
* Record and submit a {{ event.category }}_{{ event.name }} event:
* {{ event.description|clean_string }}
* Event is logged using internal mozlog logger.
*
* @param {string} user_agent - The user agent.
* @param {string} ip_address - The IP address. Will be used to decode Geo
* information and scrubbed at ingestion.
{% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{% for metric in metrics %}
* @param { {{-metric|js_metric_type-}} } {{ metric|metric_argument_name }} - {{ metric.description|clean_string }}.
{% endfor %}
{% endif %}
{% endfor %}
{% if event.extra_keys %}
{% for extra, metadata in event.extra_keys.items() %}
* @param { {{-metadata.type-}} } {{ extra }} - {{ metadata.description|clean_string }}.
{% endfor %}
{% endif %}
*/
{{ event|event_metric_record_function_name }}({
user_agent,
ip_address,
{% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{% for metric in metrics %}
{{ metric|metric_argument_name }},
{% endfor %}
{% endif %}
{% endfor %}
{% for extra, metadata in event.extra_keys.items() %}
{{ extra }},
{% endfor %}
{% if lang == "typescript" %}
}: {
user_agent: string,
ip_address: string,
{% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{% for metric in metrics %}
{{ metric|metric_argument_name }}: {{ metric|js_metric_type }},
{% endfor %}
{% endif %}
{% endfor %}
{% for extra, metadata in event.extra_keys.items() %}
{{ extra }}: {{metadata.type}},
{% endfor %}
{% endif %}
}) {
let event = {
'category': '{{ event.category }}',
'name': '{{ event.name }}',
{% if event.extra_keys %}
'extra': {
{% for extra, metadata in event.extra_keys.items() %}
'{{ extra }}': {{ extra }},
{% endfor %}
},
{% endif %}
};
this.#record({
user_agent,
ip_address,
{% for metric_type, metrics in metrics_by_type.items() %}
{% if metric_type != 'event' %}
{% for metric in metrics %}
{{ metric|metric_argument_name }},
{% endfor %}
{% endif %}
{% endfor %}
event
});
}
{% endfor %}
{% endif %}
} }
{% endfor %} {% endfor %}
{% for ping in pings %} {% for ping in pings %}
export const {{ ping|factory_method }} = function ({ /**
* Factory function that creates an instance of Glean Server Event Logger to
* record `{{ ping }}` ping events.
* @param {string} applicationId - The application ID.
* @param {string} appDisplayVersion - The application display version.
* @param {string} channel - The channel.
* @param {Object} logger_options - The logger options.
* @returns {EventsServerEventLogger} An instance of EventsServerEventLogger.
*/
export const {{ ping|factory_method(event_metric_exists) }} = function ({
applicationId, applicationId,
appDisplayVersion, appDisplayVersion,
channel, channel,
@ -157,7 +275,7 @@ export const {{ ping|factory_method }} = function ({
logger_options: LoggerOptions; logger_options: LoggerOptions;
{% endif %} {% endif %}
}) { }) {
return new {{ ping|event_class_name }}( return new {{ ping|event_class_name(event_metric_exists) }}(
applicationId, applicationId,
appDisplayVersion, appDisplayVersion,
channel, channel,

View file

@ -12,32 +12,10 @@ Jinja2 template is not. Please file bugs! #}
require 'json' require 'json'
require 'securerandom' require 'securerandom'
require 'logger' require 'logger'
require 'rbconfig'
# this will be used for identifying logs that need to forward to Moz Data Pipeline # this will be used for identifying logs that need to forward to Moz Data Pipeline
GLEAN_EVENT_MOZLOG_TYPE = 'glean-server-event' GLEAN_EVENT_MOZLOG_TYPE = 'glean-server-event'
# helper module to get OS level info for logs
module OS
def self.name
case RbConfig::CONFIG['host_os']
when /linux/
'Linux'
when /darwin/
'OS X'
when /mswin|mingw32|windows/
'Windows'
when /solaris/
'Solaris'
when /bsd/
'BSD'
else
RbConfig::CONFIG['host_os']
end
end
end
module Glean module Glean
{% for ping, metrics_by_type in pings.items() %} {% for ping, metrics_by_type in pings.items() %}
class {{ ping|ping_class_name }} class {{ ping|ping_class_name }}
@ -105,7 +83,7 @@ module Glean
'client_info' => { 'client_info' => {
'telemetry_sdk_build' => 'glean_parser v{{ parser_version }}', 'telemetry_sdk_build' => 'glean_parser v{{ parser_version }}',
'first_run_date' => 'Unknown', 'first_run_date' => 'Unknown',
'os' => OS.name, 'os' => 'Unknown',
'os_version' => 'Unknown', 'os_version' => 'Unknown',
'architecture' => 'Unknown', 'architecture' => 'Unknown',
'app_build' => 'Unknown', 'app_build' => 'Unknown',

View file

@ -2161,8 +2161,7 @@ def resolve_egg_link(path):
return next(dist_groups, ()) return next(dist_groups, ())
if hasattr(pkgutil, 'ImpImporter'): register_finder(pkgutil.ImpImporter, find_on_path)
register_finder(pkgutil.ImpImporter, find_on_path)
if hasattr(importlib_machinery, 'FileFinder'): if hasattr(importlib_machinery, 'FileFinder'):
register_finder(importlib_machinery.FileFinder, find_on_path) register_finder(importlib_machinery.FileFinder, find_on_path)
@ -2313,8 +2312,7 @@ def file_ns_handler(importer, path_item, packageName, module):
return subpath return subpath
if hasattr(pkgutil, 'ImpImporter'): register_namespace_handler(pkgutil.ImpImporter, file_ns_handler)
register_namespace_handler(pkgutil.ImpImporter, file_ns_handler)
register_namespace_handler(zipimport.zipimporter, file_ns_handler) register_namespace_handler(zipimport.zipimporter, file_ns_handler)
if hasattr(importlib_machinery, 'FileFinder'): if hasattr(importlib_machinery, 'FileFinder'):

19
third_party/python/poetry.lock generated vendored
View file

@ -592,14 +592,14 @@ files = [
[[package]] [[package]]
name = "glean-parser" name = "glean-parser"
version = "10.0.3" version = "11.0.1"
description = "Parser tools for Mozilla's Glean telemetry" description = "Parser tools for Mozilla's Glean telemetry"
category = "main" category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
{file = "glean_parser-10.0.3-py3-none-any.whl", hash = "sha256:f8fddd87b24552541318ac037e33750d27d0045131e4f8a60ec13a159fcbdd5c"}, {file = "glean_parser-11.0.1-py3-none-any.whl", hash = "sha256:f6991ba1438909d1fb6f96d3efaaef2a92098eceff39d5d998d3bbb170276c6a"},
{file = "glean_parser-10.0.3.tar.gz", hash = "sha256:d57359629d295f9ee570068a2846966892e3fedb722259ecbcd8cc376d299b51"}, {file = "glean_parser-11.0.1.tar.gz", hash = "sha256:79e523b51b0fddce9f6c6309fa8c64328bb706b2d6c847a53f88a93d01695e43"},
] ]
[package.dependencies] [package.dependencies]
@ -1129,6 +1129,7 @@ files = [
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
{file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
{file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
{file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
@ -1136,8 +1137,16 @@ files = [
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
{file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
{file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
{file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
{file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
{file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
@ -1154,6 +1163,7 @@ files = [
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
{file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
{file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
{file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
{file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
@ -1161,6 +1171,7 @@ files = [
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
{file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
{file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
@ -1595,4 +1606,4 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black (
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.8" python-versions = "^3.8"
content-hash = "d1328039230fe6a6f421e1242613b311774f6702471f55edcc9ba664e6c3df80" content-hash = "8f6e38dcef9aba9437efbfb39d7cce3b0bb2d1ca42fae2aafe56ab86e2ae3084"

View file

@ -22,7 +22,7 @@ fluent.migrate==0.12.0
fluent.syntax==0.19.0 fluent.syntax==0.19.0
# Pin `frozenlist` as it is required for `aiohttp`. Use minimum required version. # Pin `frozenlist` as it is required for `aiohttp`. Use minimum required version.
frozenlist==1.1.1 frozenlist==1.1.1
glean_parser==10.0.3 glean_parser==11.0.1
importlib-metadata==6.0.0 importlib-metadata==6.0.0
# required for compatibility with Flask >= 2 in tools/tryselect/selectors/chooser # required for compatibility with Flask >= 2 in tools/tryselect/selectors/chooser
jinja2==3.1.2 jinja2==3.1.2

View file

@ -275,9 +275,9 @@ frozenlist==1.1.1 ; python_version >= "3.8" and python_version < "4.0" \
giturlparse==0.10.0 ; python_version >= "3.8" and python_version < "4.0" \ giturlparse==0.10.0 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:04ba1a3a099c3093fa8d24a422913c6a9b2c2cd22bcffc939cf72e3e98f672d7 \ --hash=sha256:04ba1a3a099c3093fa8d24a422913c6a9b2c2cd22bcffc939cf72e3e98f672d7 \
--hash=sha256:2595ab291d30717cda8474b874c9fd509f1b9802ad7f6968c36a45e4b13eb337 --hash=sha256:2595ab291d30717cda8474b874c9fd509f1b9802ad7f6968c36a45e4b13eb337
glean-parser==10.0.3 ; python_version >= "3.8" and python_version < "4.0" \ glean-parser==11.0.1 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:d57359629d295f9ee570068a2846966892e3fedb722259ecbcd8cc376d299b51 \ --hash=sha256:79e523b51b0fddce9f6c6309fa8c64328bb706b2d6c847a53f88a93d01695e43 \
--hash=sha256:f8fddd87b24552541318ac037e33750d27d0045131e4f8a60ec13a159fcbdd5c --hash=sha256:f6991ba1438909d1fb6f96d3efaaef2a92098eceff39d5d998d3bbb170276c6a
idna==2.10 ; python_version >= "3.8" and python_version < "4.0" \ idna==2.10 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \
--hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0
@ -460,7 +460,9 @@ python-slugify==8.0.1 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395 \ --hash=sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395 \
--hash=sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27 --hash=sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27
pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" \ pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \
--hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
--hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \
--hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \
--hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \
--hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \
@ -468,7 +470,10 @@ pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \
--hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \
--hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \
--hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \
--hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \
--hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \
--hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \
--hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \
--hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \
--hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \
@ -476,11 +481,15 @@ pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \
--hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \
--hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \
--hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \
--hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \
--hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \
--hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \
--hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \
--hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
--hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
--hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
--hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \
--hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \
@ -493,7 +502,9 @@ pyyaml==6.0.1 ; python_version >= "3.8" and python_version < "4.0" \
--hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \
--hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \
--hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \
--hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \
--hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \
--hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \
--hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \
--hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \
--hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \

File diff suppressed because one or more lines are too long

View file

@ -11,9 +11,9 @@
[package] [package]
edition = "2021" edition = "2021"
rust-version = "1.65" rust-version = "1.66"
name = "glean-core" name = "glean-core"
version = "56.0.0" version = "56.1.0"
authors = [ authors = [
"Jan-Erik Rediger <jrediger@mozilla.com>", "Jan-Erik Rediger <jrediger@mozilla.com>",
"The Glean Team <glean-team@mozilla.com>", "The Glean Team <glean-team@mozilla.com>",
@ -35,7 +35,7 @@ license = "MPL-2.0"
repository = "https://github.com/mozilla/glean" repository = "https://github.com/mozilla/glean"
[package.metadata.glean] [package.metadata.glean]
glean-parser = "10.0.0" glean-parser = "11.0.1"
[dependencies.bincode] [dependencies.bincode]
version = "1.2.1" version = "1.2.1"

View file

@ -381,6 +381,16 @@ impl Glean {
.size .size
.accumulate_sync(self, size.get() as i64) .accumulate_sync(self, size.get() as i64)
} }
if let Some(rkv_load_state) = self
.data_store
.as_ref()
.and_then(|database| database.rkv_load_state())
{
self.database_metrics
.rkv_load_error
.set_sync(self, rkv_load_state)
}
} }
/// Signals that the environment is ready to submit pings. /// Signals that the environment is ready to submit pings.

View file

@ -38,7 +38,13 @@ pub type SingleStore = rkv::SingleStore<rkv::backend::SafeModeDatabase>;
/// cbindgen:ignore /// cbindgen:ignore
pub type Writer<'t> = rkv::Writer<rkv::backend::SafeModeRwTransaction<'t>>; pub type Writer<'t> = rkv::Writer<rkv::backend::SafeModeRwTransaction<'t>>;
pub fn rkv_new(path: &Path) -> std::result::Result<Rkv, rkv::StoreError> { #[derive(Debug)]
pub enum RkvLoadState {
Ok,
Err(rkv::StoreError),
}
pub fn rkv_new(path: &Path) -> std::result::Result<(Rkv, RkvLoadState), rkv::StoreError> {
match Rkv::new::<rkv::backend::SafeMode>(path) { match Rkv::new::<rkv::backend::SafeMode>(path) {
// An invalid file can mean: // An invalid file can mean:
// 1. An empty file. // 1. An empty file.
@ -50,15 +56,20 @@ pub fn rkv_new(path: &Path) -> std::result::Result<Rkv, rkv::StoreError> {
let safebin = path.join("data.safe.bin"); let safebin = path.join("data.safe.bin");
fs::remove_file(safebin).map_err(|_| rkv::StoreError::FileInvalid)?; fs::remove_file(safebin).map_err(|_| rkv::StoreError::FileInvalid)?;
// Now try again, we only handle that error once. // Now try again, we only handle that error once.
Rkv::new::<rkv::backend::SafeMode>(path) let rkv = Rkv::new::<rkv::backend::SafeMode>(path)?;
Ok((rkv, RkvLoadState::Err(rkv::StoreError::FileInvalid)))
} }
Err(rkv::StoreError::DatabaseCorrupted) => { Err(rkv::StoreError::DatabaseCorrupted) => {
let safebin = path.join("data.safe.bin"); let safebin = path.join("data.safe.bin");
fs::remove_file(safebin).map_err(|_| rkv::StoreError::DatabaseCorrupted)?; fs::remove_file(safebin).map_err(|_| rkv::StoreError::DatabaseCorrupted)?;
// Try again, only allowing the error once. // Try again, only allowing the error once.
Rkv::new::<rkv::backend::SafeMode>(path) let rkv = Rkv::new::<rkv::backend::SafeMode>(path)?;
Ok((rkv, RkvLoadState::Err(rkv::StoreError::DatabaseCorrupted)))
}
other => {
let rkv = other?;
Ok((rkv, RkvLoadState::Ok))
} }
other => other,
} }
} }
@ -173,8 +184,11 @@ pub struct Database {
/// so as to persist them to disk using rkv in bulk on demand. /// so as to persist them to disk using rkv in bulk on demand.
ping_lifetime_data: Option<RwLock<BTreeMap<String, Metric>>>, ping_lifetime_data: Option<RwLock<BTreeMap<String, Metric>>>,
// Initial file size when opening the database. /// Initial file size when opening the database.
file_size: Option<NonZeroU64>, file_size: Option<NonZeroU64>,
/// RKV load state
rkv_load_state: RkvLoadState,
} }
impl std::fmt::Debug for Database { impl std::fmt::Debug for Database {
@ -232,7 +246,7 @@ impl Database {
log::debug!("Database path: {:?}", path.display()); log::debug!("Database path: {:?}", path.display());
let file_size = database_size(&path); let file_size = database_size(&path);
let rkv = Self::open_rkv(&path)?; let (rkv, rkv_load_state) = Self::open_rkv(&path)?;
let user_store = rkv.open_single(Lifetime::User.as_str(), StoreOptions::create())?; let user_store = rkv.open_single(Lifetime::User.as_str(), StoreOptions::create())?;
let ping_store = rkv.open_single(Lifetime::Ping.as_str(), StoreOptions::create())?; let ping_store = rkv.open_single(Lifetime::Ping.as_str(), StoreOptions::create())?;
let application_store = let application_store =
@ -250,6 +264,7 @@ impl Database {
application_store, application_store,
ping_lifetime_data, ping_lifetime_data,
file_size, file_size,
rkv_load_state,
}; };
db.load_ping_lifetime_data(); db.load_ping_lifetime_data();
@ -262,6 +277,15 @@ impl Database {
self.file_size self.file_size
} }
/// Get the rkv load state.
pub fn rkv_load_state(&self) -> Option<String> {
if let RkvLoadState::Err(e) = &self.rkv_load_state {
Some(e.to_string())
} else {
None
}
}
fn get_store(&self, lifetime: Lifetime) -> &SingleStore { fn get_store(&self, lifetime: Lifetime) -> &SingleStore {
match lifetime { match lifetime {
Lifetime::User => &self.user_store, Lifetime::User => &self.user_store,
@ -271,14 +295,14 @@ impl Database {
} }
/// Creates the storage directories and inits rkv. /// Creates the storage directories and inits rkv.
fn open_rkv(path: &Path) -> Result<Rkv> { fn open_rkv(path: &Path) -> Result<(Rkv, RkvLoadState)> {
fs::create_dir_all(path)?; fs::create_dir_all(path)?;
let rkv = rkv_new(path)?; let (rkv, load_state) = rkv_new(path)?;
migrate(path, &rkv); migrate(path, &rkv);
log::info!("Database initialized"); log::info!("Database initialized");
Ok(rkv) Ok((rkv, load_state))
} }
/// Build the key of the final location of the data in the database. /// Build the key of the final location of the data in the database.
@ -1484,9 +1508,13 @@ mod test {
let f = File::create(safebin).expect("create database file"); let f = File::create(safebin).expect("create database file");
drop(f); drop(f);
Database::new(dir.path(), false).unwrap(); let db = Database::new(dir.path(), false).unwrap();
assert!(dir.path().exists()); assert!(dir.path().exists());
assert!(
matches!(db.rkv_load_state, RkvLoadState::Err(_)),
"Load error recorded"
);
} }
#[test] #[test]
@ -1501,9 +1529,13 @@ mod test {
let safebin = database_dir.join("data.safe.bin"); let safebin = database_dir.join("data.safe.bin");
fs::write(safebin, "<broken>").expect("write to database file"); fs::write(safebin, "<broken>").expect("write to database file");
Database::new(dir.path(), false).unwrap(); let db = Database::new(dir.path(), false).unwrap();
assert!(dir.path().exists()); assert!(dir.path().exists());
assert!(
matches!(db.rkv_load_state, RkvLoadState::Err(_)),
"Load error recorded"
);
} }
#[test] #[test]

View file

@ -261,6 +261,9 @@ impl UploadMetrics {
#[derive(Debug)] #[derive(Debug)]
pub struct DatabaseMetrics { pub struct DatabaseMetrics {
pub size: MemoryDistributionMetric, pub size: MemoryDistributionMetric,
/// RKV's load result, indicating success or relaying the detected error.
pub rkv_load_error: StringMetric,
} }
impl DatabaseMetrics { impl DatabaseMetrics {
@ -277,6 +280,15 @@ impl DatabaseMetrics {
}, },
MemoryUnit::Byte, MemoryUnit::Byte,
), ),
rkv_load_error: StringMetric::new(CommonMetricData {
name: "rkv_load_error".into(),
category: "glean.error".into(),
send_in_pings: vec!["metrics".into()],
lifetime: Lifetime::Ping,
disabled: false,
dynamic_label: None,
}),
} }
} }
} }

View file

@ -1077,11 +1077,13 @@ fn records_database_file_size() {
let dir = tempfile::tempdir().unwrap(); let dir = tempfile::tempdir().unwrap();
let tmpname = dir.path().display().to_string(); let tmpname = dir.path().display().to_string();
// Initialize Glean once to ensure we create the database. // Initialize Glean once to ensure we create the database and did not error.
let glean = Glean::with_options(&tmpname, GLOBAL_APPLICATION_ID, true); let glean = Glean::with_options(&tmpname, GLOBAL_APPLICATION_ID, true);
let database_size = &glean.database_metrics.size; let database_size = &glean.database_metrics.size;
let data = database_size.get_value(&glean, "metrics"); let data = database_size.get_value(&glean, "metrics");
assert!(data.is_none()); assert!(data.is_none());
drop(glean); drop(glean);
// Initialize Glean again to record file size. // Initialize Glean again to record file size.
@ -1094,6 +1096,11 @@ fn records_database_file_size() {
// We should see the database containing some data. // We should see the database containing some data.
assert!(data.sum > 0); assert!(data.sum > 0);
let rkv_load_state = &glean.database_metrics.rkv_load_error;
let rkv_load_error = rkv_load_state.get_value(&glean, "metrics");
assert_eq!(rkv_load_error, None);
} }
#[cfg(not(target_os = "windows"))] #[cfg(not(target_os = "windows"))]

View file

@ -309,28 +309,6 @@ impl PingMaker {
}) })
} }
/// Collects a snapshot for the given ping from storage and attach required meta information.
///
/// # Arguments
///
/// * `glean` - the [`Glean`] instance to collect data from.
/// * `ping` - the ping to collect for.
/// * `reason` - an optional reason code to include in the ping.
///
/// # Returns
///
/// A fully assembled ping payload in a string encoded as JSON.
/// If there is no data stored for the ping, `None` is returned.
pub fn collect_string(
&self,
glean: &Glean,
ping: &PingType,
reason: Option<&str>,
) -> Option<String> {
self.collect(glean, ping, reason, "", "")
.map(|ping| ::serde_json::to_string_pretty(&ping.content).unwrap())
}
/// Gets the path to a directory for ping storage. /// Gets the path to a directory for ping storage.
/// ///
/// The directory will be created inside the `data_path`. /// The directory will be created inside the `data_path`.

View file

@ -1 +1 @@
{"files":{"Cargo.toml":"74decb71ef8b82a2fa24b7d0073ce8833b9703a139c2555e7d50162de2414f13","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5627cc81e6187ab6c2b4dff061af16d559edcab64ba786bac39daa69c703c595","src/common_test.rs":"de47b53dcca37985c0a2b8c02daecbf32309aa54f5a4dd9290719c2c1fd0fa55","src/configuration.rs":"186b9d92e48f2f34f1ea51023ad83c9d7abec97bcb0b862641bcb79a93c97d9e","src/core_metrics.rs":"fef8fb4e5fa57c179836c6eb2cf59278fe3b8b036dbe57b0ff02971b4acd822f","src/lib.rs":"ffbfb09082bc7c758fcfa974226c7b7da75c88f259526a9ba085c511e1db1fa1","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"612a9f13ade0b202c8762bccc7b5dc288101cb3820e47be2755331911a221c55","src/private/event.rs":"d7c70c02648584c19c73af89e5180d3c6153c911f2c6830f7d1599b18d6150eb","src/private/mod.rs":"eb8fe4e588bb32a54617324db39319920c627e6fc23c23cf4da5c17c63e0afed","src/private/ping.rs":"da7545b8fc3b8cbaa8f598dc18fa4ba7c499573c360e8de6e1714d38dd4a665d","src/system.rs":"6eae5b41c15eba9cad6dbd116abe3519ee3e1fe034e79bdd692b029829a8c384","src/test.rs":"3ff6cf151f416e7a8d0f1b54ff28360ad7ebd3dcf47df02c08a8039702d636d9","tests/common/mod.rs":"08fb9483d9b6ed9fe873b4395245166ae8a15263be750c7a8e298c41d9604745","tests/init_fails.rs":"96bbb67ec64976f505fc05eb2c2e101f06c11bd2eaf6a0c6383b1a3e05a1cf4b","tests/never_init.rs":"2cf13a67b34cda8447f489cf3755eba0595978d242d29025670f9bb7c1025937","tests/no_time_to_init.rs":"5fd92258e3fb0302c7f8ab1dee374ece7343cc727206d9da134442bca746b88d","tests/overflowing_preinit.rs":"7ad4b2274dd9240b53430859a4eb1d2597cf508a5a678333f3d3abbadd2ed4a7","tests/persist_ping_lifetime.rs":"81415dc1d74743f02269f0d0dfa524003147056853f080276972e64a0b761d3c","tests/persist_ping_lifetime_nopanic.rs":"18379d3ffbf4a2c8c684c04ff7a0660b86dfbbb447db2d24dfed6073cb7ddf8f","tests/schema.rs":"e611cc168b648b5f515c54873c71b3e5e86431afa2aaff94581eeeb4f1d4935d","tests/simple.rs":"3a762995c06c0adc5adb94ad9c37e41dbbcf08a96b87bc20a449240fa0d93b0c","tests/test-shutdown-blocking.sh":"9b16a01c190c7062474dd92182298a3d9a27928c8fa990340fdd798e6cdb7ab2","tests/test-thread-crashing.sh":"ff1bc8e5d7e4ba3a10d0d38bef222db8bfba469e7d30e45b1053d177a4084f09","tests/upload_timing.rs":"4100ddba97cad28e1abfeb1492dfff61d151a67360392393d6f90d891b3e86be"},"package":"4bd4421c9e77e098f774ce712128179069dd6a56904d3b95c9cf35b8418e3d6a"} {"files":{"Cargo.toml":"2e86b801bfa27e59ddbe046a773d7ba937df8cef968e6d0c55ed7f534a77806e","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5627cc81e6187ab6c2b4dff061af16d559edcab64ba786bac39daa69c703c595","src/common_test.rs":"de47b53dcca37985c0a2b8c02daecbf32309aa54f5a4dd9290719c2c1fd0fa55","src/configuration.rs":"186b9d92e48f2f34f1ea51023ad83c9d7abec97bcb0b862641bcb79a93c97d9e","src/core_metrics.rs":"fef8fb4e5fa57c179836c6eb2cf59278fe3b8b036dbe57b0ff02971b4acd822f","src/lib.rs":"ffbfb09082bc7c758fcfa974226c7b7da75c88f259526a9ba085c511e1db1fa1","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"612a9f13ade0b202c8762bccc7b5dc288101cb3820e47be2755331911a221c55","src/private/event.rs":"d7c70c02648584c19c73af89e5180d3c6153c911f2c6830f7d1599b18d6150eb","src/private/mod.rs":"eb8fe4e588bb32a54617324db39319920c627e6fc23c23cf4da5c17c63e0afed","src/private/ping.rs":"da7545b8fc3b8cbaa8f598dc18fa4ba7c499573c360e8de6e1714d38dd4a665d","src/system.rs":"6eae5b41c15eba9cad6dbd116abe3519ee3e1fe034e79bdd692b029829a8c384","src/test.rs":"3ff6cf151f416e7a8d0f1b54ff28360ad7ebd3dcf47df02c08a8039702d636d9","tests/common/mod.rs":"08fb9483d9b6ed9fe873b4395245166ae8a15263be750c7a8e298c41d9604745","tests/init_fails.rs":"96bbb67ec64976f505fc05eb2c2e101f06c11bd2eaf6a0c6383b1a3e05a1cf4b","tests/never_init.rs":"2cf13a67b34cda8447f489cf3755eba0595978d242d29025670f9bb7c1025937","tests/no_time_to_init.rs":"5fd92258e3fb0302c7f8ab1dee374ece7343cc727206d9da134442bca746b88d","tests/overflowing_preinit.rs":"7ad4b2274dd9240b53430859a4eb1d2597cf508a5a678333f3d3abbadd2ed4a7","tests/persist_ping_lifetime.rs":"81415dc1d74743f02269f0d0dfa524003147056853f080276972e64a0b761d3c","tests/persist_ping_lifetime_nopanic.rs":"18379d3ffbf4a2c8c684c04ff7a0660b86dfbbb447db2d24dfed6073cb7ddf8f","tests/schema.rs":"e611cc168b648b5f515c54873c71b3e5e86431afa2aaff94581eeeb4f1d4935d","tests/simple.rs":"3a762995c06c0adc5adb94ad9c37e41dbbcf08a96b87bc20a449240fa0d93b0c","tests/test-shutdown-blocking.sh":"9b16a01c190c7062474dd92182298a3d9a27928c8fa990340fdd798e6cdb7ab2","tests/test-thread-crashing.sh":"ff1bc8e5d7e4ba3a10d0d38bef222db8bfba469e7d30e45b1053d177a4084f09","tests/upload_timing.rs":"4100ddba97cad28e1abfeb1492dfff61d151a67360392393d6f90d891b3e86be"},"package":"e12e51799c1e40ba51f24e0ff232d35ea321403920bea31dc11de1afaeb541ef"}

View file

@ -11,9 +11,9 @@
[package] [package]
edition = "2021" edition = "2021"
rust-version = "1.65" rust-version = "1.66"
name = "glean" name = "glean"
version = "56.0.0" version = "56.1.0"
authors = [ authors = [
"Jan-Erik Rediger <jrediger@mozilla.com>", "Jan-Erik Rediger <jrediger@mozilla.com>",
"The Glean Team <glean-team@mozilla.com>", "The Glean Team <glean-team@mozilla.com>",
@ -42,7 +42,7 @@ features = ["serde"]
version = "0.5" version = "0.5"
[dependencies.glean-core] [dependencies.glean-core]
version = "56.0.0" version = "56.1.0"
[dependencies.inherent] [dependencies.inherent]
version = "1" version = "1"

View file

@ -6,7 +6,7 @@ edition = "2018"
license = "MPL-2.0" license = "MPL-2.0"
[dependencies] [dependencies]
glean = "56.0.0" glean = "56.1.0"
log = "0.4" log = "0.4"
nserror = { path = "../../../xpcom/rust/nserror" } nserror = { path = "../../../xpcom/rust/nserror" }
nsstring = { path = "../../../xpcom/rust/nsstring" } nsstring = { path = "../../../xpcom/rust/nsstring" }

View file

@ -9,7 +9,7 @@ license = "MPL-2.0"
[dependencies] [dependencies]
bincode = "1.0" bincode = "1.0"
chrono = "0.4.10" chrono = "0.4.10"
glean = "56.0.0" glean = "56.1.0"
inherent = "1.0.0" inherent = "1.0.0"
log = "0.4" log = "0.4"
nsstring = { path = "../../../../xpcom/rust/nsstring", optional = true } nsstring = { path = "../../../../xpcom/rust/nsstring", optional = true }