зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1773255 - Update to Glean v50.1.0 r=chutten,supply-chain-reviewers
Including glean_parser 6.1.1 Two important things in there: * glean_parser: [data-review] Include extra keys' names and descriptions in data review template * Glean: Derive `serde::{Deserialize, Serialize}` on `Lifetime` and `CommonMetricData` Differential Revision: https://phabricator.services.mozilla.com/D149381
This commit is contained in:
Родитель
8662f38c59
Коммит
51f960bd09
|
@ -2256,9 +2256,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "50.0.1"
|
version = "50.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ea3a101f9b9ccffbbcb7fe5159aabc22f7a5b8a266a9a810abff92ffe4b7bfc1"
|
checksum = "0857be0c251ae1fc3b5672237c99f5115a6546cd8b171cb240173098ab5e9629"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
@ -2276,9 +2276,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "50.0.1"
|
version = "50.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0e474434da0bdd88a97e06b9b47cd2eaa419e3707c21fee02f5c4d66577f3360"
|
checksum = "f1bdfa0e2e6476190b4762c4cdc87c1a7a0347f601864b091cf9ad674a909c68"
|
||||||
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 = "50.0.1"
|
gleanVersion = "50.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")}")
|
||||||
|
|
|
@ -877,9 +877,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "50.0.1"
|
version = "50.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ea3a101f9b9ccffbbcb7fe5159aabc22f7a5b8a266a9a810abff92ffe4b7bfc1"
|
checksum = "0857be0c251ae1fc3b5672237c99f5115a6546cd8b171cb240173098ab5e9629"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
@ -897,9 +897,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "50.0.1"
|
version = "50.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0e474434da0bdd88a97e06b9b47cd2eaa419e3707c21fee02f5c4d66577f3360"
|
checksum = "f1bdfa0e2e6476190b4762c4cdc87c1a7a0347f601864b091cf9ad674a909c68"
|
||||||
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 = "50.0.1"
|
glean = "50.1.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"
|
||||||
|
|
|
@ -129,7 +129,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==50.0.1:telemetry will not be collected
|
pypi-optional:glean-sdk==50.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).
|
||||||
|
|
|
@ -19,6 +19,18 @@ criteria = "safe-to-deploy"
|
||||||
version = "0.6.3"
|
version = "0.6.3"
|
||||||
notes = "Another crate I own via contain-rs that is ancient and in maintenance mode but otherwise perfectly fine."
|
notes = "Another crate I own via contain-rs that is ancient and in maintenance mode but otherwise perfectly fine."
|
||||||
|
|
||||||
|
[[audits.glean]]
|
||||||
|
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
version = "50.1.0"
|
||||||
|
notes = "Maintained by the Glean team at Mozilla"
|
||||||
|
|
||||||
|
[[audits.glean-core]]
|
||||||
|
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
version = "50.1.0"
|
||||||
|
notes = "Maintained by the Glean team at Mozilla"
|
||||||
|
|
||||||
[[audits.linked-hash-map]]
|
[[audits.linked-hash-map]]
|
||||||
who = "Aria Beingessner <a.beingessner@gmail.com>"
|
who = "Aria Beingessner <a.beingessner@gmail.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
|
|
|
@ -655,14 +655,6 @@ criteria = "safe-to-deploy"
|
||||||
version = "0.13.1"
|
version = "0.13.1"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
|
|
||||||
[[unaudited.glean]]
|
|
||||||
version = "50.0.1"
|
|
||||||
criteria = "safe-to-deploy"
|
|
||||||
|
|
||||||
[[unaudited.glean-core]]
|
|
||||||
version = "50.0.1"
|
|
||||||
criteria = "safe-to-deploy"
|
|
||||||
|
|
||||||
[[unaudited.glob]]
|
[[unaudited.glob]]
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
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.0.1
|
Version: 6.1.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
|
||||||
|
@ -86,6 +86,16 @@ $ glean_parser check < ping.json
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
## 6.1.1
|
||||||
|
|
||||||
|
- Rust: Use correct name for a ping in generated code.
|
||||||
|
|
||||||
|
## 6.1.0
|
||||||
|
|
||||||
|
- [data-review] Include extra keys' names and descriptions in data review template ([bug 1767027](https://bugzilla.mozilla.org/show_bug.cgi?id=1767027))
|
||||||
|
- Raise limit on number of statically-defined labels to 4096. ([bug 1772163](https://bugzilla.mozilla.org/show_bug.cgi?id=1772163))
|
||||||
|
- Fix Rust code generation for new UniFFI interface ([#491](https://github.com/mozilla/glean_parser/pull/491), [#494](https://github.com/mozilla/glean_parser/pull/494), [#495](https://github.com/mozilla/glean_parser/pull/495))
|
||||||
|
|
||||||
## 6.0.1
|
## 6.0.1
|
||||||
|
|
||||||
- Relax version requirement for MarkupSafe.
|
- Relax version requirement for MarkupSafe.
|
|
@ -1,7 +1,7 @@
|
||||||
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=rLs4QpTvLIRGF223xSYkshGD9_aJmuDNOGj8PfZLqRE,7002
|
||||||
glean_parser/coverage.py,sha256=2IwC4XMDtDamMkBFoYilmqJzW4gyypq65YVCur8SNas,4405
|
glean_parser/coverage.py,sha256=2IwC4XMDtDamMkBFoYilmqJzW4gyypq65YVCur8SNas,4405
|
||||||
glean_parser/data_review.py,sha256=0Mqt8AGGGELxKL_NMg4ShbGlcefPfdC_o2GtRXux_K4,5040
|
glean_parser/data_review.py,sha256=s_aguo4tCiPhpJoHUfsE1Z91N7wXyQt11hjH11jmqiM,5507
|
||||||
glean_parser/javascript.py,sha256=okBdomD628U0kO-r23mWC8lXPuVbZmL97wMCufgBYA8,11443
|
glean_parser/javascript.py,sha256=okBdomD628U0kO-r23mWC8lXPuVbZmL97wMCufgBYA8,11443
|
||||||
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
|
||||||
|
@ -9,7 +9,7 @@ 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=OydnNQYHfNW_UKNzZuZCL-ZEAxTlVzsabXNMxmUuht4,15741
|
||||||
glean_parser/pings.py,sha256=6XakkO9jnQc2oojLQJvTCMwF7w-BEm6rR54tunCb38o,2805
|
glean_parser/pings.py,sha256=6XakkO9jnQc2oojLQJvTCMwF7w-BEm6rR54tunCb38o,2805
|
||||||
glean_parser/rust.py,sha256=KyibtG4ftz7Cy6FG5XlysTlLThpK7v7FpkAdxXkQxsw,6103
|
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
|
||||||
|
@ -17,7 +17,7 @@ glean_parser/translation_options.py,sha256=TpsvgaejlmOWkmTkarMx7cBVcjhshlJi33jsA
|
||||||
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=P5-hNS1Tz-kTo66v4xThU1mS21iwpgjg7CWC4Iybl1E,23886
|
glean_parser/schemas/metrics.2-0-0.schema.yaml,sha256=cw6nR9cjd1E0O0_daSZ-w1dFvClMcOrpJsFb-PNnMSw,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
|
||||||
|
@ -28,12 +28,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=dvGb8LL6GuxfmHrppfl3QdnDHVjdOEEHhc8jen1Xp7w,10869
|
glean_parser/templates/rust.jinja2,sha256=rskbE0LMcCTO488faVXrGAP_e-l7rUpysbkNZXKk1Ck,11083
|
||||||
glean_parser/templates/swift.jinja2,sha256=a8m1T3bLWieywYacpima16AwGBLjiEzCIzYGtYxm2D4,5214
|
glean_parser/templates/swift.jinja2,sha256=a8m1T3bLWieywYacpima16AwGBLjiEzCIzYGtYxm2D4,5214
|
||||||
glean_parser-6.0.1.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
|
glean_parser-6.1.1.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
|
||||||
glean_parser-6.0.1.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
glean_parser-6.1.1.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
||||||
glean_parser-6.0.1.dist-info/METADATA,sha256=F_50cQI2pwTuDMFg-dhYpan_kfpF6RNQp4ivIQdHe8w,25339
|
glean_parser-6.1.1.dist-info/METADATA,sha256=sQ9fjwllYlvTTt05MAk0UalTMJ7tjdEAhRk1GKSn2eE,25928
|
||||||
glean_parser-6.0.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
glean_parser-6.1.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
||||||
glean_parser-6.0.1.dist-info/entry_points.txt,sha256=s-clJTIqp-PpJD-n3AnIQZFkTafIrzsTbAPX9vNY018,69
|
glean_parser-6.1.1.dist-info/entry_points.txt,sha256=s-clJTIqp-PpJD-n3AnIQZFkTafIrzsTbAPX9vNY018,69
|
||||||
glean_parser-6.0.1.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
|
glean_parser-6.1.1.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
|
||||||
glean_parser-6.0.1.dist-info/RECORD,,
|
glean_parser-6.1.1.dist-info/RECORD,,
|
|
@ -59,6 +59,13 @@ def generate(
|
||||||
last_bug = metric.bugs[-1]
|
last_bug = metric.bugs[-1]
|
||||||
metrics_table += f"`{category_name}.{metric_name}` | "
|
metrics_table += f"`{category_name}.{metric_name}` | "
|
||||||
metrics_table += f"{one_line_desc} | {sensitivity} | {last_bug}\n"
|
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)
|
||||||
|
|
||||||
|
|
|
@ -196,7 +196,7 @@ def output_rust(
|
||||||
template.render(
|
template.render(
|
||||||
parser_version=__version__,
|
parser_version=__version__,
|
||||||
categories=categories,
|
categories=categories,
|
||||||
extra_args=util.metric_args,
|
extra_metric_args=util.extra_metric_args,
|
||||||
common_metric_args=util.common_metric_args,
|
common_metric_args=util.common_metric_args,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -360,7 +360,7 @@ definitions:
|
||||||
uniqueItems: true
|
uniqueItems: true
|
||||||
items:
|
items:
|
||||||
$ref: "#/definitions/labeled_metric_id"
|
$ref: "#/definitions/labeled_metric_id"
|
||||||
maxItems: 100
|
maxItems: 4096
|
||||||
- type: "null"
|
- type: "null"
|
||||||
|
|
||||||
extra_keys:
|
extra_keys:
|
||||||
|
|
|
@ -32,10 +32,10 @@ pub struct {{ obj.name|Camelize }}{{ suffix }} {
|
||||||
impl ExtraKeys for {{ obj.name|Camelize }}{{ suffix }} {
|
impl ExtraKeys for {{ obj.name|Camelize }}{{ suffix }} {
|
||||||
const ALLOWED_KEYS: &'static [&'static str] = {{ obj.allowed_extra_keys|extra_keys }};
|
const ALLOWED_KEYS: &'static [&'static str] = {{ obj.allowed_extra_keys|extra_keys }};
|
||||||
|
|
||||||
fn into_ffi_extra(self) -> ::std::collections::HashMap<i32, String> {
|
fn into_ffi_extra(self) -> ::std::collections::HashMap<::std::string::String, ::std::string::String> {
|
||||||
let mut map = ::std::collections::HashMap::new();
|
let mut map = ::std::collections::HashMap::new();
|
||||||
{% for key, _ in obj|attr(name) %}
|
{% for key, _ in obj|attr(name) %}
|
||||||
self.{{key|snake_case}}.and_then(|val| map.insert({{loop.index-1}}, val));
|
self.{{key|snake_case}}.and_then(|val| map.insert("{{key}}".to_string(), val));
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
map
|
map
|
||||||
}
|
}
|
||||||
|
@ -43,21 +43,17 @@ impl ExtraKeys for {{ obj.name|Camelize }}{{ suffix }} {
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
{% for category in categories %}
|
{% for category in categories %}
|
||||||
{% if category.contains_pings %}
|
{% if category.contains_pings %}
|
||||||
use glean::private::Ping;
|
|
||||||
use once_cell::sync::Lazy;
|
|
||||||
{% for obj in category.objs.values() %}
|
{% for obj in category.objs.values() %}
|
||||||
|
|
||||||
#[allow(non_upper_case_globals, dead_code)]
|
#[allow(non_upper_case_globals, dead_code)]
|
||||||
/// {{ obj.description|wordwrap() | replace('\n', '\n/// ') }}
|
/// {{ obj.description|wordwrap() | replace('\n', '\n/// ') }}
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
pub static {{ obj.name|snake_case }}: Lazy<Ping> =
|
pub static {{ obj.name|snake_case }}: ::glean::private::__export::Lazy<::glean::private::PingType> =
|
||||||
Lazy::new(|| Ping::new("{{ obj.name }}", {{ obj.include_client_id|rust }}, {{ obj.send_if_empty|rust }}, {{ obj.reason_codes|rust }}));
|
::glean::private::__export::Lazy::new(|| ::glean::private::PingType::new("{{ obj.name }}", {{ obj.include_client_id|rust }}, {{ obj.send_if_empty|rust }}, {{ obj.reason_codes|rust }}));
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% 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, CommonMetricData, HistogramType, Lifetime, TimeUnit, MemoryUnit};
|
||||||
use once_cell::sync::Lazy;
|
|
||||||
{% for obj in category.objs.values() %}
|
{% for obj in category.objs.values() %}
|
||||||
|
|
||||||
{% if obj|attr("_generate_enums") %}
|
{% if obj|attr("_generate_enums") %}
|
||||||
|
@ -67,7 +63,7 @@ pub mod {{ category.name|snake_case }} {
|
||||||
/// generated from {{ category.name }}.{{ obj.name }}
|
/// generated from {{ category.name }}.{{ obj.name }}
|
||||||
///
|
///
|
||||||
/// {{ obj.description|wordwrap() | replace('\n', '\n /// ') }}
|
/// {{ obj.description|wordwrap() | replace('\n', '\n /// ') }}
|
||||||
pub static {{ obj.name|snake_case }}: Lazy<{{ obj|type_name }}> = Lazy::new(|| {
|
pub static {{ obj.name|snake_case }}: ::glean::private::__export::Lazy<{{ obj|type_name }}> = ::glean::private::__export::Lazy::new(|| {
|
||||||
{{ obj|ctor }}(CommonMetricData {
|
{{ obj|ctor }}(CommonMetricData {
|
||||||
category: {{ obj.category|rust }},
|
category: {{ obj.category|rust }},
|
||||||
name: {{ obj.name|rust }},
|
name: {{ obj.name|rust }},
|
||||||
|
@ -76,7 +72,7 @@ pub mod {{ category.name|snake_case }} {
|
||||||
disabled: {{ obj.is_disabled()|rust }},
|
disabled: {{ obj.is_disabled()|rust }},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
{%- for arg_name in extra_args if obj[arg_name] is defined and arg_name not in common_metric_args and arg_name != 'allowed_extra_keys' -%}
|
{%- for arg_name in extra_metric_args if obj[arg_name] is defined and arg_name != 'allowed_extra_keys' -%}
|
||||||
, {{ obj[arg_name]|rust }}
|
, {{ obj[arg_name]|rust }}
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
{{ ", " if obj.labeled else ")\n" }}
|
{{ ", " if obj.labeled else ")\n" }}
|
||||||
|
@ -100,10 +96,9 @@ pub(crate) mod __glean_metric_maps {
|
||||||
|
|
||||||
use super::{id_for_extra_key, extra_keys_len};
|
use super::{id_for_extra_key, extra_keys_len};
|
||||||
use crate::private::*;
|
use crate::private::*;
|
||||||
use once_cell::sync::Lazy;
|
|
||||||
|
|
||||||
{% for typ, metrics in metric_by_type.items() %}
|
{% for typ, metrics in metric_by_type.items() %}
|
||||||
pub static {{typ.0}}: Lazy<HashMap<MetricId, &Lazy<{{typ.1}}>>> = Lazy::new(|| {
|
pub static {{typ.0}}: ::glean::private::__export::Lazy<HashMap<MetricId, &Lazy<{{typ.1}}>>> = ::glean::private::__export::Lazy::new(|| {
|
||||||
let mut map = HashMap::with_capacity({{metrics|length}});
|
let mut map = HashMap::with_capacity({{metrics|length}});
|
||||||
{% for metric in metrics %}
|
{% for metric in metrics %}
|
||||||
map.insert({{metric.0}}.into(), &super::{{metric.1}});
|
map.insert({{metric.0}}.into(), &super::{{metric.1}});
|
||||||
|
@ -269,13 +264,13 @@ pub(crate) mod __glean_metric_maps {
|
||||||
|
|
||||||
pub(crate) const MIN_LABELED_SUBMETRIC_ID: u32 = {{min_submetric_id}};
|
pub(crate) const MIN_LABELED_SUBMETRIC_ID: u32 = {{min_submetric_id}};
|
||||||
pub(crate) static NEXT_LABELED_SUBMETRIC_ID: AtomicU32 = AtomicU32::new(MIN_LABELED_SUBMETRIC_ID);
|
pub(crate) static NEXT_LABELED_SUBMETRIC_ID: AtomicU32 = AtomicU32::new(MIN_LABELED_SUBMETRIC_ID);
|
||||||
pub(crate) static LABELED_METRICS_TO_IDS: Lazy<RwLock<HashMap<(u32, String), u32>>> = Lazy::new(||
|
pub(crate) static LABELED_METRICS_TO_IDS: ::glean::private::__export::Lazy<RwLock<HashMap<(u32, String), u32>>> = ::glean::private::__export::Lazy::new(||
|
||||||
RwLock::new(HashMap::new())
|
RwLock::new(HashMap::new())
|
||||||
);
|
);
|
||||||
|
|
||||||
{% for typ, metrics in metric_by_type.items() %}
|
{% for typ, metrics in metric_by_type.items() %}
|
||||||
{% if typ.0 in ('BOOLEAN_MAP', 'COUNTER_MAP', 'STRING_MAP') %}
|
{% if typ.0 in ('BOOLEAN_MAP', 'COUNTER_MAP', 'STRING_MAP') %}
|
||||||
pub static {{typ.0}}: Lazy<RwLock<HashMap<MetricId, Labeled{{typ.1}}>>> = Lazy::new(||
|
pub static {{typ.0}}: ::glean::private::__export::Lazy<RwLock<HashMap<MetricId, Labeled{{typ.1}}>>> = ::glean::private::__export::Lazy::new(||
|
||||||
RwLock::new(HashMap::new())
|
RwLock::new(HashMap::new())
|
||||||
);
|
);
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -196,7 +196,7 @@ python-versions = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-parser"
|
name = "glean-parser"
|
||||||
version = "6.0.1"
|
version = "6.1.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
|
||||||
|
@ -729,7 +729,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.6"
|
python-versions = "^3.6"
|
||||||
content-hash = "9e86d62b3aa4e09f6c555e561e383a6a2e3c8935694858aea94db3a96eebdc1d"
|
content-hash = "f473795bdc4bd0ee2360afd9b5346ede7792e1befae9cc7dd5bf6b9b814a7874"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
aiohttp = [
|
aiohttp = [
|
||||||
|
@ -843,8 +843,8 @@ esprima = [
|
||||||
{file = "fluent.syntax-0.18.1.tar.gz", hash = "sha256:3a55f5e605d1b029a65cc8b6492c86ec4608e15447e73db1495de11fd46c104f"},
|
{file = "fluent.syntax-0.18.1.tar.gz", hash = "sha256:3a55f5e605d1b029a65cc8b6492c86ec4608e15447e73db1495de11fd46c104f"},
|
||||||
]
|
]
|
||||||
glean-parser = [
|
glean-parser = [
|
||||||
{file = "glean_parser-6.0.1-py3-none-any.whl", hash = "sha256:d7cc9c12b1b64bb2ac84db10d2e853c1aa94b036351e2f41f6bafc94ba29b2e4"},
|
{file = "glean_parser-6.1.1-py3-none-any.whl", hash = "sha256:225dc6d30d9c04459df2aebbd1950691fa32602a9be0228759a5bfaf2ece8581"},
|
||||||
{file = "glean_parser-6.0.1.tar.gz", hash = "sha256:05acc5d25285ecf9d59adb402719bc9ffbddb11b156e8f0479c3d503bf7ad347"},
|
{file = "glean_parser-6.1.1.tar.gz", hash = "sha256:bc41a57aa432b4d632cbf0df1f0ab1ac720e3028f8b194dabdfbb1c837393b7d"},
|
||||||
]
|
]
|
||||||
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"},
|
||||||
|
|
|
@ -10,7 +10,7 @@ ecdsa==0.15
|
||||||
esprima==4.0.1
|
esprima==4.0.1
|
||||||
fluent.migrate==0.11
|
fluent.migrate==0.11
|
||||||
fluent.syntax==0.18.1
|
fluent.syntax==0.18.1
|
||||||
glean_parser==6.0.1
|
glean_parser==6.1.1
|
||||||
# Pin importlib-metadata to a version compatible with poetry
|
# Pin importlib-metadata to a version compatible with poetry
|
||||||
importlib-metadata==1.7.0
|
importlib-metadata==1.7.0
|
||||||
jsmin==2.1.0
|
jsmin==2.1.0
|
||||||
|
|
|
@ -89,9 +89,9 @@ fluent.migrate==0.11 \
|
||||||
fluent.syntax==0.18.1 \
|
fluent.syntax==0.18.1 \
|
||||||
--hash=sha256:0e63679fa4f1b3042565220a5127b4bab842424f07d6a13c12299e3b3835486a \
|
--hash=sha256:0e63679fa4f1b3042565220a5127b4bab842424f07d6a13c12299e3b3835486a \
|
||||||
--hash=sha256:3a55f5e605d1b029a65cc8b6492c86ec4608e15447e73db1495de11fd46c104f
|
--hash=sha256:3a55f5e605d1b029a65cc8b6492c86ec4608e15447e73db1495de11fd46c104f
|
||||||
glean-parser==6.0.1 \
|
glean-parser==6.1.1 \
|
||||||
--hash=sha256:d7cc9c12b1b64bb2ac84db10d2e853c1aa94b036351e2f41f6bafc94ba29b2e4 \
|
--hash=sha256:225dc6d30d9c04459df2aebbd1950691fa32602a9be0228759a5bfaf2ece8581 \
|
||||||
--hash=sha256:05acc5d25285ecf9d59adb402719bc9ffbddb11b156e8f0479c3d503bf7ad347
|
--hash=sha256:bc41a57aa432b4d632cbf0df1f0ab1ac720e3028f8b194dabdfbb1c837393b7d
|
||||||
idna-ssl==1.1.0; python_version < "3.7" and python_version >= "3.6" \
|
idna-ssl==1.1.0; python_version < "3.7" and python_version >= "3.6" \
|
||||||
--hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c
|
--hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c
|
||||||
idna==2.10; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" or python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_version < "3.7" and python_version >= "3.6" and python_full_version >= "3.4.0" or python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" \
|
idna==2.10; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" or python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.7" or python_version < "3.7" and python_version >= "3.6" and python_full_version >= "3.4.0" or python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" \
|
||||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -12,7 +12,7 @@
|
||||||
[package]
|
[package]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "50.0.1"
|
version = "50.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>",
|
||||||
|
@ -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.0.1"
|
glean-parser = "6.1.1"
|
||||||
|
|
||||||
[dependencies.bincode]
|
[dependencies.bincode]
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
|
|
|
@ -7,12 +7,14 @@ use std::convert::TryFrom;
|
||||||
use crate::error::{Error, ErrorKind};
|
use crate::error::{Error, ErrorKind};
|
||||||
use crate::metrics::labeled::validate_dynamic_label;
|
use crate::metrics::labeled::validate_dynamic_label;
|
||||||
use crate::Glean;
|
use crate::Glean;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// The supported metrics' lifetimes.
|
/// The supported metrics' lifetimes.
|
||||||
///
|
///
|
||||||
/// A metric's lifetime determines when its stored data gets reset.
|
/// A metric's lifetime determines when its stored data gets reset.
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
|
||||||
#[repr(i32)] // Use i32 to be compatible with our JNA definition
|
#[repr(i32)] // Use i32 to be compatible with our JNA definition
|
||||||
|
#[serde(rename_all = "lowercase")]
|
||||||
pub enum Lifetime {
|
pub enum Lifetime {
|
||||||
/// The metric is reset with each sent ping
|
/// The metric is reset with each sent ping
|
||||||
Ping,
|
Ping,
|
||||||
|
@ -53,7 +55,7 @@ impl TryFrom<i32> for Lifetime {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The common set of data shared across all different metric types.
|
/// The common set of data shared across all different metric types.
|
||||||
#[derive(Default, Debug, Clone)]
|
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
||||||
pub struct CommonMetricData {
|
pub struct CommonMetricData {
|
||||||
/// The metric's name.
|
/// The metric's name.
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
|
|
@ -537,3 +537,13 @@ interface NumeratorMetric {
|
||||||
|
|
||||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface TextMetric {
|
||||||
|
constructor(CommonMetricData meta);
|
||||||
|
|
||||||
|
void set(string value);
|
||||||
|
|
||||||
|
string? test_get_value(optional string? ping_name = null);
|
||||||
|
|
||||||
|
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||||
|
};
|
||||||
|
|
|
@ -59,8 +59,8 @@ pub use crate::metrics::{
|
||||||
BooleanMetric, CounterMetric, CustomDistributionMetric, Datetime, DatetimeMetric,
|
BooleanMetric, CounterMetric, CustomDistributionMetric, Datetime, DatetimeMetric,
|
||||||
DenominatorMetric, DistributionData, EventMetric, MemoryDistributionMetric, MemoryUnit,
|
DenominatorMetric, DistributionData, EventMetric, MemoryDistributionMetric, MemoryUnit,
|
||||||
NumeratorMetric, PingType, QuantityMetric, Rate, RateMetric, RecordedEvent, RecordedExperiment,
|
NumeratorMetric, PingType, QuantityMetric, Rate, RateMetric, RecordedEvent, RecordedExperiment,
|
||||||
StringListMetric, StringMetric, TimeUnit, TimerId, TimespanMetric, TimingDistributionMetric,
|
StringListMetric, StringMetric, TextMetric, TimeUnit, TimerId, TimespanMetric,
|
||||||
UrlMetric, UuidMetric,
|
TimingDistributionMetric, UrlMetric, UuidMetric,
|
||||||
};
|
};
|
||||||
pub use crate::upload::{PingRequest, PingUploadTask, UploadResult};
|
pub use crate::upload::{PingRequest, PingUploadTask, UploadResult};
|
||||||
|
|
||||||
|
@ -486,26 +486,6 @@ pub fn persist_ping_lifetime_data() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Unblock the global dispatcher to start processing queued tasks.
|
|
||||||
pub extern "C" fn rlb_flush_dispatcher() {
|
|
||||||
let was_initialized = was_initialize_called();
|
|
||||||
|
|
||||||
// Panic in debug mode
|
|
||||||
debug_assert!(!was_initialized);
|
|
||||||
|
|
||||||
// In release do a check and bail out
|
|
||||||
if was_initialized {
|
|
||||||
log::error!(
|
|
||||||
"Tried to flush the dispatcher from outside, but Glean was initialized in the RLB."
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Err(err) = dispatcher::flush_init() {
|
|
||||||
log::error!("Unable to flush the preinit queue: {}", err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn initialize_core_metrics(glean: &Glean, client_info: &ClientInfoMetrics) {
|
fn initialize_core_metrics(glean: &Glean, client_info: &ClientInfoMetrics) {
|
||||||
core_metrics::internal_metrics::app_build.set_sync(glean, &client_info.app_build[..]);
|
core_metrics::internal_metrics::app_build.set_sync(glean, &client_info.app_build[..]);
|
||||||
core_metrics::internal_metrics::app_display_version
|
core_metrics::internal_metrics::app_display_version
|
||||||
|
|
|
@ -402,6 +402,7 @@ fn correct_order() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// One of every metric type. The values are arbitrary and don't matter.
|
// One of every metric type. The values are arbitrary and don't matter.
|
||||||
|
let long_string = "0123456789".repeat(200);
|
||||||
let all_metrics = vec![
|
let all_metrics = vec![
|
||||||
Boolean(false),
|
Boolean(false),
|
||||||
Counter(0),
|
Counter(0),
|
||||||
|
@ -418,6 +419,7 @@ fn correct_order() {
|
||||||
MemoryDistribution(Histogram::functional(2.0, 8.0)),
|
MemoryDistribution(Histogram::functional(2.0, 8.0)),
|
||||||
Jwe("eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGeipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDbSv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaVmqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je81860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi6UklfCpIMfIjf7iGdXKHzg.48V1_ALb6US04U3b.5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6jiSdiwkIr3ajwQzaBtQD_A.XFBoMYUZodetZdvTiFvSkQ".into()),
|
Jwe("eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGeipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDbSv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaVmqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je81860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi6UklfCpIMfIjf7iGdXKHzg.48V1_ALb6US04U3b.5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6jiSdiwkIr3ajwQzaBtQD_A.XFBoMYUZodetZdvTiFvSkQ".into()),
|
||||||
Rate(0, 0),
|
Rate(0, 0),
|
||||||
|
Text(long_string),
|
||||||
];
|
];
|
||||||
|
|
||||||
for metric in all_metrics {
|
for metric in all_metrics {
|
||||||
|
@ -445,6 +447,7 @@ fn correct_order() {
|
||||||
Jwe(..) => assert_eq!(13, disc),
|
Jwe(..) => assert_eq!(13, disc),
|
||||||
Rate(..) => assert_eq!(14, disc),
|
Rate(..) => assert_eq!(14, disc),
|
||||||
Url(..) => assert_eq!(15, disc),
|
Url(..) => assert_eq!(15, disc),
|
||||||
|
Text(..) => assert_eq!(16, disc),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ mod rate;
|
||||||
mod recorded_experiment;
|
mod recorded_experiment;
|
||||||
mod string;
|
mod string;
|
||||||
mod string_list;
|
mod string_list;
|
||||||
|
mod text;
|
||||||
mod time_unit;
|
mod time_unit;
|
||||||
mod timespan;
|
mod timespan;
|
||||||
mod timing_distribution;
|
mod timing_distribution;
|
||||||
|
@ -56,6 +57,7 @@ pub use self::quantity::QuantityMetric;
|
||||||
pub use self::rate::{Rate, RateMetric};
|
pub use self::rate::{Rate, RateMetric};
|
||||||
pub use self::string::StringMetric;
|
pub use self::string::StringMetric;
|
||||||
pub use self::string_list::StringListMetric;
|
pub use self::string_list::StringListMetric;
|
||||||
|
pub use self::text::TextMetric;
|
||||||
pub use self::time_unit::TimeUnit;
|
pub use self::time_unit::TimeUnit;
|
||||||
pub use self::timespan::TimespanMetric;
|
pub use self::timespan::TimespanMetric;
|
||||||
pub use self::timing_distribution::TimerId;
|
pub use self::timing_distribution::TimerId;
|
||||||
|
@ -125,6 +127,8 @@ pub enum Metric {
|
||||||
Rate(i32, i32),
|
Rate(i32, i32),
|
||||||
/// A URL metric. See [`UrlMetric`] for more information.
|
/// A URL metric. See [`UrlMetric`] for more information.
|
||||||
Url(String),
|
Url(String),
|
||||||
|
/// A Text metric. See [`TextMetric`] for more information.
|
||||||
|
Text(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A [`MetricType`] describes common behavior across all metrics.
|
/// A [`MetricType`] describes common behavior across all metrics.
|
||||||
|
@ -181,6 +185,7 @@ impl Metric {
|
||||||
Metric::Uuid(_) => "uuid",
|
Metric::Uuid(_) => "uuid",
|
||||||
Metric::MemoryDistribution(_) => "memory_distribution",
|
Metric::MemoryDistribution(_) => "memory_distribution",
|
||||||
Metric::Jwe(_) => "jwe",
|
Metric::Jwe(_) => "jwe",
|
||||||
|
Metric::Text(_) => "text",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,6 +214,7 @@ impl Metric {
|
||||||
Metric::Uuid(s) => json!(s),
|
Metric::Uuid(s) => json!(s),
|
||||||
Metric::MemoryDistribution(hist) => json!(memory_distribution::snapshot(hist)),
|
Metric::MemoryDistribution(hist) => json!(memory_distribution::snapshot(hist)),
|
||||||
Metric::Jwe(s) => json!(s),
|
Metric::Jwe(s) => json!(s),
|
||||||
|
Metric::Text(s) => json!(s),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,180 @@
|
||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use crate::error_recording::{test_get_num_recorded_errors, ErrorType};
|
||||||
|
use crate::metrics::Metric;
|
||||||
|
use crate::metrics::MetricType;
|
||||||
|
use crate::storage::StorageManager;
|
||||||
|
use crate::util::truncate_string_at_boundary_with_error;
|
||||||
|
use crate::CommonMetricData;
|
||||||
|
use crate::Glean;
|
||||||
|
|
||||||
|
// The maximum number of characters for text.
|
||||||
|
const MAX_LENGTH_VALUE: usize = 200 * 1024;
|
||||||
|
|
||||||
|
/// A text metric.
|
||||||
|
///
|
||||||
|
/// Records a single long Unicode text,
|
||||||
|
/// used when the limits on `String` are too low.
|
||||||
|
/// Text is length-limited to `MAX_LENGTH_VALUE` bytes.
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct TextMetric {
|
||||||
|
meta: Arc<CommonMetricData>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MetricType for TextMetric {
|
||||||
|
fn meta(&self) -> &CommonMetricData {
|
||||||
|
&self.meta
|
||||||
|
}
|
||||||
|
|
||||||
|
fn with_name(&self, name: String) -> Self {
|
||||||
|
let mut meta = (*self.meta).clone();
|
||||||
|
meta.name = name;
|
||||||
|
Self {
|
||||||
|
meta: Arc::new(meta),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn with_dynamic_label(&self, label: String) -> Self {
|
||||||
|
let mut meta = (*self.meta).clone();
|
||||||
|
meta.dynamic_label = Some(label);
|
||||||
|
Self {
|
||||||
|
meta: Arc::new(meta),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IMPORTANT:
|
||||||
|
//
|
||||||
|
// When changing this implementation, make sure all the operations are
|
||||||
|
// also declared in the related trait in `../traits/`.
|
||||||
|
impl TextMetric {
|
||||||
|
/// Creates a new text metric.
|
||||||
|
pub fn new(meta: CommonMetricData) -> Self {
|
||||||
|
Self {
|
||||||
|
meta: Arc::new(meta),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets to the specified value.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `value` - The text to set the metric to.
|
||||||
|
///
|
||||||
|
/// ## Notes
|
||||||
|
///
|
||||||
|
/// Truncates the value (at codepoint boundaries) if it is longer than `MAX_LENGTH_VALUE` bytes
|
||||||
|
/// and logs an error.
|
||||||
|
pub fn set(&self, value: String) {
|
||||||
|
let metric = self.clone();
|
||||||
|
crate::launch_with_glean(move |glean| metric.set_sync(glean, &value))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets to the specified value synchronously,
|
||||||
|
/// truncating and recording an error if longer than `MAX_LENGTH_VALUE`.
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub fn set_sync<S: Into<String>>(&self, glean: &Glean, value: S) {
|
||||||
|
if !self.should_record(glean) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let s = truncate_string_at_boundary_with_error(glean, &self.meta, value, MAX_LENGTH_VALUE);
|
||||||
|
|
||||||
|
let value = Metric::Text(s);
|
||||||
|
glean.storage().record(glean, &self.meta, &value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gets the currently-stored value as a string, or None if there is no value.
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub fn get_value<'a, S: Into<Option<&'a str>>>(
|
||||||
|
&self,
|
||||||
|
glean: &Glean,
|
||||||
|
ping_name: S,
|
||||||
|
) -> Option<String> {
|
||||||
|
let queried_ping_name = ping_name
|
||||||
|
.into()
|
||||||
|
.unwrap_or_else(|| &self.meta().send_in_pings[0]);
|
||||||
|
|
||||||
|
match StorageManager.snapshot_metric_for_test(
|
||||||
|
glean.storage(),
|
||||||
|
queried_ping_name,
|
||||||
|
&self.meta.identifier(glean),
|
||||||
|
self.meta.lifetime,
|
||||||
|
) {
|
||||||
|
Some(Metric::Text(s)) => Some(s),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// **Test-only API (exported for FFI purposes).**
|
||||||
|
///
|
||||||
|
/// Gets the currently stored value as a string.
|
||||||
|
///
|
||||||
|
/// This doesn't clear the stored value.
|
||||||
|
pub fn test_get_value(&self, ping_name: Option<String>) -> Option<String> {
|
||||||
|
crate::block_on_dispatcher();
|
||||||
|
crate::core::with_glean(|glean| self.get_value(glean, ping_name.as_deref()))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// **Exported for test purposes.**
|
||||||
|
///
|
||||||
|
/// Gets the number of recorded errors for the given metric and error type.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `error` - The type of error
|
||||||
|
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||||
|
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// The number of errors reported.
|
||||||
|
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||||
|
crate::block_on_dispatcher();
|
||||||
|
|
||||||
|
crate::core::with_glean(|glean| {
|
||||||
|
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||||
|
.unwrap_or(0)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use crate::test_get_num_recorded_errors;
|
||||||
|
use crate::tests::new_glean;
|
||||||
|
use crate::util::truncate_string_at_boundary;
|
||||||
|
use crate::ErrorType;
|
||||||
|
use crate::Lifetime;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn setting_a_long_string_records_an_error() {
|
||||||
|
let (glean, _) = new_glean(None);
|
||||||
|
|
||||||
|
let metric = TextMetric::new(CommonMetricData {
|
||||||
|
name: "text_metric".into(),
|
||||||
|
category: "test".into(),
|
||||||
|
send_in_pings: vec!["store1".into()],
|
||||||
|
lifetime: Lifetime::Application,
|
||||||
|
disabled: false,
|
||||||
|
dynamic_label: None,
|
||||||
|
});
|
||||||
|
|
||||||
|
let sample_string = "0123456789".repeat(200 * 1024);
|
||||||
|
metric.set_sync(&glean, sample_string.clone());
|
||||||
|
|
||||||
|
let truncated = truncate_string_at_boundary(sample_string, MAX_LENGTH_VALUE);
|
||||||
|
assert_eq!(truncated, metric.get_value(&glean, "store1").unwrap());
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
1,
|
||||||
|
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||||
|
.unwrap()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,6 +20,7 @@ mod quantity;
|
||||||
mod rate;
|
mod rate;
|
||||||
mod string;
|
mod string;
|
||||||
mod string_list;
|
mod string_list;
|
||||||
|
mod text;
|
||||||
mod timespan;
|
mod timespan;
|
||||||
mod timing_distribution;
|
mod timing_distribution;
|
||||||
mod url;
|
mod url;
|
||||||
|
@ -41,6 +42,7 @@ pub use self::quantity::Quantity;
|
||||||
pub use self::rate::Rate;
|
pub use self::rate::Rate;
|
||||||
pub use self::string::String;
|
pub use self::string::String;
|
||||||
pub use self::string_list::StringList;
|
pub use self::string_list::StringList;
|
||||||
|
pub use self::text::Text;
|
||||||
pub use self::timespan::Timespan;
|
pub use self::timespan::Timespan;
|
||||||
pub use self::timing_distribution::TimingDistribution;
|
pub use self::timing_distribution::TimingDistribution;
|
||||||
pub use self::url::Url;
|
pub use self::url::Url;
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
use crate::ErrorType;
|
||||||
|
|
||||||
|
/// A description for the [`TextMetric`](crate::metrics::TextMetric) type.
|
||||||
|
///
|
||||||
|
/// When changing this trait, make sure all the operations are
|
||||||
|
/// implemented in the related type in `../metrics/`.
|
||||||
|
pub trait Text {
|
||||||
|
/// Sets to the specified value.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `value` - The string to set the metric to.
|
||||||
|
///
|
||||||
|
/// ## Notes
|
||||||
|
///
|
||||||
|
/// Truncates the value if it is longer than `MAX_LENGTH_VALUE` bytes and logs an error.
|
||||||
|
fn set<S: Into<std::string::String>>(&self, value: S);
|
||||||
|
|
||||||
|
/// **Exported for test purposes.**
|
||||||
|
///
|
||||||
|
/// Gets the currently stored value as a string.
|
||||||
|
///
|
||||||
|
/// This doesn't clear the stored value.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||||
|
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||||
|
fn test_get_value<'a, S: Into<Option<&'a str>>>(
|
||||||
|
&self,
|
||||||
|
ping_name: S,
|
||||||
|
) -> Option<std::string::String>;
|
||||||
|
|
||||||
|
/// **Exported for test purposes.**
|
||||||
|
///
|
||||||
|
/// Gets the number of recorded errors for the given metric and error type.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `error` - The type of error
|
||||||
|
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||||
|
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// The number of errors reported.
|
||||||
|
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||||
|
&self,
|
||||||
|
error: ErrorType,
|
||||||
|
ping_name: S,
|
||||||
|
) -> i32;
|
||||||
|
}
|
|
@ -0,0 +1,115 @@
|
||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
mod common;
|
||||||
|
use crate::common::*;
|
||||||
|
|
||||||
|
use serde_json::json;
|
||||||
|
|
||||||
|
use glean_core::metrics::*;
|
||||||
|
use glean_core::storage::StorageManager;
|
||||||
|
use glean_core::{test_get_num_recorded_errors, ErrorType};
|
||||||
|
use glean_core::{CommonMetricData, Lifetime};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn text_serializer_should_correctly_serialize_strings() {
|
||||||
|
let (mut tempdir, _) = tempdir();
|
||||||
|
|
||||||
|
{
|
||||||
|
// We give tempdir to the `new_glean` function...
|
||||||
|
let (glean, dir) = new_glean(Some(tempdir));
|
||||||
|
// And then we get it back once that function returns.
|
||||||
|
tempdir = dir;
|
||||||
|
|
||||||
|
let metric = TextMetric::new(CommonMetricData {
|
||||||
|
name: "text_metric".into(),
|
||||||
|
category: "telemetry".into(),
|
||||||
|
send_in_pings: vec!["store1".into()],
|
||||||
|
disabled: false,
|
||||||
|
lifetime: Lifetime::User,
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
|
||||||
|
metric.set_sync(&glean, "test_text_value");
|
||||||
|
|
||||||
|
let snapshot = StorageManager
|
||||||
|
.snapshot_as_json(glean.storage(), "store1", true)
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
json!({"text": {"telemetry.text_metric": "test_text_value"}}),
|
||||||
|
snapshot
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make a new Glean instance here, which should force reloading of the data from disk
|
||||||
|
// so we can ensure it persisted, because it has User lifetime
|
||||||
|
{
|
||||||
|
let (glean, _) = new_glean(Some(tempdir));
|
||||||
|
let snapshot = StorageManager
|
||||||
|
.snapshot_as_json(glean.storage(), "store1", true)
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
json!({"text": {"telemetry.text_metric": "test_text_value"}}),
|
||||||
|
snapshot
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn set_properly_sets_the_value_in_all_stores() {
|
||||||
|
let (glean, _t) = new_glean(None);
|
||||||
|
let store_names: Vec<String> = vec!["store1".into(), "store2".into()];
|
||||||
|
|
||||||
|
let metric = TextMetric::new(CommonMetricData {
|
||||||
|
name: "text_metric".into(),
|
||||||
|
category: "telemetry".into(),
|
||||||
|
send_in_pings: store_names.clone(),
|
||||||
|
disabled: false,
|
||||||
|
lifetime: Lifetime::Ping,
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
|
||||||
|
metric.set_sync(&glean, "test_text_value");
|
||||||
|
|
||||||
|
// Check that the data was correctly set in each store.
|
||||||
|
for store_name in store_names {
|
||||||
|
let snapshot = StorageManager
|
||||||
|
.snapshot_as_json(glean.storage(), &store_name, true)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
json!({"text": {"telemetry.text_metric": "test_text_value"}}),
|
||||||
|
snapshot
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn long_text_values_are_truncated() {
|
||||||
|
let (glean, _t) = new_glean(None);
|
||||||
|
|
||||||
|
let metric = TextMetric::new(CommonMetricData {
|
||||||
|
name: "text_metric".into(),
|
||||||
|
category: "telemetry".into(),
|
||||||
|
send_in_pings: vec!["store1".into()],
|
||||||
|
disabled: false,
|
||||||
|
lifetime: Lifetime::Ping,
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
|
||||||
|
let test_sting = "01234567890".repeat(200 * 1024);
|
||||||
|
metric.set_sync(&glean, test_sting.clone());
|
||||||
|
|
||||||
|
// Check that data was truncated
|
||||||
|
assert_eq!(
|
||||||
|
test_sting[..(200 * 1024)],
|
||||||
|
metric.get_value(&glean, "store1").unwrap()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Make sure that the errors have been recorded
|
||||||
|
assert_eq!(
|
||||||
|
Ok(1),
|
||||||
|
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||||
|
);
|
||||||
|
}
|
|
@ -1 +1 @@
|
||||||
{"files":{"Cargo.toml":"35377575513ab7eda34c4e4ed92d714674a6a053720770392302bb2b9e227f04","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"fd9e0ca6907917ea6bec5de05e15dd21d20fae1cb7f3250467bb20231a8e1065","src/common_test.rs":"68f6d408cb7b683fa32c8b38a4df1e6c45bfd77c0c90ca35976ea7548bbc4b2f","src/configuration.rs":"37ad5b3e7d4e31dd04a7d6690179168b5f2768d87dd36056dee5d08bdbe20fb2","src/core_metrics.rs":"76ac5350cb6f82d9a193d519b085a08f138dceba77da3514bd0c636bcdefefca","src/lib.rs":"1f49d9414a4ea1624a124b4b7c7b9704d01899669fcf792df3eef467bf449912","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"86cbcb0b46f9d13923a20db9e482b65da49d7daa4e335a3f3092f1d760f572b0","src/private/event.rs":"f6cd799c7764c53510180a1cef6a5a9b435fae27b87270519d5b4e59201e8ecc","src/private/mod.rs":"33b644527ab5f362b4bc511cdf66260d689100286dbcf53d1f8842ca5abd23f1","src/private/ping.rs":"cbdc57f41fc9d46e56b4dfff91ac683753d1f8b3ecd0aa9bc3419e3595b8b81b","src/system.rs":"ff23a5b94f52dab484342dfed702412bc29ab1bbfd5af326033d8e07e7b9075f","src/test.rs":"30d62d967c56a7ca76c097e27bfb6d6d3779ccd5d374cf5a07a04216e4e0880b","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":"ea3a101f9b9ccffbbcb7fe5159aabc22f7a5b8a266a9a810abff92ffe4b7bfc1"}
|
{"files":{"Cargo.toml":"0b561e6268bc36b36c8c29d82fde25a451bd8fb7d618efa2145255033616a73b","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":"86cbcb0b46f9d13923a20db9e482b65da49d7daa4e335a3f3092f1d760f572b0","src/private/event.rs":"f6cd799c7764c53510180a1cef6a5a9b435fae27b87270519d5b4e59201e8ecc","src/private/mod.rs":"0364ecf5f0439443a5b209583f4ff2c474b79f7c253c981ab0b7cdc528368698","src/private/ping.rs":"cbdc57f41fc9d46e56b4dfff91ac683753d1f8b3ecd0aa9bc3419e3595b8b81b","src/system.rs":"ff23a5b94f52dab484342dfed702412bc29ab1bbfd5af326033d8e07e7b9075f","src/test.rs":"30d62d967c56a7ca76c097e27bfb6d6d3779ccd5d374cf5a07a04216e4e0880b","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":"0857be0c251ae1fc3b5672237c99f5115a6546cd8b171cb240173098ab5e9629"}
|
|
@ -12,7 +12,7 @@
|
||||||
[package]
|
[package]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "50.0.1"
|
version = "50.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>",
|
||||||
|
@ -41,7 +41,7 @@ features = ["serde"]
|
||||||
version = "0.5"
|
version = "0.5"
|
||||||
|
|
||||||
[dependencies.glean-core]
|
[dependencies.glean-core]
|
||||||
version = "50.0.1"
|
version = "50.1.0"
|
||||||
|
|
||||||
[dependencies.inherent]
|
[dependencies.inherent]
|
||||||
version = "1"
|
version = "1"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# glean
|
# Glean
|
||||||
|
|
||||||
The `Glean SDK` is a modern approach for a Telemetry library and is part of the [Glean project](https://docs.telemetry.mozilla.org/concepts/glean/glean.html).
|
The `Glean SDK` is a modern approach for a Telemetry library and is part of the [Glean project](https://docs.telemetry.mozilla.org/concepts/glean/glean.html).
|
||||||
|
|
||||||
|
@ -6,8 +6,6 @@ The `Glean SDK` is a modern approach for a Telemetry library and is part of the
|
||||||
|
|
||||||
This library provides a Rust language bindings on top of `glean-core`, targeted to Rust consumers.
|
This library provides a Rust language bindings on top of `glean-core`, targeted to Rust consumers.
|
||||||
|
|
||||||
**Note: `glean` is currently under development and not yet ready for use.**
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
All documentation is available online:
|
All documentation is available online:
|
||||||
|
@ -16,7 +14,7 @@ All documentation is available online:
|
||||||
* [API documentation][apidocs]
|
* [API documentation][apidocs]
|
||||||
|
|
||||||
[book]: https://mozilla.github.io/glean/
|
[book]: https://mozilla.github.io/glean/
|
||||||
[apidocs]: https://mozilla.github.io/glean/docs/glean_preview/index.html
|
[apidocs]: https://mozilla.github.io/glean/docs/glean/index.html
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
|
|
|
@ -128,21 +128,6 @@ pub fn shutdown() {
|
||||||
glean_core::shutdown()
|
glean_core::shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Unblock the global dispatcher to start processing queued tasks.
|
|
||||||
///
|
|
||||||
/// This should _only_ be called if it is guaranteed that `initialize` will never be called.
|
|
||||||
///
|
|
||||||
/// **Note**: Exported as a FFI function to be used by other language bindings (e.g. Kotlin/Swift)
|
|
||||||
/// to unblock the RLB-internal dispatcher.
|
|
||||||
/// This allows the usage of both the RLB and other language bindings (e.g. Kotlin/Swift)
|
|
||||||
/// within the same application.
|
|
||||||
#[no_mangle]
|
|
||||||
#[inline(never)]
|
|
||||||
pub extern "C" fn rlb_flush_dispatcher() {
|
|
||||||
log::trace!("FLushing RLB dispatcher through the FFI");
|
|
||||||
glean_core::rlb_flush_dispatcher()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Sets whether upload is enabled or not.
|
/// Sets whether upload is enabled or not.
|
||||||
///
|
///
|
||||||
/// See [`glean_core::Glean::set_upload_enabled`].
|
/// See [`glean_core::Glean::set_upload_enabled`].
|
||||||
|
|
|
@ -26,3 +26,9 @@ pub use glean_core::UuidMetric;
|
||||||
pub use glean_core::{AllowLabeled, LabeledMetric};
|
pub use glean_core::{AllowLabeled, LabeledMetric};
|
||||||
pub use glean_core::{Datetime, DatetimeMetric};
|
pub use glean_core::{Datetime, DatetimeMetric};
|
||||||
pub use ping::PingType;
|
pub use ping::PingType;
|
||||||
|
|
||||||
|
// Re-export types that are used by the glean_parser-generated code.
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub mod __export {
|
||||||
|
pub use once_cell::sync::Lazy;
|
||||||
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ edition = "2018"
|
||||||
license = "MPL-2.0"
|
license = "MPL-2.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
glean = { version = "50.0.1", features = ["rkv-safe-mode"] }
|
glean = { version = "50.1.0", features = ["rkv-safe-mode"] }
|
||||||
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 = "50.0.1"
|
glean = "50.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 }
|
||||||
|
|
Загрузка…
Ссылка в новой задаче