forked from mirrors/gecko-dev
Bug 1799129 - Vendor Glean v51.8.0 and glean_parser 6.3.0 r=chutten,supply-chain-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D161276
This commit is contained in:
parent
d20dd96f8f
commit
68cd95c000
37 changed files with 276 additions and 192 deletions
8
Cargo.lock
generated
8
Cargo.lock
generated
|
|
@ -2249,9 +2249,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "51.7.0"
|
version = "51.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dfbbb336d8195ad56be852099319eaab3ba491bc7f38d18e7ebe02242a6be20"
|
checksum = "13aedcf0f5dd22897f3e714f3e9340ec7841ce2dd6c2b9947784314735cc1b27"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
|
@ -2269,9 +2269,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "51.7.0"
|
version = "51.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "736924672efcb4cea229f024d75057fb2d0c37bb9544fdba6d8c09f6e6c3c766"
|
checksum = "7f2623748bec073cec65c8f21762ad26e5421e85e42afd59e7395145db9be98b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_logger",
|
"android_logger",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ allprojects {
|
||||||
topsrcdir = gradle.mozconfig.topsrcdir
|
topsrcdir = gradle.mozconfig.topsrcdir
|
||||||
topobjdir = gradle.mozconfig.topobjdir
|
topobjdir = gradle.mozconfig.topobjdir
|
||||||
|
|
||||||
gleanVersion = "51.7.0"
|
gleanVersion = "51.8.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
8
gfx/wr/Cargo.lock
generated
|
|
@ -865,9 +865,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "51.7.0"
|
version = "51.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dfbbb336d8195ad56be852099319eaab3ba491bc7f38d18e7ebe02242a6be20"
|
checksum = "13aedcf0f5dd22897f3e714f3e9340ec7841ce2dd6c2b9947784314735cc1b27"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
|
@ -885,9 +885,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "51.7.0"
|
version = "51.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "736924672efcb4cea229f024d75057fb2d0c37bb9544fdba6d8c09f6e6c3c766"
|
checksum = "7f2623748bec073cec65c8f21762ad26e5421e85e42afd59e7395145db9be98b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_logger",
|
"android_logger",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,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 = "51.7.0"
|
glean = "51.8.0"
|
||||||
fog = { version = "0.1.0", optional = true }
|
fog = { version = "0.1.0", optional = true }
|
||||||
swgl = { path = "../swgl", optional = true }
|
swgl = { path = "../swgl", optional = true }
|
||||||
topological-sort = "0.1"
|
topological-sort = "0.1"
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ pth:xpcom/geckoprocesstypes_generator
|
||||||
pth:xpcom/idl-parser
|
pth:xpcom/idl-parser
|
||||||
# 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==51.7.0:telemetry will not be collected
|
pypi-optional:glean-sdk==51.8.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).
|
||||||
|
|
|
||||||
|
|
@ -563,6 +563,12 @@ criteria = "safe-to-deploy"
|
||||||
delta = "51.4.0 -> 51.5.0"
|
delta = "51.4.0 -> 51.5.0"
|
||||||
notes = "Maintained by the Glean team at Mozilla"
|
notes = "Maintained by the Glean team at Mozilla"
|
||||||
|
|
||||||
|
[[audits.glean]]
|
||||||
|
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "51.7.0 -> 51.8.0"
|
||||||
|
notes = "Maintained by the Glean team at Mozilla"
|
||||||
|
|
||||||
[[audits.glean-core]]
|
[[audits.glean-core]]
|
||||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
|
|
@ -616,6 +622,12 @@ criteria = "safe-to-deploy"
|
||||||
delta = "51.4.0 -> 51.5.0"
|
delta = "51.4.0 -> 51.5.0"
|
||||||
notes = "Maintained by the Glean team at Mozilla"
|
notes = "Maintained by the Glean team at Mozilla"
|
||||||
|
|
||||||
|
[[audits.glean-core]]
|
||||||
|
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "51.7.0 -> 51.8.0"
|
||||||
|
notes = "Maintained by the Glean team at Mozilla"
|
||||||
|
|
||||||
[[audits.goblin]]
|
[[audits.goblin]]
|
||||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
Metadata-Version: 2.1
|
Metadata-Version: 2.1
|
||||||
Name: glean-parser
|
Name: glean-parser
|
||||||
Version: 6.1.2
|
Version: 6.3.0
|
||||||
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
|
||||||
|
|
@ -86,6 +86,19 @@ $ glean_parser check < ping.json
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
## 6.3.0
|
||||||
|
|
||||||
|
- events: Increase extras limit to 15 ([bug 1798713](https://bugzilla.mozilla.org/show_bug.cgi?id=1798713))
|
||||||
|
|
||||||
|
## 6.2.1
|
||||||
|
|
||||||
|
- Add support for Rate, Denominator and Numerator metrics for JavaScript. ([bug 1793777](https://bugzilla.mozilla.org/show_bug.cgi?id=1793777))
|
||||||
|
|
||||||
|
## 6.2.0
|
||||||
|
|
||||||
|
- [data-review] Use a template to generate the Data Review Request template ([bug 1772605](https://bugzilla.mozilla.org/show_bug.cgi?id=1772605))
|
||||||
|
- Make tag and no\_lint order deterministic ([#518](https://github.com/mozilla/glean_parser/pull/518))
|
||||||
|
|
||||||
## 6.1.2
|
## 6.1.2
|
||||||
|
|
||||||
- Swift: Add a conditional `import Foundation` to support generating metrics when Glean is delivered via the AppServices iOS megazord
|
- Swift: Add a conditional `import Foundation` to support generating metrics when Glean is delivered via the AppServices iOS megazord
|
||||||
|
|
@ -1,26 +1,27 @@
|
||||||
glean_parser/__init__.py,sha256=bJljD052_0y-efcBhYpllICVCXOMHLcXRLNyrvfgt5A,533
|
glean_parser/__init__.py,sha256=bJljD052_0y-efcBhYpllICVCXOMHLcXRLNyrvfgt5A,533
|
||||||
glean_parser/__main__.py,sha256=rLs4QpTvLIRGF223xSYkshGD9_aJmuDNOGj8PfZLqRE,7002
|
glean_parser/__main__.py,sha256=ZrmFSG6rJfs_bnXOSb-3b7_Bega-CmhE3SZgWO3G3_E,7066
|
||||||
glean_parser/coverage.py,sha256=2IwC4XMDtDamMkBFoYilmqJzW4gyypq65YVCur8SNas,4405
|
glean_parser/coverage.py,sha256=2IwC4XMDtDamMkBFoYilmqJzW4gyypq65YVCur8SNas,4405
|
||||||
glean_parser/data_review.py,sha256=s_aguo4tCiPhpJoHUfsE1Z91N7wXyQt11hjH11jmqiM,5507
|
glean_parser/data_review.py,sha256=BweeeTkNNS6HrIDkztawhbDByrk_-Avxpg7YeST3VAs,2152
|
||||||
glean_parser/javascript.py,sha256=okBdomD628U0kO-r23mWC8lXPuVbZmL97wMCufgBYA8,11443
|
glean_parser/javascript.py,sha256=w4ZhNBHBKWYk0h3t7G0Ud2tR__hRqzn9dlEXNKLdQrA,11230
|
||||||
glean_parser/kotlin.py,sha256=kMCpULsg_LTx4UI1HMtRXtkA3YtEruqtvfOIauMlO74,13271
|
glean_parser/kotlin.py,sha256=kMCpULsg_LTx4UI1HMtRXtkA3YtEruqtvfOIauMlO74,13271
|
||||||
glean_parser/lint.py,sha256=_N294HLf5-PgGa-oQxb64xcLP24W9874IGheGzjO6jk,17088
|
glean_parser/lint.py,sha256=_N294HLf5-PgGa-oQxb64xcLP24W9874IGheGzjO6jk,17088
|
||||||
glean_parser/markdown.py,sha256=GkCr1CrV6mnRQseT6FO1-JJ7Eup8X3lxUfRMBTxXpe4,9066
|
glean_parser/markdown.py,sha256=GkCr1CrV6mnRQseT6FO1-JJ7Eup8X3lxUfRMBTxXpe4,9066
|
||||||
glean_parser/metrics.py,sha256=OqTEH1qfum1_EpRZNmFMSl2xP_kKVvKlPKTREUPJABY,12036
|
glean_parser/metrics.py,sha256=OqTEH1qfum1_EpRZNmFMSl2xP_kKVvKlPKTREUPJABY,12036
|
||||||
glean_parser/parser.py,sha256=OydnNQYHfNW_UKNzZuZCL-ZEAxTlVzsabXNMxmUuht4,15741
|
glean_parser/parser.py,sha256=pcgB0gRnmXWCPqNHqQf67mAS6DrD89tMpi4oxjQC4k4,15749
|
||||||
glean_parser/pings.py,sha256=6XakkO9jnQc2oojLQJvTCMwF7w-BEm6rR54tunCb38o,2805
|
glean_parser/pings.py,sha256=6XakkO9jnQc2oojLQJvTCMwF7w-BEm6rR54tunCb38o,2805
|
||||||
glean_parser/rust.py,sha256=Nq3s--LW0-PFhRCDpLOJXYWxQXbcSOA6OsFIkxUGnYc,6116
|
glean_parser/rust.py,sha256=Nq3s--LW0-PFhRCDpLOJXYWxQXbcSOA6OsFIkxUGnYc,6116
|
||||||
glean_parser/swift.py,sha256=0ncUjywXLqhCNta1qkzxb8PoVCmWi47UedCvb7bkdLc,9062
|
glean_parser/swift.py,sha256=0ncUjywXLqhCNta1qkzxb8PoVCmWi47UedCvb7bkdLc,9062
|
||||||
glean_parser/tags.py,sha256=bemKYvcbMO4JrghiNSe-A4BNNDtx_FlUPkgrPPJy84Y,1391
|
glean_parser/tags.py,sha256=bemKYvcbMO4JrghiNSe-A4BNNDtx_FlUPkgrPPJy84Y,1391
|
||||||
glean_parser/translate.py,sha256=4mHMtRjOusbFNvS7-zibKg6zE_qCRmpjWh6GjwaabSo,7964
|
glean_parser/translate.py,sha256=4mHMtRjOusbFNvS7-zibKg6zE_qCRmpjWh6GjwaabSo,7964
|
||||||
glean_parser/translation_options.py,sha256=TpsvgaejlmOWkmTkarMx7cBVcjhshlJi33jsAbw9Wjc,2207
|
glean_parser/translation_options.py,sha256=Lxzr6G7MP0tC_ZYlZXftS4j0SLiqO-5mGVTEc7ggXis,2037
|
||||||
glean_parser/util.py,sha256=Hei33QDq4a_lIHp5j98KovN6C7tmLrvVamEX2a1DcTo,16825
|
glean_parser/util.py,sha256=Hei33QDq4a_lIHp5j98KovN6C7tmLrvVamEX2a1DcTo,16825
|
||||||
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=cw6nR9cjd1E0O0_daSZ-w1dFvClMcOrpJsFb-PNnMSw,23887
|
glean_parser/schemas/metrics.2-0-0.schema.yaml,sha256=nx3X2SBaX1SqP8OBv0lvnT_TpQN1BRulnzmp_ID5QQI,23887
|
||||||
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=rD1s-rfz1xC9biHyLfBCnsoQxVYHwpe_S05awfe2xDA,4363
|
glean_parser/schemas/pings.2-0-0.schema.yaml,sha256=rD1s-rfz1xC9biHyLfBCnsoQxVYHwpe_S05awfe2xDA,4363
|
||||||
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/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/kotlin.buildinfo.jinja2,sha256=X0lk2SNu5OIIj2i6mUyF9CWFQIonLgfqkgT5fA-5G6c,920
|
glean_parser/templates/kotlin.buildinfo.jinja2,sha256=X0lk2SNu5OIIj2i6mUyF9CWFQIonLgfqkgT5fA-5G6c,920
|
||||||
|
|
@ -28,12 +29,12 @@ glean_parser/templates/kotlin.geckoview.jinja2,sha256=MJOgtoDXmBjE9pwk-G6T89y36R
|
||||||
glean_parser/templates/kotlin.jinja2,sha256=h6RaxhGwh1G1NVqhGb4l2Jtl2orhyf8iFL-Cj3qb6lk,5162
|
glean_parser/templates/kotlin.jinja2,sha256=h6RaxhGwh1G1NVqhGb4l2Jtl2orhyf8iFL-Cj3qb6lk,5162
|
||||||
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/rust.jinja2,sha256=rskbE0LMcCTO488faVXrGAP_e-l7rUpysbkNZXKk1Ck,11083
|
glean_parser/templates/rust.jinja2,sha256=3X4JNVVz2KLhFXTsCg8LQ9JL_dopi7P-yhZcir7-dTw,11104
|
||||||
glean_parser/templates/swift.jinja2,sha256=yfv1qJLrfR2cc3t35fFPgveuuATBjg1Hge-3ka5rpFc,5270
|
glean_parser/templates/swift.jinja2,sha256=yfv1qJLrfR2cc3t35fFPgveuuATBjg1Hge-3ka5rpFc,5270
|
||||||
glean_parser-6.1.2.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
|
glean_parser-6.3.0.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
|
||||||
glean_parser-6.1.2.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
glean_parser-6.3.0.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
||||||
glean_parser-6.1.2.dist-info/METADATA,sha256=_paEotrxyZsT2pVvTmvF8EAattiUUkTK3RdZKL8OWes,26073
|
glean_parser-6.3.0.dist-info/METADATA,sha256=5JMMbGW6jxTUOvKV4MJnSQM7IEirQTqzw_zTIsCYOTM,26607
|
||||||
glean_parser-6.1.2.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
glean_parser-6.3.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
||||||
glean_parser-6.1.2.dist-info/entry_points.txt,sha256=s-clJTIqp-PpJD-n3AnIQZFkTafIrzsTbAPX9vNY018,69
|
glean_parser-6.3.0.dist-info/entry_points.txt,sha256=s-clJTIqp-PpJD-n3AnIQZFkTafIrzsTbAPX9vNY018,69
|
||||||
glean_parser-6.1.2.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
|
glean_parser-6.3.0.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
|
||||||
glean_parser-6.1.2.dist-info/RECORD,,
|
glean_parser-6.3.0.dist-info/RECORD,,
|
||||||
|
|
@ -274,7 +274,10 @@ def main_wrapper(args=None):
|
||||||
main(args=args)
|
main(args=args)
|
||||||
except SystemExit as e:
|
except SystemExit as e:
|
||||||
if e.code != 0:
|
if e.code != 0:
|
||||||
print(f"ERROR running glean_parser v{glean_parser.__version__}")
|
print(
|
||||||
|
f"ERROR running glean_parser v{glean_parser.__version__}",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,119 +46,34 @@ def generate(
|
||||||
reobj = re.compile(f"\\W{bug}\\W|\\W{bug}$")
|
reobj = re.compile(f"\\W{bug}\\W|\\W{bug}$")
|
||||||
durations = set()
|
durations = set()
|
||||||
responsible_emails = set()
|
responsible_emails = set()
|
||||||
metrics_table = ""
|
filtered_metrics = list()
|
||||||
for category_name, metrics in all_objects.value.items():
|
for metrics in all_objects.value.values():
|
||||||
for metric in metrics.values():
|
for metric in metrics.values():
|
||||||
if not any([len(reobj.findall(bug)) == 1 for bug in metric.bugs]):
|
if not any([len(reobj.findall(bug)) == 1 for bug in metric.bugs]):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
metric_name = util.snake_case(metric.name)
|
filtered_metrics.append(metric)
|
||||||
category_name = util.snake_case(category_name)
|
|
||||||
one_line_desc = metric.description.replace("\n", " ")
|
|
||||||
sensitivity = ", ".join([s.name for s in metric.data_sensitivity])
|
|
||||||
last_bug = metric.bugs[-1]
|
|
||||||
metrics_table += f"`{category_name}.{metric_name}` | "
|
|
||||||
metrics_table += f"{one_line_desc} | {sensitivity} | {last_bug}\n"
|
|
||||||
if metric.type == "event" and len(metric.allowed_extra_keys):
|
|
||||||
for extra_name, extra_detail in metric.extra_keys.items():
|
|
||||||
extra_one_line_desc = extra_detail["description"].replace("\n", " ")
|
|
||||||
metrics_table += f"`{category_name}.{metric_name}#{extra_name}` | "
|
|
||||||
metrics_table += (
|
|
||||||
f"{extra_one_line_desc} | {sensitivity} | {last_bug}\n"
|
|
||||||
)
|
|
||||||
|
|
||||||
durations.add(metric.expires)
|
durations.add(metric.expires)
|
||||||
|
|
||||||
if metric.expires == "never":
|
if metric.expires == "never":
|
||||||
responsible_emails.update(metric.notification_emails)
|
responsible_emails.update(metric.notification_emails)
|
||||||
|
|
||||||
if len(durations) == 1:
|
if len(filtered_metrics) == 0:
|
||||||
duration = next(iter(durations))
|
|
||||||
if duration == "never":
|
|
||||||
collection_duration = "This collection will be collected permanently."
|
|
||||||
else:
|
|
||||||
collection_duration = f"This collection has expiry '{duration}'"
|
|
||||||
else:
|
|
||||||
collection_duration = "Parts of this collection expire at different times: "
|
|
||||||
collection_duration += f"{durations}"
|
|
||||||
|
|
||||||
if "never" in durations:
|
|
||||||
collection_duration += "\n" + ", ".join(responsible_emails) + " "
|
|
||||||
collection_duration += "will be responsible for the permanent collections."
|
|
||||||
|
|
||||||
if len(durations) == 0:
|
|
||||||
print(f"I'm sorry, I couldn't find metrics matching the bug number {bug}.")
|
print(f"I'm sorry, I couldn't find metrics matching the bug number {bug}.")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
# This template is pulled from
|
template = util.get_jinja2_template(
|
||||||
# https://github.com/mozilla/data-review/blob/main/request.md
|
"data_review.jinja2",
|
||||||
print(
|
filters=(("snake_case", util.snake_case),),
|
||||||
"""
|
|
||||||
!! Reminder: it is your responsibility to complete and check the correctness of
|
|
||||||
!! this automatically-generated request skeleton before requesting Data
|
|
||||||
!! Collection Review. See https://wiki.mozilla.org/Data_Collection for details.
|
|
||||||
|
|
||||||
DATA REVIEW REQUEST
|
|
||||||
1. What questions will you answer with this data?
|
|
||||||
|
|
||||||
TODO: Fill this in.
|
|
||||||
|
|
||||||
2. Why does Mozilla need to answer these questions? Are there benefits for users?
|
|
||||||
Do we need this information to address product or business requirements?
|
|
||||||
|
|
||||||
TODO: Fill this in.
|
|
||||||
|
|
||||||
3. What alternative methods did you consider to answer these questions?
|
|
||||||
Why were they not sufficient?
|
|
||||||
|
|
||||||
TODO: Fill this in.
|
|
||||||
|
|
||||||
4. Can current instrumentation answer these questions?
|
|
||||||
|
|
||||||
TODO: Fill this in.
|
|
||||||
|
|
||||||
5. List all proposed measurements and indicate the category of data collection for each
|
|
||||||
measurement, using the Firefox data collection categories found on the Mozilla wiki.
|
|
||||||
|
|
||||||
Measurement Name | Measurement Description | Data Collection Category | Tracking Bug
|
|
||||||
---------------- | ----------------------- | ------------------------ | ------------"""
|
|
||||||
)
|
)
|
||||||
print(metrics_table)
|
|
||||||
print(
|
print(
|
||||||
"""
|
template.render(
|
||||||
6. Please provide a link to the documentation for this data collection which
|
metrics=filtered_metrics,
|
||||||
describes the ultimate data set in a public, complete, and accurate way.
|
durations=durations,
|
||||||
|
responsible_emails=responsible_emails,
|
||||||
This collection is Glean so is documented
|
)
|
||||||
[in the Glean Dictionary](https://dictionary.telemetry.mozilla.org).
|
|
||||||
|
|
||||||
7. How long will this data be collected?
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
print(collection_duration)
|
|
||||||
print(
|
|
||||||
"""
|
|
||||||
8. What populations will you measure?
|
|
||||||
|
|
||||||
All channels, countries, and locales. No filters.
|
|
||||||
|
|
||||||
9. If this data collection is default on, what is the opt-out mechanism for users?
|
|
||||||
|
|
||||||
These collections are Glean. The opt-out can be found in the product's preferences.
|
|
||||||
|
|
||||||
10. Please provide a general description of how you will analyze this data.
|
|
||||||
|
|
||||||
TODO: Fill this in.
|
|
||||||
|
|
||||||
11. Where do you intend to share the results of your analysis?
|
|
||||||
|
|
||||||
TODO: Fill this in.
|
|
||||||
|
|
||||||
12. Is there a third-party tool (i.e. not Glean or Telemetry) that you
|
|
||||||
are proposing to use for this data collection?
|
|
||||||
|
|
||||||
No.
|
|
||||||
"""
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ Outputter to generate Javascript code for metrics.
|
||||||
|
|
||||||
import enum
|
import enum
|
||||||
import json
|
import json
|
||||||
import sys
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Optional, Callable
|
from typing import Any, Dict, Optional, Callable
|
||||||
|
|
||||||
|
|
@ -22,12 +21,27 @@ from . import util
|
||||||
def javascript_datatypes_filter(value: util.JSONType) -> str:
|
def javascript_datatypes_filter(value: util.JSONType) -> str:
|
||||||
"""
|
"""
|
||||||
A Jinja2 filter that renders Javascript literals.
|
A Jinja2 filter that renders Javascript literals.
|
||||||
|
|
||||||
|
Based on Python's JSONEncoder, but overrides:
|
||||||
|
- lists to use listOf
|
||||||
|
- sets to use setOf
|
||||||
|
- Rate objects to a CommonMetricData initializer
|
||||||
|
(for external Denominators' Numerators lists)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class JavascriptEncoder(json.JSONEncoder):
|
class JavascriptEncoder(json.JSONEncoder):
|
||||||
def iterencode(self, value):
|
def iterencode(self, value):
|
||||||
if isinstance(value, enum.Enum):
|
if isinstance(value, enum.Enum):
|
||||||
yield from super().iterencode(util.camelize(value.name))
|
yield from super().iterencode(util.camelize(value.name))
|
||||||
|
elif isinstance(value, list):
|
||||||
|
yield "["
|
||||||
|
first = True
|
||||||
|
for subvalue in value:
|
||||||
|
if not first:
|
||||||
|
yield ", "
|
||||||
|
yield from self.iterencode(subvalue)
|
||||||
|
first = False
|
||||||
|
yield "]"
|
||||||
elif isinstance(value, set):
|
elif isinstance(value, set):
|
||||||
yield "["
|
yield "["
|
||||||
first = True
|
first = True
|
||||||
|
|
@ -37,6 +51,17 @@ def javascript_datatypes_filter(value: util.JSONType) -> str:
|
||||||
yield from self.iterencode(subvalue)
|
yield from self.iterencode(subvalue)
|
||||||
first = False
|
first = False
|
||||||
yield "]"
|
yield "]"
|
||||||
|
elif isinstance(value, metrics.Rate):
|
||||||
|
yield "CommonMetricData("
|
||||||
|
first = True
|
||||||
|
for arg_name in util.common_metric_args:
|
||||||
|
if hasattr(value, arg_name):
|
||||||
|
if not first:
|
||||||
|
yield ", "
|
||||||
|
yield f"{util.camelize(arg_name)} = "
|
||||||
|
yield from self.iterencode(getattr(value, arg_name))
|
||||||
|
first = False
|
||||||
|
yield ")"
|
||||||
else:
|
else:
|
||||||
yield from super().iterencode(value)
|
yield from super().iterencode(value)
|
||||||
|
|
||||||
|
|
@ -148,16 +173,11 @@ def output(
|
||||||
it will use that date.
|
it will use that date.
|
||||||
Other values will throw an error.
|
Other values will throw an error.
|
||||||
If not set it will use the current date & time.
|
If not set it will use the current date & time.
|
||||||
- `fail_rates`: When `true` it fails when encountering rate metrics.
|
|
||||||
When `false` it will warn and skip rate metrics.
|
|
||||||
Defaults to "true".
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if options is None:
|
if options is None:
|
||||||
options = {}
|
options = {}
|
||||||
|
|
||||||
fail_rates = options.get("fail_rates", "true").lower() == "true"
|
|
||||||
fail_rate_level = "ERROR" if fail_rates else "WARN"
|
|
||||||
platform = options.get("platform", "webext")
|
platform = options.get("platform", "webext")
|
||||||
accepted_platforms = ["qt", "webext", "node"]
|
accepted_platforms = ["qt", "webext", "node"]
|
||||||
if platform not in accepted_platforms:
|
if platform not in accepted_platforms:
|
||||||
|
|
@ -186,26 +206,6 @@ def output(
|
||||||
filename = util.camelize(category_key) + extension
|
filename = util.camelize(category_key) + extension
|
||||||
filepath = output_dir / filename
|
filepath = output_dir / filename
|
||||||
|
|
||||||
# FIXME: Add support for rate (and numerator & denominator) in Glean.js
|
|
||||||
todelete = []
|
|
||||||
for key, metric in category_val.items():
|
|
||||||
if isinstance(metric, metrics.Rate):
|
|
||||||
print(
|
|
||||||
f"{fail_rate_level}: Rate metric not supported. Metric: {category_key}.{metric.name}", # noqa: E501
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
todelete.append(key)
|
|
||||||
if isinstance(metric, metrics.Denominator):
|
|
||||||
print(
|
|
||||||
f"{fail_rate_level}: Rate metric not supported. Dropping numerators. Metric: {category_key}.{metric.name}", # noqa: E501
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
del metric.numerators
|
|
||||||
|
|
||||||
if fail_rates and todelete:
|
|
||||||
print("Failed due to previous errors.", file=sys.stderr)
|
|
||||||
raise ValueError("Unsupported metric type encountered.")
|
|
||||||
|
|
||||||
types = set(
|
types = set(
|
||||||
[
|
[
|
||||||
# This takes care of the regular metric type imports
|
# This takes care of the regular metric type imports
|
||||||
|
|
|
||||||
|
|
@ -244,9 +244,9 @@ def _instantiate_metrics(
|
||||||
metric_obj = None
|
metric_obj = None
|
||||||
|
|
||||||
if metric_obj is not None:
|
if metric_obj is not None:
|
||||||
metric_obj.no_lint = list(set(metric_obj.no_lint + global_no_lint))
|
metric_obj.no_lint = sorted(set(metric_obj.no_lint + global_no_lint))
|
||||||
if len(global_tags):
|
if len(global_tags):
|
||||||
metric_obj.metadata["tags"] = list(
|
metric_obj.metadata["tags"] = sorted(
|
||||||
set(metric_obj.metadata.get("tags", []) + global_tags)
|
set(metric_obj.metadata.get("tags", []) + global_tags)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -311,7 +311,7 @@ def _instantiate_pings(
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if ping_obj is not None:
|
if ping_obj is not None:
|
||||||
ping_obj.no_lint = list(set(ping_obj.no_lint + global_no_lint))
|
ping_obj.no_lint = sorted(set(ping_obj.no_lint + global_no_lint))
|
||||||
|
|
||||||
if isinstance(filepath, Path) and ping_obj.defined_in is not None:
|
if isinstance(filepath, Path) and ping_obj.defined_in is not None:
|
||||||
ping_obj.defined_in["filepath"] = str(filepath)
|
ping_obj.defined_in["filepath"] = str(filepath)
|
||||||
|
|
@ -363,7 +363,7 @@ def _instantiate_tags(
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if tag_obj is not None:
|
if tag_obj is not None:
|
||||||
tag_obj.no_lint = list(set(tag_obj.no_lint + global_no_lint))
|
tag_obj.no_lint = sorted(set(tag_obj.no_lint + global_no_lint))
|
||||||
|
|
||||||
if isinstance(filepath, Path) and tag_obj.defined_in is not None:
|
if isinstance(filepath, Path) and tag_obj.defined_in is not None:
|
||||||
tag_obj.defined_in["filepath"] = str(filepath)
|
tag_obj.defined_in["filepath"] = str(filepath)
|
||||||
|
|
|
||||||
|
|
@ -390,7 +390,7 @@ definitions:
|
||||||
- quantity
|
- quantity
|
||||||
required:
|
required:
|
||||||
- description
|
- description
|
||||||
maxProperties: 10
|
maxProperties: 15
|
||||||
default: {}
|
default: {}
|
||||||
|
|
||||||
gecko_datapoint:
|
gecko_datapoint:
|
||||||
|
|
|
||||||
82
third_party/python/glean_parser/glean_parser/templates/data_review.jinja2
vendored
Normal file
82
third_party/python/glean_parser/glean_parser/templates/data_review.jinja2
vendored
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
!! Reminder: it is your responsibility to complete and check the correctness of
|
||||||
|
!! this automatically-generated request skeleton before requesting Data
|
||||||
|
!! Collection Review. See https://wiki.mozilla.org/Data_Collection for details.
|
||||||
|
{# Data Review Request Template pulled from
|
||||||
|
https://github.com/mozilla/data-review/blob/main/request.md #}
|
||||||
|
|
||||||
|
DATA REVIEW REQUEST
|
||||||
|
1. What questions will you answer with this data?
|
||||||
|
|
||||||
|
{{ "TODO: Fill this in." if not questions }}
|
||||||
|
|
||||||
|
2. Why does Mozilla need to answer these questions? Are there benefits for users?
|
||||||
|
Do we need this information to address product or business requirements?
|
||||||
|
|
||||||
|
{{ "TODO: Fill this in." if not why }}
|
||||||
|
|
||||||
|
3. What alternative methods did you consider to answer these questions?
|
||||||
|
Why were they not sufficient?
|
||||||
|
|
||||||
|
{{ "TODO: Fill this in." if not methods }}
|
||||||
|
|
||||||
|
4. Can current instrumentation answer these questions?
|
||||||
|
|
||||||
|
{{ "TODO: Fill this in." if not current_instrumentation_answers }}
|
||||||
|
|
||||||
|
5. List all proposed measurements and indicate the category of data collection for each
|
||||||
|
measurement, using the Firefox data collection categories found on the Mozilla wiki.
|
||||||
|
|
||||||
|
Measurement Name | Measurement Description | Data Collection Category | Tracking Bug
|
||||||
|
---------------- | ----------------------- | ------------------------ | ------------
|
||||||
|
{% for metric in metrics %}
|
||||||
|
{% if metric.type == "event" and metric.allowed_extra_keys %}
|
||||||
|
{% for extra_name, extra_detail in metric.extra_keys.items() %}
|
||||||
|
`{{ metric.category|snake_case }}.{{ metric.name|snake_case }}#{{ extra_name }} | {{ extra_detail["description"]|replace("\n", " ") }} | {{ metric.data_sensitivity|join(", ", attribute="name") }} | {{ metric.bugs|last }}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
`{{ metric.category|snake_case }}.{{ metric.name|snake_case }}` | {{ metric.description|replace("\n", " ") }} | {{ metric.data_sensitivity|join(", ", attribute="name") }} | {{ metric.bugs|last }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
6. Please provide a link to the documentation for this data collection which
|
||||||
|
describes the ultimate data set in a public, complete, and accurate way.
|
||||||
|
|
||||||
|
This collection is Glean so is documented [in the Glean Dictionary](https://dictionary.telemetry.mozilla.org).
|
||||||
|
|
||||||
|
7. How long will this data be collected?
|
||||||
|
|
||||||
|
{% if durations|length == 1 %}
|
||||||
|
{% for duration in durations %}
|
||||||
|
{% if duration == "never" %}
|
||||||
|
This collection will be collected permanently.
|
||||||
|
{% else %}
|
||||||
|
This collection has expiry '{{duration}}'.
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
Parts of this collection expire at different times: {{ durations|join(", ") }}.
|
||||||
|
{% endif %}
|
||||||
|
{% if "never" in durations %}
|
||||||
|
{{ responsible_emails|join(", ") }} will be responsible for the permanent collections.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
8. What populations will you measure?
|
||||||
|
|
||||||
|
All channels, countries, and locales. No filters.
|
||||||
|
|
||||||
|
9. If this data collection is default on, what is the opt-out mechanism for users?
|
||||||
|
|
||||||
|
These collections are Glean. The opt-out can be found in the product's preferences.
|
||||||
|
|
||||||
|
10. Please provide a general description of how you will analyze this data.
|
||||||
|
|
||||||
|
{{ "TODO: Fill this in." if not analysis_how }}
|
||||||
|
|
||||||
|
11. Where do you intend to share the results of your analysis?
|
||||||
|
|
||||||
|
{{ "TODO: Fill this in." if not analysis_where }}
|
||||||
|
|
||||||
|
12. Is there a third-party tool (i.e. not Glean or Telemetry) that you
|
||||||
|
are proposing to use for this data collection?
|
||||||
|
|
||||||
|
No.
|
||||||
|
|
@ -53,7 +53,7 @@ pub static {{ obj.name|snake_case }}: ::glean::private::__export::Lazy<::glean::
|
||||||
{% else %}
|
{% else %}
|
||||||
pub mod {{ category.name|snake_case }} {
|
pub mod {{ category.name|snake_case }} {
|
||||||
#[allow(unused_imports)] // HistogramType might be unusued, let's avoid warnings
|
#[allow(unused_imports)] // HistogramType might be unusued, let's avoid warnings
|
||||||
use glean::{private::*, traits::ExtraKeys, CommonMetricData, HistogramType, Lifetime, TimeUnit, MemoryUnit};
|
use glean::{private::*, traits::ExtraKeys, traits::NoExtraKeys, CommonMetricData, HistogramType, Lifetime, TimeUnit, MemoryUnit};
|
||||||
{% for obj in category.objs.values() %}
|
{% for obj in category.objs.values() %}
|
||||||
|
|
||||||
{% if obj|attr("_generate_enums") %}
|
{% if obj|attr("_generate_enums") %}
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,6 @@ JavaScript:
|
||||||
it will use that date.
|
it will use that date.
|
||||||
Other values will throw an error.
|
Other values will throw an error.
|
||||||
If not set it will use the current date & time.
|
If not set it will use the current date & time.
|
||||||
- `fail_rates`: When `true` it fails when encountering rate metrics.
|
|
||||||
When `false` it will warn and skip rate metrics.
|
|
||||||
Defaults to "true".
|
|
||||||
|
|
||||||
Markdown:
|
Markdown:
|
||||||
- `project_title`: The project's title.
|
- `project_title`: The project's title.
|
||||||
|
|
|
||||||
6
third_party/python/poetry.lock
generated
vendored
6
third_party/python/poetry.lock
generated
vendored
|
|
@ -204,7 +204,7 @@ python-versions = ">=3.6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-parser"
|
name = "glean-parser"
|
||||||
version = "6.1.2"
|
version = "6.3.0"
|
||||||
description = "Parser tools for Mozilla's Glean telemetry"
|
description = "Parser tools for Mozilla's Glean telemetry"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
|
|
@ -878,8 +878,8 @@ giturlparse = [
|
||||||
{file = "giturlparse-0.10.0.tar.gz", hash = "sha256:2595ab291d30717cda8474b874c9fd509f1b9802ad7f6968c36a45e4b13eb337"},
|
{file = "giturlparse-0.10.0.tar.gz", hash = "sha256:2595ab291d30717cda8474b874c9fd509f1b9802ad7f6968c36a45e4b13eb337"},
|
||||||
]
|
]
|
||||||
glean-parser = [
|
glean-parser = [
|
||||||
{file = "glean_parser-6.1.2-py3-none-any.whl", hash = "sha256:e801af6463b7e0ba79d97ddfc0a58d9d71121c93cea601417571e33fa8142270"},
|
{file = "glean_parser-6.3.0-py3-none-any.whl", hash = "sha256:b6cb6ab1247f3eb8e64427644dbdc0ef1fbf46af593225d66e24aa967dcaa23e"},
|
||||||
{file = "glean_parser-6.1.2.tar.gz", hash = "sha256:12a0fecedc1144d77fa571e0422ff3fea4dbadc381d631bea800a6b2f58f4f7f"},
|
{file = "glean_parser-6.3.0.tar.gz", hash = "sha256:946ef3d7fe24fbbe8101964791b7ad0e609d1ee6a21a87b33f805de8577e6f40"},
|
||||||
]
|
]
|
||||||
idna = [
|
idna = [
|
||||||
{file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
|
{file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
4
third_party/rust/glean-core/Cargo.toml
vendored
4
third_party/rust/glean-core/Cargo.toml
vendored
|
|
@ -12,7 +12,7 @@
|
||||||
[package]
|
[package]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "51.7.0"
|
version = "51.8.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>",
|
||||||
|
|
@ -34,7 +34,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 = "6.1.2"
|
glean-parser = "6.3.0"
|
||||||
|
|
||||||
[dependencies.bincode]
|
[dependencies.bincode]
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
|
|
|
||||||
2
third_party/rust/glean-core/src/error.rs
vendored
2
third_party/rust/glean-core/src/error.rs
vendored
|
|
@ -16,7 +16,7 @@ use rkv::StoreError;
|
||||||
///
|
///
|
||||||
/// [`Result`]: https://doc.rust-lang.org/stable/std/result/enum.Result.html
|
/// [`Result`]: https://doc.rust-lang.org/stable/std/result/enum.Result.html
|
||||||
/// [`Error`]: std.struct.Error.html
|
/// [`Error`]: std.struct.Error.html
|
||||||
pub type Result<T> = result::Result<T, Error>;
|
pub type Result<T, E = Error> = result::Result<T, E>;
|
||||||
|
|
||||||
/// A list enumerating the categories of errors in this crate.
|
/// A list enumerating the categories of errors in this crate.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
7
third_party/rust/glean-core/src/glean.udl
vendored
7
third_party/rust/glean-core/src/glean.udl
vendored
|
|
@ -82,6 +82,11 @@ dictionary ClientInfoMetrics {
|
||||||
string? android_sdk_version = null;
|
string? android_sdk_version = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
[Error]
|
||||||
|
enum CallbackError {
|
||||||
|
"UnexpectedError",
|
||||||
|
};
|
||||||
|
|
||||||
// A callback object, that is stored within the core logic for the entire lifetime of the application.
|
// A callback object, that is stored within the core logic for the entire lifetime of the application.
|
||||||
//
|
//
|
||||||
// This is used to trigger certain actions that need to happen on the foreign-language side.
|
// This is used to trigger certain actions that need to happen on the foreign-language side.
|
||||||
|
|
@ -97,6 +102,7 @@ callback interface OnGleanEvents {
|
||||||
//
|
//
|
||||||
// This should not block.
|
// This should not block.
|
||||||
// The uploader needs to asynchronously poll Glean for new pings to upload.
|
// The uploader needs to asynchronously poll Glean for new pings to upload.
|
||||||
|
[Throws=CallbackError]
|
||||||
void trigger_upload();
|
void trigger_upload();
|
||||||
|
|
||||||
// Start the Metrics Ping Scheduler.
|
// Start the Metrics Ping Scheduler.
|
||||||
|
|
@ -109,6 +115,7 @@ callback interface OnGleanEvents {
|
||||||
boolean start_metrics_ping_scheduler();
|
boolean start_metrics_ping_scheduler();
|
||||||
|
|
||||||
// Called when upload is disabled and uploads should be stopped
|
// Called when upload is disabled and uploads should be stopped
|
||||||
|
[Throws=CallbackError]
|
||||||
void cancel_uploads();
|
void cancel_uploads();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
56
third_party/rust/glean-core/src/lib.rs
vendored
56
third_party/rust/glean-core/src/lib.rs
vendored
|
|
@ -15,6 +15,7 @@
|
||||||
//! ## [The Glean SDK Book](https://mozilla.github.io/glean)
|
//! ## [The Glean SDK Book](https://mozilla.github.io/glean)
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::fmt;
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
|
|
@ -189,6 +190,25 @@ fn setup_state(state: State) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// An error returned from callbacks.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum CallbackError {
|
||||||
|
/// An unexpected error occured.
|
||||||
|
UnexpectedError,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for CallbackError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "Unexpected error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<uniffi::UnexpectedUniFFICallbackError> for CallbackError {
|
||||||
|
fn from(_: uniffi::UnexpectedUniFFICallbackError) -> CallbackError {
|
||||||
|
CallbackError::UnexpectedError
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A callback object used to trigger actions on the foreign-language side.
|
/// A callback object used to trigger actions on the foreign-language side.
|
||||||
///
|
///
|
||||||
/// A callback object is stored in glean-core for the entire lifetime of the application.
|
/// A callback object is stored in glean-core for the entire lifetime of the application.
|
||||||
|
|
@ -204,13 +224,13 @@ pub trait OnGleanEvents: Send {
|
||||||
///
|
///
|
||||||
/// This should not block.
|
/// This should not block.
|
||||||
/// The uploader needs to asynchronously poll Glean for new pings to upload.
|
/// The uploader needs to asynchronously poll Glean for new pings to upload.
|
||||||
fn trigger_upload(&self);
|
fn trigger_upload(&self) -> Result<(), CallbackError>;
|
||||||
|
|
||||||
/// Start the Metrics Ping Scheduler.
|
/// Start the Metrics Ping Scheduler.
|
||||||
fn start_metrics_ping_scheduler(&self) -> bool;
|
fn start_metrics_ping_scheduler(&self) -> bool;
|
||||||
|
|
||||||
/// Called when upload is disabled and uploads should be stopped
|
/// Called when upload is disabled and uploads should be stopped
|
||||||
fn cancel_uploads(&self);
|
fn cancel_uploads(&self) -> Result<(), CallbackError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes Glean.
|
/// Initializes Glean.
|
||||||
|
|
@ -348,7 +368,9 @@ fn initialize_inner(
|
||||||
// 1. Pings were submitted through Glean and it is ready to upload those pings;
|
// 1. Pings were submitted through Glean and it is ready to upload those pings;
|
||||||
// 2. Upload is disabled, to upload a possible deletion-request ping.
|
// 2. Upload is disabled, to upload a possible deletion-request ping.
|
||||||
if pings_submitted || !upload_enabled {
|
if pings_submitted || !upload_enabled {
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -371,7 +393,9 @@ fn initialize_inner(
|
||||||
// ping startup check should be performed before any other ping, since it relies
|
// ping startup check should be performed before any other ping, since it relies
|
||||||
// on being dispatched to the API context before any other metric.
|
// on being dispatched to the API context before any other metric.
|
||||||
if state.callbacks.start_metrics_ping_scheduler() {
|
if state.callbacks.start_metrics_ping_scheduler() {
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -388,7 +412,9 @@ fn initialize_inner(
|
||||||
// Note that unwrapping below is safe: the function will return an
|
// Note that unwrapping below is safe: the function will return an
|
||||||
// `Ok` value for a known ping.
|
// `Ok` value for a known ping.
|
||||||
if glean.submit_ping_by_name("baseline", Some("dirty_startup")) {
|
if glean.submit_ping_by_name("baseline", Some("dirty_startup")) {
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -599,7 +625,9 @@ pub fn glean_set_upload_enabled(enabled: bool) {
|
||||||
// Stop the MPS if its handled within Rust.
|
// Stop the MPS if its handled within Rust.
|
||||||
glean.cancel_metrics_ping_scheduler();
|
glean.cancel_metrics_ping_scheduler();
|
||||||
// Stop wrapper-controlled uploader.
|
// Stop wrapper-controlled uploader.
|
||||||
state.callbacks.cancel_uploads();
|
if let Err(e) = state.callbacks.cancel_uploads() {
|
||||||
|
log::error!("Canceling upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glean.set_upload_enabled(enabled);
|
glean.set_upload_enabled(enabled);
|
||||||
|
|
@ -609,7 +637,9 @@ pub fn glean_set_upload_enabled(enabled: bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if original_enabled && !enabled {
|
if original_enabled && !enabled {
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -756,7 +786,9 @@ pub fn glean_handle_client_active() {
|
||||||
// the uploader. It's fine to trigger it if no ping was generated:
|
// the uploader. It's fine to trigger it if no ping was generated:
|
||||||
// it will bail out.
|
// it will bail out.
|
||||||
let state = global_state().lock().unwrap();
|
let state = global_state().lock().unwrap();
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// The previous block of code may send a ping containing the `duration` metric,
|
// The previous block of code may send a ping containing the `duration` metric,
|
||||||
|
|
@ -787,7 +819,9 @@ pub fn glean_handle_client_inactive() {
|
||||||
// the uploader. It's fine to trigger it if no ping was generated:
|
// the uploader. It's fine to trigger it if no ping was generated:
|
||||||
// it will bail out.
|
// it will bail out.
|
||||||
let state = global_state().lock().unwrap();
|
let state = global_state().lock().unwrap();
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -799,7 +833,9 @@ pub fn glean_submit_ping_by_name(ping_name: String, reason: Option<String>) {
|
||||||
|
|
||||||
if sent {
|
if sent {
|
||||||
let state = global_state().lock().unwrap();
|
let state = global_state().lock().unwrap();
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use crate::util::truncate_string_at_boundary_with_error;
|
||||||
use crate::CommonMetricData;
|
use crate::CommonMetricData;
|
||||||
use crate::Glean;
|
use crate::Glean;
|
||||||
|
|
||||||
const MAX_LENGTH_EXTRA_KEY_VALUE: usize = 100;
|
const MAX_LENGTH_EXTRA_KEY_VALUE: usize = 500;
|
||||||
|
|
||||||
/// An event metric.
|
/// An event metric.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
11
third_party/rust/glean-core/src/metrics/ping.rs
vendored
11
third_party/rust/glean-core/src/metrics/ping.rs
vendored
|
|
@ -107,7 +107,9 @@ impl PingType {
|
||||||
crate::core::with_glean(move |glean| ping.submit_sync(glean, reason.as_deref()));
|
crate::core::with_glean(move |glean| ping.submit_sync(glean, reason.as_deref()));
|
||||||
if sent {
|
if sent {
|
||||||
let state = crate::global_state().lock().unwrap();
|
let state = crate::global_state().lock().unwrap();
|
||||||
state.callbacks.trigger_upload();
|
if let Err(e) = state.callbacks.trigger_upload() {
|
||||||
|
log::error!("Triggering upload failed. Error: {}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -125,6 +127,13 @@ impl PingType {
|
||||||
}
|
}
|
||||||
|
|
||||||
let ping = &self.0;
|
let ping = &self.0;
|
||||||
|
|
||||||
|
// Allowing `clippy::manual_filter`.
|
||||||
|
// This causes a false positive.
|
||||||
|
// We have a side-effect in the `else` branch,
|
||||||
|
// so shouldn't delete it.
|
||||||
|
#[allow(unknown_lints)]
|
||||||
|
#[allow(clippy::manual_filter)]
|
||||||
let corrected_reason = match reason {
|
let corrected_reason = match reason {
|
||||||
Some(reason) => {
|
Some(reason) => {
|
||||||
if ping.reason_codes.contains(&reason.to_string()) {
|
if ping.reason_codes.contains(&reason.to_string()) {
|
||||||
|
|
|
||||||
|
|
@ -1280,7 +1280,7 @@ mod test {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
n as i32,
|
n,
|
||||||
upload_manager
|
upload_manager
|
||||||
.upload_metrics
|
.upload_metrics
|
||||||
.pending_pings
|
.pending_pings
|
||||||
|
|
|
||||||
11
third_party/rust/glean-core/tests/event.rs
vendored
11
third_party/rust/glean-core/tests/event.rs
vendored
|
|
@ -230,9 +230,16 @@ fn extra_keys_must_be_recorded_and_truncated_if_needed() {
|
||||||
);
|
);
|
||||||
|
|
||||||
let test_value = "LeanGleanByFrank";
|
let test_value = "LeanGleanByFrank";
|
||||||
|
let test_value_long = test_value.to_string().repeat(32);
|
||||||
|
// max length for extra values.
|
||||||
|
let test_value_cap = 500;
|
||||||
|
assert!(
|
||||||
|
test_value_long.len() > test_value_cap,
|
||||||
|
"test value is not long enough"
|
||||||
|
);
|
||||||
let mut extra = HashMap::new();
|
let mut extra = HashMap::new();
|
||||||
extra.insert("extra1".into(), test_value.to_string());
|
extra.insert("extra1".into(), test_value.to_string());
|
||||||
extra.insert("truncatedExtra".into(), test_value.to_string().repeat(10));
|
extra.insert("truncatedExtra".into(), test_value_long.clone());
|
||||||
|
|
||||||
test_event.record_sync(&glean, 0, extra);
|
test_event.record_sync(&glean, 0, extra);
|
||||||
|
|
||||||
|
|
@ -247,7 +254,7 @@ fn extra_keys_must_be_recorded_and_truncated_if_needed() {
|
||||||
assert_eq!(2, event["extra"].as_object().unwrap().len());
|
assert_eq!(2, event["extra"].as_object().unwrap().len());
|
||||||
assert_eq!(test_value, event["extra"]["extra1"]);
|
assert_eq!(test_value, event["extra"]["extra1"]);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
test_value.to_string().repeat(10)[0..100],
|
test_value_long[0..test_value_cap],
|
||||||
event["extra"]["truncatedExtra"]
|
event["extra"]["truncatedExtra"]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
third_party/rust/glean-core/tests/labeled.rs
vendored
6
third_party/rust/glean-core/tests/labeled.rs
vendored
|
|
@ -373,7 +373,7 @@ fn seen_labels_get_reloaded_from_disk() {
|
||||||
// Set the maximum number of labels
|
// Set the maximum number of labels
|
||||||
for i in 1..=16 {
|
for i in 1..=16 {
|
||||||
let label = format!("label{}", i);
|
let label = format!("label{}", i);
|
||||||
labeled.get(&label).add_sync(&glean, i);
|
labeled.get(label).add_sync(&glean, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
let snapshot = StorageManager
|
let snapshot = StorageManager
|
||||||
|
|
@ -439,7 +439,7 @@ fn caching_metrics_with_dynamic_labels() {
|
||||||
let metrics = (1..=20)
|
let metrics = (1..=20)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let label = format!("label{}", i);
|
let label = format!("label{}", i);
|
||||||
labeled.get(&label)
|
labeled.get(label)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
|
@ -473,7 +473,7 @@ fn caching_metrics_with_dynamic_labels_across_pings() {
|
||||||
let metrics = (1..=20)
|
let metrics = (1..=20)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let label = format!("label{}", i);
|
let label = format!("label{}", i);
|
||||||
labeled.get(&label)
|
labeled.get(label)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
|
|
||||||
2
third_party/rust/glean/.cargo-checksum.json
vendored
2
third_party/rust/glean/.cargo-checksum.json
vendored
|
|
@ -1 +1 @@
|
||||||
{"files":{"Cargo.toml":"a7dd5fc6025f875b93c926e1efce817b92a914007ccc750bc95b201e0b48fc71","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5bc5b1c46695f628e1023662752272e938a963b535d5686bd1ecc433f9e018c4","src/common_test.rs":"68f6d408cb7b683fa32c8b38a4df1e6c45bfd77c0c90ca35976ea7548bbc4b2f","src/configuration.rs":"37ad5b3e7d4e31dd04a7d6690179168b5f2768d87dd36056dee5d08bdbe20fb2","src/core_metrics.rs":"76ac5350cb6f82d9a193d519b085a08f138dceba77da3514bd0c636bcdefefca","src/lib.rs":"e342d497d60abceca3c84d35523a54d187b0282220a112da53e4ab1cf76da205","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"e05e61860f5828caa529c3ea75a2fff7371bfa3dce057077a74c09baf41a568a","src/private/event.rs":"02bbebf545695812e5055741cc0b5f3c99eda2039e684e26fcdd5f087ed15fe3","src/private/mod.rs":"0364ecf5f0439443a5b209583f4ff2c474b79f7c253c981ab0b7cdc528368698","src/private/ping.rs":"cbdc57f41fc9d46e56b4dfff91ac683753d1f8b3ecd0aa9bc3419e3595b8b81b","src/system.rs":"4e0ec743f6d06a9c83e46c95d0286d5745f4642398c942fce8ae7a1ea5202d37","src/test.rs":"1d9a01fa6befdc04e97caeb58ccebd67c840965ff0417b6b2ba9e53aa108a069","tests/common/mod.rs":"37cd4c48e140c793b852ae09fb3e812da28a4412977295015bcbffd632fcf294","tests/init_fails.rs":"9b78226a4e3220de5b64a205a97b8d5778d1700391b5b71c7819b6cdd120747e","tests/never_init.rs":"1f33b8ce7ca3514b57b48cc16d98408974c85cf8aa7d13257ffc2ad878ebb295","tests/no_time_to_init.rs":"494dcddce49f279c6508f484ee59cf8bb83e7324de07bdbc1142f2a066b7f6a1","tests/overflowing_preinit.rs":"396206d5078b7e6c148bbf2aecb0f963cfaa4d7eff3fc7bf6590125076ee6113","tests/persist_ping_lifetime.rs":"2297d4b208e14188e6dcca2d4806b805cfc7dd824d21bd143a7803b95e0709f4","tests/persist_ping_lifetime_nopanic.rs":"06f1f3ca3b8a6c8b7fc4d6fc48d0e1d2ccffd32139f080db0a95003e9edd507d","tests/schema.rs":"a96089f828928b6be1fad7815e3269f5693af1b773e570312b357a29af28122a","tests/simple.rs":"a1d72af899293390bb955ca379baafb89c29bb746630409f8c51f453d222dbad"},"package":"2dfbbb336d8195ad56be852099319eaab3ba491bc7f38d18e7ebe02242a6be20"}
|
{"files":{"Cargo.toml":"d39ab6aca7c4acaf158b317ad682782de0ab97b3a26eafb7c39c6ff6720334ed","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5bc5b1c46695f628e1023662752272e938a963b535d5686bd1ecc433f9e018c4","src/common_test.rs":"68f6d408cb7b683fa32c8b38a4df1e6c45bfd77c0c90ca35976ea7548bbc4b2f","src/configuration.rs":"37ad5b3e7d4e31dd04a7d6690179168b5f2768d87dd36056dee5d08bdbe20fb2","src/core_metrics.rs":"76ac5350cb6f82d9a193d519b085a08f138dceba77da3514bd0c636bcdefefca","src/lib.rs":"7caacc2b5f389bf5d3829a74e77c100b457a63ddf3a914225f26556e3b8bfb18","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"e05e61860f5828caa529c3ea75a2fff7371bfa3dce057077a74c09baf41a568a","src/private/event.rs":"02bbebf545695812e5055741cc0b5f3c99eda2039e684e26fcdd5f087ed15fe3","src/private/mod.rs":"0364ecf5f0439443a5b209583f4ff2c474b79f7c253c981ab0b7cdc528368698","src/private/ping.rs":"cbdc57f41fc9d46e56b4dfff91ac683753d1f8b3ecd0aa9bc3419e3595b8b81b","src/system.rs":"4e0ec743f6d06a9c83e46c95d0286d5745f4642398c942fce8ae7a1ea5202d37","src/test.rs":"1d9a01fa6befdc04e97caeb58ccebd67c840965ff0417b6b2ba9e53aa108a069","tests/common/mod.rs":"37cd4c48e140c793b852ae09fb3e812da28a4412977295015bcbffd632fcf294","tests/init_fails.rs":"9b78226a4e3220de5b64a205a97b8d5778d1700391b5b71c7819b6cdd120747e","tests/never_init.rs":"1f33b8ce7ca3514b57b48cc16d98408974c85cf8aa7d13257ffc2ad878ebb295","tests/no_time_to_init.rs":"494dcddce49f279c6508f484ee59cf8bb83e7324de07bdbc1142f2a066b7f6a1","tests/overflowing_preinit.rs":"396206d5078b7e6c148bbf2aecb0f963cfaa4d7eff3fc7bf6590125076ee6113","tests/persist_ping_lifetime.rs":"2297d4b208e14188e6dcca2d4806b805cfc7dd824d21bd143a7803b95e0709f4","tests/persist_ping_lifetime_nopanic.rs":"06f1f3ca3b8a6c8b7fc4d6fc48d0e1d2ccffd32139f080db0a95003e9edd507d","tests/schema.rs":"a96089f828928b6be1fad7815e3269f5693af1b773e570312b357a29af28122a","tests/simple.rs":"a1d72af899293390bb955ca379baafb89c29bb746630409f8c51f453d222dbad"},"package":"13aedcf0f5dd22897f3e714f3e9340ec7841ce2dd6c2b9947784314735cc1b27"}
|
||||||
4
third_party/rust/glean/Cargo.toml
vendored
4
third_party/rust/glean/Cargo.toml
vendored
|
|
@ -12,7 +12,7 @@
|
||||||
[package]
|
[package]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "51.7.0"
|
version = "51.8.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>",
|
||||||
|
|
@ -41,7 +41,7 @@ features = ["serde"]
|
||||||
version = "0.5"
|
version = "0.5"
|
||||||
|
|
||||||
[dependencies.glean-core]
|
[dependencies.glean-core]
|
||||||
version = "51.7.0"
|
version = "51.8.0"
|
||||||
|
|
||||||
[dependencies.inherent]
|
[dependencies.inherent]
|
||||||
version = "1"
|
version = "1"
|
||||||
|
|
|
||||||
6
third_party/rust/glean/src/lib.rs
vendored
6
third_party/rust/glean/src/lib.rs
vendored
|
|
@ -81,8 +81,9 @@ impl glean_core::OnGleanEvents for GleanEvents {
|
||||||
// intentionally left empty
|
// intentionally left empty
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trigger_upload(&self) {
|
fn trigger_upload(&self) -> Result<(), glean_core::CallbackError> {
|
||||||
self.upload_manager.trigger_upload();
|
self.upload_manager.trigger_upload();
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start_metrics_ping_scheduler(&self) -> bool {
|
fn start_metrics_ping_scheduler(&self) -> bool {
|
||||||
|
|
@ -91,8 +92,9 @@ impl glean_core::OnGleanEvents for GleanEvents {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cancel_uploads(&self) {
|
fn cancel_uploads(&self) -> Result<(), glean_core::CallbackError> {
|
||||||
// intentionally left empty
|
// intentionally left empty
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ edition = "2018"
|
||||||
license = "MPL-2.0"
|
license = "MPL-2.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
glean = "51.7.0"
|
glean = "51.8.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" }
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ publish = false
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bincode = "1.0"
|
bincode = "1.0"
|
||||||
chrono = "0.4.10"
|
chrono = "0.4.10"
|
||||||
glean = "51.7.0"
|
glean = "51.8.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 }
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue