Backed out 4 changesets (bug 1955429) for causing xpc failures. CLOSED TREE
Backed out changeset 8793ee7ac873 (bug 1955429) Backed out changeset e1cf811b7274 (bug 1955429) Backed out changeset 79bf1547f82b (bug 1955429) Backed out changeset c451dfbfb59f (bug 1955429)
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@@ -2581,9 +2581,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95024f4707705270208e36983976cbac235dd7fc33c9f1cb0dee396ec1ce295d"
|
checksum = "251b9cb685554b96dcf785dba69ce90447006dd6d9229db783336c981c3777e1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"glean-core",
|
"glean-core",
|
||||||
@@ -2595,9 +2595,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5ca0df94fb37669287b77e8aa300913ad1d14426d7f9e443b0ce1185349c817e"
|
checksum = "a49d1d62648ddeed8cb996373046ea45de93f1d1ff956aba054b9304bc305753"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_logger",
|
"android_logger",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ uniffi_bindgen = "0.29.1"
|
|||||||
# Shared across multiple application-services consumers.
|
# Shared across multiple application-services consumers.
|
||||||
rusqlite = "0.31.0"
|
rusqlite = "0.31.0"
|
||||||
# Shared across multiple glean consumers.
|
# Shared across multiple glean consumers.
|
||||||
glean = "=64.1.1"
|
glean = "=64.0.1"
|
||||||
|
|
||||||
# Explicitly specify what our profiles use. The opt-level setting here is
|
# Explicitly specify what our profiles use. The opt-level setting here is
|
||||||
# a total fiction; see the setup of MOZ_RUST_DEFAULT_FLAGS for what the
|
# a total fiction; see the setup of MOZ_RUST_DEFAULT_FLAGS for what the
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
# 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 http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
# Adding a new metric? We have docs for that!
|
|
||||||
# https://firefox-source-docs.mozilla.org/toolkit/components/glean/user/new_definitions_file.html
|
|
||||||
|
|
||||||
---
|
|
||||||
$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0
|
|
||||||
$tags:
|
|
||||||
- 'Toolkit :: Telemetry'
|
|
||||||
|
|
||||||
glean.attribution:
|
|
||||||
ext:
|
|
||||||
type: object
|
|
||||||
lifetime: user
|
|
||||||
# Permit long description lines
|
|
||||||
# yamllint disable
|
|
||||||
description: |
|
|
||||||
Extended attribution information.
|
|
||||||
Mapped to client_info.attribution.ext in datasets.
|
|
||||||
* `experiment`: name/id of the enrolled funnel experiment
|
|
||||||
* `variation`: name/id of the variation cohort used in the enrolled funnel experiment
|
|
||||||
* `ua`: identifier derived from the user agent downloading the installer
|
|
||||||
e.g. chrome, Google Chrome 123
|
|
||||||
* `dltoken`: Unique token created at Firefox download time.
|
|
||||||
e.g. c18f86a3-f228-4d98-91bb-f90135c0aa9c
|
|
||||||
* `msstoresignedin`: only present if the installation was done through the Microsoft Store,
|
|
||||||
and was able to retrieve the "campaign ID" it was first installed with.
|
|
||||||
This value is "true" if the user was signed into the Microsoft Store
|
|
||||||
when they first installed, and false otherwise.
|
|
||||||
* `dlsource`: identifier that indicate where installations of Firefox originate
|
|
||||||
# yamllint enable
|
|
||||||
bugs:
|
|
||||||
- https://bugzilla.mozilla.org/1955429
|
|
||||||
data_reviews:
|
|
||||||
- https://bugzilla.mozilla.org/1955429
|
|
||||||
notification_emails:
|
|
||||||
- chutten@mozilla.com
|
|
||||||
send_in_pings:
|
|
||||||
- metrics
|
|
||||||
- baseline
|
|
||||||
- events
|
|
||||||
expires: never
|
|
||||||
no_lint:
|
|
||||||
- BASELINE_PING
|
|
||||||
structure:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
experiment:
|
|
||||||
type: string
|
|
||||||
variation:
|
|
||||||
type: string
|
|
||||||
ua:
|
|
||||||
type: string
|
|
||||||
dltoken:
|
|
||||||
type: string
|
|
||||||
msstoresignedin:
|
|
||||||
type: boolean
|
|
||||||
dlsource:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
glean.distribution:
|
|
||||||
ext:
|
|
||||||
type: object
|
|
||||||
lifetime: user
|
|
||||||
description: |
|
|
||||||
Extended distribution information.
|
|
||||||
Mapped to client_info.distribution.ext in datasets.
|
|
||||||
* `distributionVersion`: pref `distribution.version`, `null` on failure
|
|
||||||
* `partnerId`: pref `mozilla.partner.id`, `null` on failure
|
|
||||||
* `distributor`: pref `app.distributor`, `null` on failure
|
|
||||||
* `distributorChannel`: pref `app.distributor.channel`, `null` on failure
|
|
||||||
* `partnerNames`: list from prefs `app.partner.<name>=<name>`
|
|
||||||
bugs:
|
|
||||||
- https://bugzilla.mozilla.org/1955429
|
|
||||||
data_reviews:
|
|
||||||
- https://bugzilla.mozilla.org/1955429
|
|
||||||
notification_emails:
|
|
||||||
- chutten@mozilla.com
|
|
||||||
send_in_pings:
|
|
||||||
- metrics
|
|
||||||
- baseline
|
|
||||||
- events
|
|
||||||
expires: never
|
|
||||||
no_lint:
|
|
||||||
- BASELINE_PING
|
|
||||||
structure:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
distributionVersion:
|
|
||||||
type: string
|
|
||||||
partnerId:
|
|
||||||
type: string
|
|
||||||
distributor:
|
|
||||||
type: string
|
|
||||||
distributorChannel:
|
|
||||||
type: string
|
|
||||||
partnerNames:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
8
gfx/wr/Cargo.lock
generated
8
gfx/wr/Cargo.lock
generated
@@ -982,9 +982,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95024f4707705270208e36983976cbac235dd7fc33c9f1cb0dee396ec1ce295d"
|
checksum = "251b9cb685554b96dcf785dba69ce90447006dd6d9229db783336c981c3777e1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"glean-core",
|
"glean-core",
|
||||||
@@ -996,9 +996,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5ca0df94fb37669287b77e8aa300913ad1d14426d7f9e443b0ce1185349c817e"
|
checksum = "a49d1d62648ddeed8cb996373046ea45de93f1d1ff956aba054b9304bc305753"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_logger",
|
"android_logger",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ members = [
|
|||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
glean = "=64.1.1"
|
glean = "=64.0.1"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
debug = true
|
debug = true
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ serialization = "1.8.1"
|
|||||||
|
|
||||||
# Mozilla versions
|
# Mozilla versions
|
||||||
apilint = "0.5.4"
|
apilint = "0.5.4"
|
||||||
mozilla-glean = "64.1.1"
|
mozilla-glean = "64.0.1"
|
||||||
|
|
||||||
# Testing versions
|
# Testing versions
|
||||||
androidx-test = "1.6.1"
|
androidx-test = "1.6.1"
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ vendored:third_party/python/wheel
|
|||||||
vendored:third_party/python/zipp
|
vendored:third_party/python/zipp
|
||||||
# glean-sdk may not be installable if a wheel isn't available
|
# glean-sdk may not be installable if a wheel isn't available
|
||||||
# and it has to be built from source.
|
# and it has to be built from source.
|
||||||
pypi-optional:glean-sdk==64.1.1:telemetry will not be collected
|
pypi-optional:glean-sdk==64.0.1: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).
|
||||||
|
|||||||
@@ -3690,6 +3690,16 @@ who = "Erich Gubler <erichdongubler@gmail.com>"
|
|||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
delta = "23.1.0 -> 24.0.0"
|
delta = "23.1.0 -> 24.0.0"
|
||||||
|
|
||||||
|
[[audits.naga]]
|
||||||
|
who = [
|
||||||
|
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
|
||||||
|
"Erich Gubler <erichdongubler@gmail.com>",
|
||||||
|
"Jim Blandy <jimb@red-bean.com>",
|
||||||
|
]
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "24.0.0 -> 24.0.0@git:a0dbe5ebc6fa24422fb84b2e0fea1cc94dee5109"
|
||||||
|
importable = false
|
||||||
|
|
||||||
[[audits.naga]]
|
[[audits.naga]]
|
||||||
who = "Erich Gubler <erichdongubler@gmail.com>"
|
who = "Erich Gubler <erichdongubler@gmail.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
@@ -5956,6 +5966,16 @@ who = "Erich Gubler <erichdongubler@gmail.com>"
|
|||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
delta = "23.0.1 -> 24.0.0"
|
delta = "23.0.1 -> 24.0.0"
|
||||||
|
|
||||||
|
[[audits.wgpu-core]]
|
||||||
|
who = [
|
||||||
|
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
|
||||||
|
"Erich Gubler <erichdongubler@gmail.com>",
|
||||||
|
"Jim Blandy <jimb@red-bean.com>",
|
||||||
|
]
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "24.0.0 -> 24.0.0@git:a0dbe5ebc6fa24422fb84b2e0fea1cc94dee5109"
|
||||||
|
importable = false
|
||||||
|
|
||||||
[[audits.wgpu-core]]
|
[[audits.wgpu-core]]
|
||||||
who = "Erich Gubler <erichdongubler@gmail.com>"
|
who = "Erich Gubler <erichdongubler@gmail.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
@@ -6067,6 +6087,16 @@ who = "Erich Gubler <erichdongubler@gmail.com>"
|
|||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
delta = "23.0.1 -> 24.0.0"
|
delta = "23.0.1 -> 24.0.0"
|
||||||
|
|
||||||
|
[[audits.wgpu-hal]]
|
||||||
|
who = [
|
||||||
|
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
|
||||||
|
"Erich Gubler <erichdongubler@gmail.com>",
|
||||||
|
"Jim Blandy <jimb@red-bean.com>",
|
||||||
|
]
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "24.0.0 -> 24.0.0@git:a0dbe5ebc6fa24422fb84b2e0fea1cc94dee5109"
|
||||||
|
importable = false
|
||||||
|
|
||||||
[[audits.wgpu-hal]]
|
[[audits.wgpu-hal]]
|
||||||
who = "Erich Gubler <erichdongubler@gmail.com>"
|
who = "Erich Gubler <erichdongubler@gmail.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
@@ -6151,6 +6181,16 @@ who = "Erich Gubler <erichdongubler@gmail.com>"
|
|||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
delta = "23.0.0 -> 24.0.0"
|
delta = "23.0.0 -> 24.0.0"
|
||||||
|
|
||||||
|
[[audits.wgpu-types]]
|
||||||
|
who = [
|
||||||
|
"Teodor Tanasoaia <ttanasoaia@mozilla.com>",
|
||||||
|
"Erich Gubler <erichdongubler@gmail.com>",
|
||||||
|
"Jim Blandy <jimb@red-bean.com>",
|
||||||
|
]
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "24.0.0 -> 24.0.0@git:a0dbe5ebc6fa24422fb84b2e0fea1cc94dee5109"
|
||||||
|
importable = false
|
||||||
|
|
||||||
[[audits.wgpu-types]]
|
[[audits.wgpu-types]]
|
||||||
who = "Erich Gubler <erichdongubler@gmail.com>"
|
who = "Erich Gubler <erichdongubler@gmail.com>"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
|
|||||||
@@ -289,6 +289,10 @@ notes = "Local override of the crates.io crate that uses a non-vendored local co
|
|||||||
[policy.wr_malloc_size_of]
|
[policy.wr_malloc_size_of]
|
||||||
audit-as-crates-io = false
|
audit-as-crates-io = false
|
||||||
|
|
||||||
|
[[exemptions.ahash]]
|
||||||
|
version = "0.7.6"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
|
||||||
[[exemptions.alsa]]
|
[[exemptions.alsa]]
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
criteria = "safe-to-deploy"
|
criteria = "safe-to-deploy"
|
||||||
|
|||||||
@@ -258,15 +258,15 @@ user-login = "jrmuizel"
|
|||||||
user-name = "Jeff Muizelaar"
|
user-name = "Jeff Muizelaar"
|
||||||
|
|
||||||
[[publisher.glean]]
|
[[publisher.glean]]
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
when = "2025-04-10"
|
when = "2025-04-01"
|
||||||
user-id = 48
|
user-id = 48
|
||||||
user-login = "badboy"
|
user-login = "badboy"
|
||||||
user-name = "Jan-Erik Rediger"
|
user-name = "Jan-Erik Rediger"
|
||||||
|
|
||||||
[[publisher.glean-core]]
|
[[publisher.glean-core]]
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
when = "2025-04-10"
|
when = "2025-04-01"
|
||||||
user-id = 48
|
user-id = 48
|
||||||
user-login = "badboy"
|
user-login = "badboy"
|
||||||
user-name = "Jan-Erik Rediger"
|
user-name = "Jan-Erik Rediger"
|
||||||
@@ -970,6 +970,20 @@ criteria = "safe-to-deploy"
|
|||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
notes = "This is a small crate which forbids unsafe code and is a straightforward implementation of the adler hashing algorithm."
|
notes = "This is a small crate which forbids unsafe code and is a straightforward implementation of the adler hashing algorithm."
|
||||||
|
|
||||||
|
[[audits.bytecode-alliance.audits.ahash]]
|
||||||
|
who = "Chris Fallin <chris@cfallin.org>"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "0.7.6 -> 0.8.2"
|
||||||
|
|
||||||
|
[[audits.bytecode-alliance.audits.ahash]]
|
||||||
|
who = "Alex Crichton <alex@alexcrichton.com>"
|
||||||
|
criteria = "safe-to-deploy"
|
||||||
|
delta = "0.8.2 -> 0.8.7"
|
||||||
|
notes = """
|
||||||
|
Shuffling of features in this update and while there are updates to `unsafe`
|
||||||
|
code it's no different than before and the usage remains the same.
|
||||||
|
"""
|
||||||
|
|
||||||
[[audits.bytecode-alliance.audits.allocator-api2]]
|
[[audits.bytecode-alliance.audits.allocator-api2]]
|
||||||
who = "Chris Fallin <chris@cfallin.org>"
|
who = "Chris Fallin <chris@cfallin.org>"
|
||||||
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: 17.1.0
|
Version: 17.0.1
|
||||||
Summary: Parser tools for Mozilla's Glean telemetry
|
Summary: Parser tools for Mozilla's Glean telemetry
|
||||||
Home-page: https://github.com/mozilla/glean_parser
|
Home-page: https://github.com/mozilla/glean_parser
|
||||||
Author: The Glean Team
|
Author: The Glean Team
|
||||||
@@ -79,10 +79,6 @@ $ glean_parser check < ping.json
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
## 17.1.0
|
|
||||||
|
|
||||||
- Permit object metrics named 'glean.attribution.ext' or 'glean.distribution.ext' even if allow_reserved is false ([bug 1955428](https://bugzilla.mozilla.org/show_bug.cgi?id=1955428))
|
|
||||||
|
|
||||||
## 17.0.1
|
## 17.0.1
|
||||||
|
|
||||||
- BUGFIX: Fix missing `ping_arg` "`uploader_capabilities`" in util.py ([#786](https://github.com/mozilla/glean_parser/pull/786))
|
- BUGFIX: Fix missing `ping_arg` "`uploader_capabilities`" in util.py ([#786](https://github.com/mozilla/glean_parser/pull/786))
|
||||||
@@ -6,10 +6,10 @@ glean_parser/go_server.py,sha256=NOx66OpNDVIos6n3ejoJeFM5Dk4u7E3u86XV2G54tww,558
|
|||||||
glean_parser/javascript.py,sha256=w4ZhNBHBKWYk0h3t7G0Ud2tR__hRqzn9dlEXNKLdQrA,11230
|
glean_parser/javascript.py,sha256=w4ZhNBHBKWYk0h3t7G0Ud2tR__hRqzn9dlEXNKLdQrA,11230
|
||||||
glean_parser/javascript_server.py,sha256=BJpVFuKG3tKFP0_xVyrR9Pn0UrvhumObCEgLeE0Lxhk,9028
|
glean_parser/javascript_server.py,sha256=BJpVFuKG3tKFP0_xVyrR9Pn0UrvhumObCEgLeE0Lxhk,9028
|
||||||
glean_parser/kotlin.py,sha256=X2YNmx4boQ6Yb5CPoCIyRFDADrXPKIcIC-AyjkaSLtM,9519
|
glean_parser/kotlin.py,sha256=X2YNmx4boQ6Yb5CPoCIyRFDADrXPKIcIC-AyjkaSLtM,9519
|
||||||
glean_parser/lint.py,sha256=XqNsb_Km6I1AlAdJuIcaoykoL7bGPXTQoz62icIPHNY,20827
|
glean_parser/lint.py,sha256=ktdkR2GjR0wuR4IpLTiZ-q17vI4dk_Nebp4XU3pqzsk,21103
|
||||||
glean_parser/markdown.py,sha256=GkCr1CrV6mnRQseT6FO1-JJ7Eup8X3lxUfRMBTxXpe4,9066
|
glean_parser/markdown.py,sha256=GkCr1CrV6mnRQseT6FO1-JJ7Eup8X3lxUfRMBTxXpe4,9066
|
||||||
glean_parser/metrics.py,sha256=3_ERPI63CsH_QvXVKNBVKIQTv4KWir2SfSbtn6J8a9Q,15842
|
glean_parser/metrics.py,sha256=3_ERPI63CsH_QvXVKNBVKIQTv4KWir2SfSbtn6J8a9Q,15842
|
||||||
glean_parser/parser.py,sha256=IsDMTOLpt_H5GRPXX3G0HQdjeRIPeYFs3TGpVjH1ubA,19383
|
glean_parser/parser.py,sha256=3bJwUGYhnzIHYJ7UBdO63Oi0_n1_Twvr2IOUUe_koME,18132
|
||||||
glean_parser/pings.py,sha256=l4hKmnKigS46vlHFI4aWueKVHcZQL36QfhK0VC8OiFA,3924
|
glean_parser/pings.py,sha256=l4hKmnKigS46vlHFI4aWueKVHcZQL36QfhK0VC8OiFA,3924
|
||||||
glean_parser/python_server.py,sha256=ERpYcbSwF19xKFagxX0mZAvlR1y6D7Ah5DSvW8LipCY,4791
|
glean_parser/python_server.py,sha256=ERpYcbSwF19xKFagxX0mZAvlR1y6D7Ah5DSvW8LipCY,4791
|
||||||
glean_parser/ruby_server.py,sha256=e5lkfcLQAUMUBQDCjqNU82LkdUzT5x-G6HOnsUInbsU,5190
|
glean_parser/ruby_server.py,sha256=e5lkfcLQAUMUBQDCjqNU82LkdUzT5x-G6HOnsUInbsU,5190
|
||||||
@@ -22,7 +22,7 @@ glean_parser/translation_options.py,sha256=Lxzr6G7MP0tC_ZYlZXftS4j0SLiqO-5mGVTEc
|
|||||||
glean_parser/util.py,sha256=yTx_-Q8w8rNNSZ_xbno0B90WR7pZZptG2bUWU0sCHZk,16580
|
glean_parser/util.py,sha256=yTx_-Q8w8rNNSZ_xbno0B90WR7pZZptG2bUWU0sCHZk,16580
|
||||||
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=7BrN0qON_j8x9xm4TubGOluViGTG-gIqPyEmYPtKgf4,26716
|
glean_parser/schemas/metrics.2-0-0.schema.yaml,sha256=ieFMxezBuySCvUorx8eGqXRUcoeTql4Z9FxkbkG9XFQ,26715
|
||||||
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=FQBsEt8Eg_ypBUnhJ1THZWXIgtuiYfyXcp_J9pGJUnE,7001
|
glean_parser/schemas/pings.2-0-0.schema.yaml,sha256=FQBsEt8Eg_ypBUnhJ1THZWXIgtuiYfyXcp_J9pGJUnE,7001
|
||||||
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
|
||||||
@@ -40,10 +40,10 @@ glean_parser/templates/ruby_server.jinja2,sha256=B0pbuld3j_0s7uMjoaCo8_6ehJUZeTX
|
|||||||
glean_parser/templates/rust.jinja2,sha256=hX8p5HXQNEeVz_sF6SDIyUNus6CcaCG9KWLl6uQLiOU,7285
|
glean_parser/templates/rust.jinja2,sha256=hX8p5HXQNEeVz_sF6SDIyUNus6CcaCG9KWLl6uQLiOU,7285
|
||||||
glean_parser/templates/rust_server.jinja2,sha256=JJdeU5jiWx9aWpF0qiXIYztJ14OQKxV3VFdAbCrtR_0,12841
|
glean_parser/templates/rust_server.jinja2,sha256=JJdeU5jiWx9aWpF0qiXIYztJ14OQKxV3VFdAbCrtR_0,12841
|
||||||
glean_parser/templates/swift.jinja2,sha256=L_JpwGLVzmOf1FYLoCzFu_RnGTExCIDup7iR1tWzD3o,6912
|
glean_parser/templates/swift.jinja2,sha256=L_JpwGLVzmOf1FYLoCzFu_RnGTExCIDup7iR1tWzD3o,6912
|
||||||
glean_parser-17.1.0.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
|
glean_parser-17.0.1.dist-info/AUTHORS.md,sha256=yxgj8MioO4wUnrh0gmfb8l3DJJrf-l4HmmEDbQsbbNI,455
|
||||||
glean_parser-17.1.0.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
glean_parser-17.0.1.dist-info/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
||||||
glean_parser-17.1.0.dist-info/METADATA,sha256=8JtbrOR7bidnVKiBahDVVmNSQj1cLb-wyKicTA2U4hw,36957
|
glean_parser-17.0.1.dist-info/METADATA,sha256=fX3p807Z0tgo8pjTGNX4Fxw3gPXT6dJrW_Cw7lnAE_4,36761
|
||||||
glean_parser-17.1.0.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
glean_parser-17.0.1.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
||||||
glean_parser-17.1.0.dist-info/entry_points.txt,sha256=mf9d3sv8BwSjjR58x9KDnpVkONCnv3fPQC2NjJl15Xg,68
|
glean_parser-17.0.1.dist-info/entry_points.txt,sha256=mf9d3sv8BwSjjR58x9KDnpVkONCnv3fPQC2NjJl15Xg,68
|
||||||
glean_parser-17.1.0.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
|
glean_parser-17.0.1.dist-info/top_level.txt,sha256=q7T3duD-9tYZFyDry6Wv2LcdMsK2jGnzdDFhxWcT2Z8,13
|
||||||
glean_parser-17.1.0.dist-info/RECORD,,
|
glean_parser-17.0.1.dist-info/RECORD,,
|
||||||
@@ -134,6 +134,7 @@ def check_unit_in_name(
|
|||||||
|
|
||||||
time_unit = getattr(metric, "time_unit", None)
|
time_unit = getattr(metric, "time_unit", None)
|
||||||
memory_unit = getattr(metric, "memory_unit", None)
|
memory_unit = getattr(metric, "memory_unit", None)
|
||||||
|
unit = getattr(metric, "unit", None)
|
||||||
|
|
||||||
if time_unit is not None:
|
if time_unit is not None:
|
||||||
if (
|
if (
|
||||||
@@ -174,6 +175,14 @@ def check_unit_in_name(
|
|||||||
"Confirm the unit is correct and only include memory_unit."
|
"Confirm the unit is correct and only include memory_unit."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
elif unit is not None:
|
||||||
|
if unit_in_name == unit:
|
||||||
|
yield (
|
||||||
|
f"Suffix '{unit_in_name}' is redundant with unit param "
|
||||||
|
f"'{unit}'. "
|
||||||
|
"Only include unit."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def check_category_generic(
|
def check_category_generic(
|
||||||
category_name: str, metrics: Iterable[metrics.Metric]
|
category_name: str, metrics: Iterable[metrics.Metric]
|
||||||
|
|||||||
@@ -188,32 +188,19 @@ def _instantiate_metrics(
|
|||||||
if category_key == "no_lint":
|
if category_key == "no_lint":
|
||||||
continue
|
continue
|
||||||
if not config.get("allow_reserved") and category_key.split(".")[0] == "glean":
|
if not config.get("allow_reserved") and category_key.split(".")[0] == "glean":
|
||||||
if category_key not in ("glean.attribution", "glean.distribution"):
|
yield util.format_error(
|
||||||
yield util.format_error(
|
filepath,
|
||||||
filepath,
|
f"For category '{category_key}'",
|
||||||
f"For category '{category_key}'",
|
"Categories beginning with 'glean' are reserved for "
|
||||||
"Categories beginning with 'glean' are reserved for "
|
"Glean internal use.",
|
||||||
"Glean internal use.",
|
)
|
||||||
)
|
continue
|
||||||
continue
|
|
||||||
all_objects.setdefault(category_key, DictWrapper())
|
all_objects.setdefault(category_key, DictWrapper())
|
||||||
|
|
||||||
if not isinstance(category_val, dict):
|
if not isinstance(category_val, dict):
|
||||||
raise TypeError(f"Invalid content for {category_key}")
|
raise TypeError(f"Invalid content for {category_key}")
|
||||||
|
|
||||||
for metric_key, metric_val in sorted(category_val.items()):
|
for metric_key, metric_val in sorted(category_val.items()):
|
||||||
if (
|
|
||||||
not config.get("allow_reserved")
|
|
||||||
and category_key in ("glean.attribution", "glean.distribution")
|
|
||||||
and metric_key != "ext"
|
|
||||||
):
|
|
||||||
yield util.format_error(
|
|
||||||
filepath,
|
|
||||||
f"For {category_key}.{metric_key}",
|
|
||||||
f"May only use semi-reserved category {category_key} with metric name 'ext'",
|
|
||||||
metric_val.defined_in["line"],
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
try:
|
try:
|
||||||
metric_obj = Metric.make_metric(
|
metric_obj = Metric.make_metric(
|
||||||
category_key, metric_key, metric_val, validated=True, config=config
|
category_key, metric_key, metric_val, validated=True, config=config
|
||||||
@@ -227,28 +214,18 @@ def _instantiate_metrics(
|
|||||||
)
|
)
|
||||||
metric_obj = None
|
metric_obj = None
|
||||||
else:
|
else:
|
||||||
if not config.get("allow_reserved"):
|
if (
|
||||||
if "all-pings" in metric_obj.send_in_pings:
|
not config.get("allow_reserved")
|
||||||
yield util.format_error(
|
and "all-pings" in metric_obj.send_in_pings
|
||||||
filepath,
|
):
|
||||||
f"On instance {category_key}.{metric_key}",
|
yield util.format_error(
|
||||||
'Only internal metrics may specify "all-pings" '
|
filepath,
|
||||||
'in "send_in_pings"',
|
f"On instance {category_key}.{metric_key}",
|
||||||
metric_val.defined_in["line"],
|
'Only internal metrics may specify "all-pings" '
|
||||||
)
|
'in "send_in_pings"',
|
||||||
metric_obj = None
|
metric_val.defined_in["line"],
|
||||||
elif (
|
)
|
||||||
metric_obj.identifier()
|
metric_obj = None
|
||||||
in ("glean.attribution.ext", "glean.distribution.ext")
|
|
||||||
and metric_obj.type != "object"
|
|
||||||
):
|
|
||||||
yield util.format_error(
|
|
||||||
filepath,
|
|
||||||
f"On instance {category_key}.{metric_key}",
|
|
||||||
"Extended attribution/distribution metrics must be of type 'object'",
|
|
||||||
metric_val.defined_in["line"],
|
|
||||||
)
|
|
||||||
metric_obj = None
|
|
||||||
|
|
||||||
if metric_obj is not None:
|
if metric_obj is not None:
|
||||||
metric_obj.no_lint = sorted(set(metric_obj.no_lint + global_no_lint))
|
metric_obj.no_lint = sorted(set(metric_obj.no_lint + global_no_lint))
|
||||||
@@ -504,16 +481,16 @@ def parse_objects(
|
|||||||
raise TypeError(f"Invalid content for {filepath}")
|
raise TypeError(f"Invalid content for {filepath}")
|
||||||
|
|
||||||
for category_key, category_val in sorted(content.items()):
|
for category_key, category_val in sorted(content.items()):
|
||||||
if category_key.startswith("$"):
|
if category_key.startswith("$"):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
interesting_metrics_dict.setdefault(category_key, DictWrapper())
|
interesting_metrics_dict.setdefault(category_key, DictWrapper())
|
||||||
|
|
||||||
if not isinstance(category_val, dict):
|
if not isinstance(category_val, dict):
|
||||||
raise TypeError(f"Invalid category_val for {category_key}")
|
raise TypeError(f"Invalid category_val for {category_key}")
|
||||||
|
|
||||||
for metric_key, metric_val in sorted(category_val.items()):
|
for metric_key, metric_val in sorted(category_val.items()):
|
||||||
interesting_metrics_dict[category_key][metric_key] = metric_val
|
interesting_metrics_dict[category_key][metric_key] = metric_val
|
||||||
|
|
||||||
for category_key, category_val in all_objects.items():
|
for category_key, category_val in all_objects.items():
|
||||||
if category_key == "tags":
|
if category_key == "tags":
|
||||||
|
|||||||
@@ -565,7 +565,7 @@ definitions:
|
|||||||
Use is limited to Firefox Desktop only.
|
Use is limited to Firefox Desktop only.
|
||||||
Has no effect when used with non-FOG outputters.
|
Has no effect when used with non-FOG outputters.
|
||||||
See FOG's documentation on mirroring for details -
|
See FOG's documentation on mirroring for details -
|
||||||
https://firefox-source-docs.mozilla.org/toolkit/components/glean/user/gifft.html
|
https://firefox-source-docs.mozilla.org/toolkit/components/glean/mirroring.html
|
||||||
type: string
|
type: string
|
||||||
minLength: 6
|
minLength: 6
|
||||||
|
|
||||||
|
|||||||
2
third_party/python/pyproject.toml
vendored
2
third_party/python/pyproject.toml
vendored
@@ -21,7 +21,7 @@ dependencies = [
|
|||||||
"filelock~=3.6",
|
"filelock~=3.6",
|
||||||
"fluent-migrate==0.13.2",
|
"fluent-migrate==0.13.2",
|
||||||
"fluent-syntax==0.19.0",
|
"fluent-syntax==0.19.0",
|
||||||
"glean-parser==17.1.0",
|
"glean-parser==17.0.1",
|
||||||
"importlib-metadata==6.0.0",
|
"importlib-metadata==6.0.0",
|
||||||
# Required for compatibility with Flask >= 2 in tools/tryselect/selectors/chooser
|
# Required for compatibility with Flask >= 2 in tools/tryselect/selectors/chooser
|
||||||
"jinja2==3.1.2",
|
"jinja2==3.1.2",
|
||||||
|
|||||||
6
third_party/python/requirements.txt
vendored
6
third_party/python/requirements.txt
vendored
@@ -358,9 +358,9 @@ gitignorant==0.3.1 \
|
|||||||
giturlparse==0.12.0 \
|
giturlparse==0.12.0 \
|
||||||
--hash=sha256:c0fff7c21acc435491b1779566e038757a205c1ffdcb47e4f81ea52ad8c3859a \
|
--hash=sha256:c0fff7c21acc435491b1779566e038757a205c1ffdcb47e4f81ea52ad8c3859a \
|
||||||
--hash=sha256:412b74f2855f1da2fefa89fd8dde62df48476077a72fc19b62039554d27360eb
|
--hash=sha256:412b74f2855f1da2fefa89fd8dde62df48476077a72fc19b62039554d27360eb
|
||||||
glean-parser==17.1.0 \
|
glean-parser==17.0.1 \
|
||||||
--hash=sha256:a59ab66dd734a8bea7d7a2cb632276602dd899411ee1c1cb89f439a833ba1598 \
|
--hash=sha256:764a3b5aaa22d6100100d97a6ce58515687f4e0d06660180024e3101a507f580 \
|
||||||
--hash=sha256:d353c7eae4f369f6ec198cb61432e7c24d1d06b14aecc05b367f6c498053defc
|
--hash=sha256:922b75be353461875802a50dfd052215414dbc2965d153b95ff31d85081c40b7
|
||||||
idna==3.10 \
|
idna==3.10 \
|
||||||
--hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
|
--hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
|
||||||
--hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
|
--hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
|
||||||
|
|||||||
8
third_party/python/uv.lock
generated
vendored
8
third_party/python/uv.lock
generated
vendored
@@ -598,7 +598,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-parser"
|
name = "glean-parser"
|
||||||
version = "17.1.0"
|
version = "17.0.1"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "click" },
|
{ name = "click" },
|
||||||
@@ -608,9 +608,9 @@ dependencies = [
|
|||||||
{ name = "platformdirs" },
|
{ name = "platformdirs" },
|
||||||
{ name = "pyyaml" },
|
{ name = "pyyaml" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/5c/5e/a2c499e871398869372361a733dc612bb108079c3113ea35f67b6846e58d/glean_parser-17.1.0.tar.gz", hash = "sha256:a59ab66dd734a8bea7d7a2cb632276602dd899411ee1c1cb89f439a833ba1598", size = 291725 }
|
sdist = { url = "https://files.pythonhosted.org/packages/7d/fd/895160c0fbc1ced0803bd19a2c2473f537efd8e6afa38aae2af12d5535b9/glean_parser-17.0.1.tar.gz", hash = "sha256:764a3b5aaa22d6100100d97a6ce58515687f4e0d06660180024e3101a507f580", size = 290273 }
|
||||||
wheels = [
|
wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/8a/bd/be94c7243ff7666ee6c3170fc52791323b0b4d70d9522a9da1911dbbe40d/glean_parser-17.1.0-py3-none-any.whl", hash = "sha256:d353c7eae4f369f6ec198cb61432e7c24d1d06b14aecc05b367f6c498053defc", size = 124309 },
|
{ url = "https://files.pythonhosted.org/packages/2d/02/dcc2f155ef74fb2c83d51b7170236f4648adb49f645bac4e5786dc3ac77c/glean_parser-17.0.1-py3-none-any.whl", hash = "sha256:922b75be353461875802a50dfd052215414dbc2965d153b95ff31d85081c40b7", size = 124106 },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -925,7 +925,7 @@ requires-dist = [
|
|||||||
{ name = "filelock", specifier = "~=3.6" },
|
{ name = "filelock", specifier = "~=3.6" },
|
||||||
{ name = "fluent-migrate", specifier = "==0.13.2" },
|
{ name = "fluent-migrate", specifier = "==0.13.2" },
|
||||||
{ name = "fluent-syntax", specifier = "==0.19.0" },
|
{ name = "fluent-syntax", specifier = "==0.19.0" },
|
||||||
{ name = "glean-parser", specifier = "==17.1.0" },
|
{ name = "glean-parser", specifier = "==17.0.1" },
|
||||||
{ name = "importlib-metadata", specifier = "==6.0.0" },
|
{ name = "importlib-metadata", specifier = "==6.0.0" },
|
||||||
{ name = "jinja2", specifier = "==3.1.2" },
|
{ name = "jinja2", specifier = "==3.1.2" },
|
||||||
{ name = "jsmin", specifier = "==3.0.0" },
|
{ name = "jsmin", specifier = "==3.0.0" },
|
||||||
|
|||||||
2
third_party/python/uv.lock.hash
vendored
2
third_party/python/uv.lock.hash
vendored
@@ -1 +1 @@
|
|||||||
bef15c648652b3186718606fe950f1a885a86c4abb19b28d8a95f2ad60e2e039
|
6811e7a47781ee2d8b491fa59de0ad7a40375d04beeab0f203d5e423f0db5e48
|
||||||
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
@@ -13,7 +13,7 @@
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.82"
|
rust-version = "1.82"
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
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>",
|
||||||
@@ -40,7 +40,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 = "17.1.0"
|
glean-parser = "17.0.1"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "glean_core"
|
name = "glean_core"
|
||||||
|
|||||||
77
third_party/rust/glean-core/src/core/mod.rs
vendored
77
third_party/rust/glean-core/src/core/mod.rs
vendored
@@ -24,9 +24,8 @@ use crate::storage::{StorageManager, INTERNAL_STORAGE};
|
|||||||
use crate::upload::{PingUploadManager, PingUploadTask, UploadResult, UploadTaskAction};
|
use crate::upload::{PingUploadManager, PingUploadTask, UploadResult, UploadTaskAction};
|
||||||
use crate::util::{local_now_with_offset, sanitize_application_id};
|
use crate::util::{local_now_with_offset, sanitize_application_id};
|
||||||
use crate::{
|
use crate::{
|
||||||
scheduler, system, AttributionMetrics, CommonMetricData, DistributionMetrics, ErrorKind,
|
scheduler, system, CommonMetricData, ErrorKind, InternalConfiguration, Lifetime, PingRateLimit,
|
||||||
InternalConfiguration, Lifetime, PingRateLimit, Result, DEFAULT_MAX_EVENTS,
|
Result, DEFAULT_MAX_EVENTS, GLEAN_SCHEMA_VERSION, GLEAN_VERSION, KNOWN_CLIENT_ID,
|
||||||
GLEAN_SCHEMA_VERSION, GLEAN_VERSION, KNOWN_CLIENT_ID,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static GLEAN: OnceCell<Mutex<Glean>> = OnceCell::new();
|
static GLEAN: OnceCell<Mutex<Glean>> = OnceCell::new();
|
||||||
@@ -1085,76 +1084,4 @@ impl Glean {
|
|||||||
scheduler::schedule(self);
|
scheduler::schedule(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Updates attribution fields with new values.
|
|
||||||
/// AttributionMetrics fields with `None` values will not overwrite older values.
|
|
||||||
pub fn update_attribution(&self, attribution: AttributionMetrics) {
|
|
||||||
if let Some(source) = attribution.source {
|
|
||||||
self.core_metrics.attribution_source.set_sync(self, source);
|
|
||||||
}
|
|
||||||
if let Some(medium) = attribution.medium {
|
|
||||||
self.core_metrics.attribution_medium.set_sync(self, medium);
|
|
||||||
}
|
|
||||||
if let Some(campaign) = attribution.campaign {
|
|
||||||
self.core_metrics
|
|
||||||
.attribution_campaign
|
|
||||||
.set_sync(self, campaign);
|
|
||||||
}
|
|
||||||
if let Some(term) = attribution.term {
|
|
||||||
self.core_metrics.attribution_term.set_sync(self, term);
|
|
||||||
}
|
|
||||||
if let Some(content) = attribution.content {
|
|
||||||
self.core_metrics
|
|
||||||
.attribution_content
|
|
||||||
.set_sync(self, content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// **TEST-ONLY Method**
|
|
||||||
///
|
|
||||||
/// Returns the current attribution metrics.
|
|
||||||
pub fn test_get_attribution(&self) -> AttributionMetrics {
|
|
||||||
AttributionMetrics {
|
|
||||||
source: self
|
|
||||||
.core_metrics
|
|
||||||
.attribution_source
|
|
||||||
.get_value(self, Some("glean_client_info")),
|
|
||||||
medium: self
|
|
||||||
.core_metrics
|
|
||||||
.attribution_medium
|
|
||||||
.get_value(self, Some("glean_client_info")),
|
|
||||||
campaign: self
|
|
||||||
.core_metrics
|
|
||||||
.attribution_campaign
|
|
||||||
.get_value(self, Some("glean_client_info")),
|
|
||||||
term: self
|
|
||||||
.core_metrics
|
|
||||||
.attribution_term
|
|
||||||
.get_value(self, Some("glean_client_info")),
|
|
||||||
content: self
|
|
||||||
.core_metrics
|
|
||||||
.attribution_content
|
|
||||||
.get_value(self, Some("glean_client_info")),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Updates distribution fields with new values.
|
|
||||||
/// DistributionMetrics fields with `None` values will not overwrite older values.
|
|
||||||
pub fn update_distribution(&self, distribution: DistributionMetrics) {
|
|
||||||
if let Some(name) = distribution.name {
|
|
||||||
self.core_metrics.distribution_name.set_sync(self, name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// **TEST-ONLY Method**
|
|
||||||
///
|
|
||||||
/// Returns the current distribution metrics.
|
|
||||||
pub fn test_get_distribution(&self) -> DistributionMetrics {
|
|
||||||
DistributionMetrics {
|
|
||||||
name: self
|
|
||||||
.core_metrics
|
|
||||||
.distribution_name
|
|
||||||
.get_value(self, Some("glean_client_info")),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
111
third_party/rust/glean-core/src/core_metrics.rs
vendored
111
third_party/rust/glean-core/src/core_metrics.rs
vendored
@@ -42,58 +42,6 @@ pub struct ClientInfoMetrics {
|
|||||||
pub locale: Option<String>,
|
pub locale: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Optional product attribution metrics carried in `client_info.attribution`.
|
|
||||||
#[derive(Clone, Debug, Default, PartialEq)]
|
|
||||||
pub struct AttributionMetrics {
|
|
||||||
/// The attribution source (e.g. "google-play").
|
|
||||||
pub source: Option<String>,
|
|
||||||
/// The attribution medium (e.g. "organic" for a search engine).
|
|
||||||
pub medium: Option<String>,
|
|
||||||
/// The attribution campaign (e.g. "mozilla-org").
|
|
||||||
pub campaign: Option<String>,
|
|
||||||
/// The attribution term (e.g. "browser with developer tools for android").
|
|
||||||
pub term: Option<String>,
|
|
||||||
/// The attribution content (e.g. "firefoxview").
|
|
||||||
pub content: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AttributionMetrics {
|
|
||||||
/// Update self with any non-`None` fields from `other`.
|
|
||||||
pub fn update(&mut self, other: AttributionMetrics) {
|
|
||||||
if let Some(source) = other.source {
|
|
||||||
self.source = Some(source);
|
|
||||||
}
|
|
||||||
if let Some(medium) = other.medium {
|
|
||||||
self.medium = Some(medium);
|
|
||||||
}
|
|
||||||
if let Some(campaign) = other.campaign {
|
|
||||||
self.campaign = Some(campaign);
|
|
||||||
}
|
|
||||||
if let Some(term) = other.term {
|
|
||||||
self.term = Some(term);
|
|
||||||
}
|
|
||||||
if let Some(content) = other.content {
|
|
||||||
self.content = Some(content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Optional product distribution metrics carried in `client_info.distribution`.
|
|
||||||
#[derive(Clone, Debug, Default, PartialEq)]
|
|
||||||
pub struct DistributionMetrics {
|
|
||||||
/// The distribution name (e.g. "MozillaOnline").
|
|
||||||
pub name: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DistributionMetrics {
|
|
||||||
/// Update self with any non-`None` fields from `other`.
|
|
||||||
pub fn update(&mut self, other: DistributionMetrics) {
|
|
||||||
if let Some(name) = other.name {
|
|
||||||
self.name = Some(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Metrics included in every ping as `client_info`.
|
/// Metrics included in every ping as `client_info`.
|
||||||
impl ClientInfoMetrics {
|
impl ClientInfoMetrics {
|
||||||
/// Creates the client info with dummy values for all.
|
/// Creates the client info with dummy values for all.
|
||||||
@@ -256,62 +204,3 @@ pub mod internal_metrics {
|
|||||||
)
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod test {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn update_attribution() {
|
|
||||||
let mut attr: AttributionMetrics = Default::default();
|
|
||||||
let empty: AttributionMetrics = Default::default();
|
|
||||||
|
|
||||||
// Ensure the identity operation works.
|
|
||||||
attr.update(empty.clone());
|
|
||||||
assert_eq!(None, attr.source);
|
|
||||||
|
|
||||||
// Ensure simple updates work.
|
|
||||||
attr.update(AttributionMetrics {
|
|
||||||
source: Some("a source".into()),
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
assert_eq!(Some("a source".into()), attr.source);
|
|
||||||
|
|
||||||
// Ensure None doesn't overwrite.
|
|
||||||
attr.update(empty);
|
|
||||||
assert_eq!(Some("a source".into()), attr.source);
|
|
||||||
|
|
||||||
// Ensure updates of Some work.
|
|
||||||
attr.update(AttributionMetrics {
|
|
||||||
source: Some("another source".into()),
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
assert_eq!(Some("another source".into()), attr.source);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn update_distribution() {
|
|
||||||
let mut dist: DistributionMetrics = Default::default();
|
|
||||||
let empty: DistributionMetrics = Default::default();
|
|
||||||
|
|
||||||
// Ensure the identity operation works.
|
|
||||||
dist.update(empty.clone());
|
|
||||||
assert_eq!(None, dist.name);
|
|
||||||
|
|
||||||
// Ensure simple updates work.
|
|
||||||
dist.update(DistributionMetrics {
|
|
||||||
name: Some("a name".into()),
|
|
||||||
});
|
|
||||||
assert_eq!(Some("a name".into()), dist.name);
|
|
||||||
|
|
||||||
// Ensure None doesn't overwrite.
|
|
||||||
dist.update(empty);
|
|
||||||
assert_eq!(Some("a name".into()), dist.name);
|
|
||||||
|
|
||||||
// Ensure updates of Some work.
|
|
||||||
dist.update(DistributionMetrics {
|
|
||||||
name: Some("another name".into()),
|
|
||||||
});
|
|
||||||
assert_eq!(Some("another name".into()), dist.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
24
third_party/rust/glean-core/src/glean.udl
vendored
24
third_party/rust/glean-core/src/glean.udl
vendored
@@ -71,18 +71,6 @@ namespace glean {
|
|||||||
|
|
||||||
PingUploadTask glean_get_upload_task();
|
PingUploadTask glean_get_upload_task();
|
||||||
UploadTaskAction glean_process_ping_upload_response(string uuid, UploadResult result);
|
UploadTaskAction glean_process_ping_upload_response(string uuid, UploadResult result);
|
||||||
|
|
||||||
// Updates attribution fields with new values.
|
|
||||||
// AttributionMetrics fields with no values will not overwrite older values.
|
|
||||||
void glean_update_attribution(AttributionMetrics attribution);
|
|
||||||
// Returns the current attribution metrics, if any.
|
|
||||||
AttributionMetrics glean_test_get_attribution();
|
|
||||||
|
|
||||||
// Updates distribution fields with new values.
|
|
||||||
// DistributionMetrics fields with no values will not overwrite older values.
|
|
||||||
void glean_update_distribution(DistributionMetrics distribution);
|
|
||||||
// Returns the current distribution metrics, if any.
|
|
||||||
DistributionMetrics glean_test_get_distribution();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// A `Cow<'static, str>`, but really it's always the owned part.
|
// A `Cow<'static, str>`, but really it's always the owned part.
|
||||||
@@ -150,18 +138,6 @@ dictionary ClientInfoMetrics {
|
|||||||
i64? windows_build_number = null;
|
i64? windows_build_number = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
dictionary AttributionMetrics {
|
|
||||||
string? source = null;
|
|
||||||
string? medium = null;
|
|
||||||
string? campaign = null;
|
|
||||||
string? term = null;
|
|
||||||
string? content = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
dictionary DistributionMetrics {
|
|
||||||
string? name = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
[Error]
|
[Error]
|
||||||
enum CallbackError {
|
enum CallbackError {
|
||||||
"UnexpectedError",
|
"UnexpectedError",
|
||||||
|
|||||||
@@ -11,12 +11,6 @@ pub struct CoreMetrics {
|
|||||||
pub client_id: UuidMetric,
|
pub client_id: UuidMetric,
|
||||||
pub first_run_date: DatetimeMetric,
|
pub first_run_date: DatetimeMetric,
|
||||||
pub os: StringMetric,
|
pub os: StringMetric,
|
||||||
pub attribution_source: StringMetric,
|
|
||||||
pub attribution_medium: StringMetric,
|
|
||||||
pub attribution_campaign: StringMetric,
|
|
||||||
pub attribution_term: StringMetric,
|
|
||||||
pub attribution_content: StringMetric,
|
|
||||||
pub distribution_name: StringMetric,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -71,60 +65,6 @@ impl CoreMetrics {
|
|||||||
disabled: false,
|
disabled: false,
|
||||||
dynamic_label: None,
|
dynamic_label: None,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
attribution_source: StringMetric::new(CommonMetricData {
|
|
||||||
name: "source".into(),
|
|
||||||
category: "attribution".into(),
|
|
||||||
send_in_pings: vec!["glean_client_info".into()],
|
|
||||||
lifetime: Lifetime::User,
|
|
||||||
disabled: false,
|
|
||||||
dynamic_label: None,
|
|
||||||
}),
|
|
||||||
|
|
||||||
attribution_medium: StringMetric::new(CommonMetricData {
|
|
||||||
name: "medium".into(),
|
|
||||||
category: "attribution".into(),
|
|
||||||
send_in_pings: vec!["glean_client_info".into()],
|
|
||||||
lifetime: Lifetime::User,
|
|
||||||
disabled: false,
|
|
||||||
dynamic_label: None,
|
|
||||||
}),
|
|
||||||
|
|
||||||
attribution_campaign: StringMetric::new(CommonMetricData {
|
|
||||||
name: "campaign".into(),
|
|
||||||
category: "attribution".into(),
|
|
||||||
send_in_pings: vec!["glean_client_info".into()],
|
|
||||||
lifetime: Lifetime::User,
|
|
||||||
disabled: false,
|
|
||||||
dynamic_label: None,
|
|
||||||
}),
|
|
||||||
|
|
||||||
attribution_term: StringMetric::new(CommonMetricData {
|
|
||||||
name: "term".into(),
|
|
||||||
category: "attribution".into(),
|
|
||||||
send_in_pings: vec!["glean_client_info".into()],
|
|
||||||
lifetime: Lifetime::User,
|
|
||||||
disabled: false,
|
|
||||||
dynamic_label: None,
|
|
||||||
}),
|
|
||||||
|
|
||||||
attribution_content: StringMetric::new(CommonMetricData {
|
|
||||||
name: "content".into(),
|
|
||||||
category: "attribution".into(),
|
|
||||||
send_in_pings: vec!["glean_client_info".into()],
|
|
||||||
lifetime: Lifetime::User,
|
|
||||||
disabled: false,
|
|
||||||
dynamic_label: None,
|
|
||||||
}),
|
|
||||||
|
|
||||||
distribution_name: StringMetric::new(CommonMetricData {
|
|
||||||
name: "name".into(),
|
|
||||||
category: "distribution".into(),
|
|
||||||
send_in_pings: vec!["glean_client_info".into()],
|
|
||||||
lifetime: Lifetime::User,
|
|
||||||
disabled: false,
|
|
||||||
dynamic_label: None,
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
74
third_party/rust/glean-core/src/lib.rs
vendored
74
third_party/rust/glean-core/src/lib.rs
vendored
@@ -59,7 +59,7 @@ mod fd_logger;
|
|||||||
|
|
||||||
pub use crate::common_metric_data::{CommonMetricData, Lifetime};
|
pub use crate::common_metric_data::{CommonMetricData, Lifetime};
|
||||||
pub use crate::core::Glean;
|
pub use crate::core::Glean;
|
||||||
pub use crate::core_metrics::{AttributionMetrics, ClientInfoMetrics, DistributionMetrics};
|
pub use crate::core_metrics::ClientInfoMetrics;
|
||||||
pub use crate::error::{Error, ErrorKind, Result};
|
pub use crate::error::{Error, ErrorKind, Result};
|
||||||
pub use crate::error_recording::{test_get_num_recorded_errors, ErrorType};
|
pub use crate::error_recording::{test_get_num_recorded_errors, ErrorType};
|
||||||
pub use crate::histogram::HistogramType;
|
pub use crate::histogram::HistogramType;
|
||||||
@@ -102,10 +102,6 @@ static PRE_INIT_SOURCE_TAGS: Mutex<Vec<String>> = Mutex::new(Vec::new());
|
|||||||
static PRE_INIT_PING_REGISTRATION: Mutex<Vec<metrics::PingType>> = Mutex::new(Vec::new());
|
static PRE_INIT_PING_REGISTRATION: Mutex<Vec<metrics::PingType>> = Mutex::new(Vec::new());
|
||||||
static PRE_INIT_PING_ENABLED: Mutex<Vec<(metrics::PingType, bool)>> = Mutex::new(Vec::new());
|
static PRE_INIT_PING_ENABLED: Mutex<Vec<(metrics::PingType, bool)>> = Mutex::new(Vec::new());
|
||||||
|
|
||||||
/// Keep track of attribution and distribution supplied before Glean is initialized.
|
|
||||||
static PRE_INIT_ATTRIBUTION: Mutex<Option<AttributionMetrics>> = Mutex::new(None);
|
|
||||||
static PRE_INIT_DISTRIBUTION: Mutex<Option<DistributionMetrics>> = Mutex::new(None);
|
|
||||||
|
|
||||||
/// Global singleton of the handles of the glean.init threads.
|
/// Global singleton of the handles of the glean.init threads.
|
||||||
/// For joining. For tests.
|
/// For joining. For tests.
|
||||||
/// (Why a Vec? There might be more than one concurrent call to initialize.)
|
/// (Why a Vec? There might be more than one concurrent call to initialize.)
|
||||||
@@ -452,15 +448,6 @@ fn initialize_inner(
|
|||||||
glean.set_ping_enabled(ping, *enabled);
|
glean.set_ping_enabled(ping, *enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The attribution and distribution might have been set before initialize,
|
|
||||||
// take the cached values and set them.
|
|
||||||
if let Some(attribution) = PRE_INIT_ATTRIBUTION.lock().unwrap().take() {
|
|
||||||
glean.update_attribution(attribution);
|
|
||||||
}
|
|
||||||
if let Some(distribution) = PRE_INIT_DISTRIBUTION.lock().unwrap().take() {
|
|
||||||
glean.update_distribution(distribution);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If this is the first time ever the Glean SDK runs, make sure to set
|
// If this is the first time ever the Glean SDK runs, make sure to set
|
||||||
// some initial core metrics in case we need to generate early pings.
|
// some initial core metrics in case we need to generate early pings.
|
||||||
// The next times we start, we would have them around already.
|
// The next times we start, we would have them around already.
|
||||||
@@ -887,7 +874,7 @@ pub fn glean_set_collection_enabled(enabled: bool) {
|
|||||||
/// and all pending pings of that type to be deleted.
|
/// and all pending pings of that type to be deleted.
|
||||||
pub fn set_ping_enabled(ping: &PingType, enabled: bool) {
|
pub fn set_ping_enabled(ping: &PingType, enabled: bool) {
|
||||||
let ping = ping.clone();
|
let ping = ping.clone();
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
if was_initialize_called() {
|
||||||
crate::launch_with_glean_mut(move |glean| glean.set_ping_enabled(&ping, enabled));
|
crate::launch_with_glean_mut(move |glean| glean.set_ping_enabled(&ping, enabled));
|
||||||
} else {
|
} else {
|
||||||
let m = &PRE_INIT_PING_ENABLED;
|
let m = &PRE_INIT_PING_ENABLED;
|
||||||
@@ -902,7 +889,7 @@ pub(crate) fn register_ping_type(ping: &PingType) {
|
|||||||
// we dispatch ping registration on the thread pool.
|
// we dispatch ping registration on the thread pool.
|
||||||
// Registering a ping should not block the application.
|
// Registering a ping should not block the application.
|
||||||
// Submission itself is also dispatched, so it will always come after the registration.
|
// Submission itself is also dispatched, so it will always come after the registration.
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
if was_initialize_called() {
|
||||||
let ping = ping.clone();
|
let ping = ping.clone();
|
||||||
crate::launch_with_glean_mut(move |glean| {
|
crate::launch_with_glean_mut(move |glean| {
|
||||||
glean.register_ping_type(&ping);
|
glean.register_ping_type(&ping);
|
||||||
@@ -1016,7 +1003,7 @@ pub fn glean_apply_server_knobs_config(json: String) {
|
|||||||
/// This will return `false` in case `tag` is not a valid tag and `true` otherwise.
|
/// This will return `false` in case `tag` is not a valid tag and `true` otherwise.
|
||||||
/// If called before Glean is initialized it will always return `true`.
|
/// If called before Glean is initialized it will always return `true`.
|
||||||
pub fn glean_set_debug_view_tag(tag: String) -> bool {
|
pub fn glean_set_debug_view_tag(tag: String) -> bool {
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
if was_initialize_called() {
|
||||||
crate::launch_with_glean_mut(move |glean| {
|
crate::launch_with_glean_mut(move |glean| {
|
||||||
glean.set_debug_view_tag(&tag);
|
glean.set_debug_view_tag(&tag);
|
||||||
});
|
});
|
||||||
@@ -1054,7 +1041,7 @@ pub fn glean_get_debug_view_tag() -> Option<String> {
|
|||||||
/// * `tags` - A vector of at most 5 valid HTTP header values. Individual
|
/// * `tags` - A vector of at most 5 valid HTTP header values. Individual
|
||||||
/// tags must match the regex: "[a-zA-Z0-9-]{1,20}".
|
/// tags must match the regex: "[a-zA-Z0-9-]{1,20}".
|
||||||
pub fn glean_set_source_tags(tags: Vec<String>) -> bool {
|
pub fn glean_set_source_tags(tags: Vec<String>) -> bool {
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
if was_initialize_called() {
|
||||||
crate::launch_with_glean_mut(|glean| {
|
crate::launch_with_glean_mut(|glean| {
|
||||||
glean.set_source_tags(tags);
|
glean.set_source_tags(tags);
|
||||||
});
|
});
|
||||||
@@ -1079,7 +1066,7 @@ pub fn glean_set_source_tags(tags: Vec<String>) -> bool {
|
|||||||
///
|
///
|
||||||
/// * `value` - The value of the log pings option
|
/// * `value` - The value of the log pings option
|
||||||
pub fn glean_set_log_pings(value: bool) {
|
pub fn glean_set_log_pings(value: bool) {
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
if was_initialize_called() {
|
||||||
crate::launch_with_glean_mut(move |glean| {
|
crate::launch_with_glean_mut(move |glean| {
|
||||||
glean.set_log_pings(value);
|
glean.set_log_pings(value);
|
||||||
});
|
});
|
||||||
@@ -1176,8 +1163,7 @@ pub fn glean_submit_ping_by_name_sync(ping_name: String, reason: Option<String>)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
core::with_opt_glean(|glean| glean.submit_ping_by_name(&ping_name, reason.as_deref()))
|
core::with_glean(|glean| glean.submit_ping_by_name(&ping_name, reason.as_deref()))
|
||||||
.unwrap_or(false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EXPERIMENTAL: Register a listener object to recieve notifications of event recordings.
|
/// EXPERIMENTAL: Register a listener object to recieve notifications of event recordings.
|
||||||
@@ -1269,52 +1255,6 @@ pub fn glean_set_dirty_flag(new_value: bool) {
|
|||||||
core::with_glean(|glean| glean.set_dirty_flag(new_value))
|
core::with_glean(|glean| glean.set_dirty_flag(new_value))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Updates attribution fields with new values.
|
|
||||||
/// AttributionMetrics fields with `None` values will not overwrite older values.
|
|
||||||
pub fn glean_update_attribution(attribution: AttributionMetrics) {
|
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
|
||||||
core::with_glean(|glean| glean.update_attribution(attribution));
|
|
||||||
} else {
|
|
||||||
PRE_INIT_ATTRIBUTION
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.get_or_insert(Default::default())
|
|
||||||
.update(attribution);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// **TEST-ONLY Method**
|
|
||||||
///
|
|
||||||
/// Returns the current attribution metrics.
|
|
||||||
/// Panics if called before init.
|
|
||||||
pub fn glean_test_get_attribution() -> AttributionMetrics {
|
|
||||||
join_init();
|
|
||||||
core::with_glean(|glean| glean.test_get_attribution())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Updates distribution fields with new values.
|
|
||||||
/// DistributionMetrics fields with `None` values will not overwrite older values.
|
|
||||||
pub fn glean_update_distribution(distribution: DistributionMetrics) {
|
|
||||||
if was_initialize_called() && core::global_glean().is_some() {
|
|
||||||
core::with_glean(|glean| glean.update_distribution(distribution));
|
|
||||||
} else {
|
|
||||||
PRE_INIT_DISTRIBUTION
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.get_or_insert(Default::default())
|
|
||||||
.update(distribution);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// **TEST-ONLY Method**
|
|
||||||
///
|
|
||||||
/// Returns the current distribution metrics.
|
|
||||||
/// Panics if called before init.
|
|
||||||
pub fn glean_test_get_distribution() -> DistributionMetrics {
|
|
||||||
join_init();
|
|
||||||
core::with_glean(|glean| glean.test_get_distribution())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(all(not(target_os = "android"), not(target_os = "ios")))]
|
#[cfg(all(not(target_os = "android"), not(target_os = "ios")))]
|
||||||
static FD_LOGGER: OnceCell<fd_logger::FdLogger> = OnceCell::new();
|
static FD_LOGGER: OnceCell<fd_logger::FdLogger> = OnceCell::new();
|
||||||
|
|
||||||
|
|||||||
@@ -396,58 +396,6 @@ fn client_id_is_set_to_random_value_when_uploading_enabled_at_start() {
|
|||||||
assert_ne!(*KNOWN_CLIENT_ID, current_client_id.unwrap());
|
assert_ne!(*KNOWN_CLIENT_ID, current_client_id.unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn attribution_and_distribution_are_correctly_stored() {
|
|
||||||
let dir = tempfile::tempdir().unwrap();
|
|
||||||
let tmpname = dir.path().display().to_string();
|
|
||||||
let glean = Glean::with_options(&tmpname, GLOBAL_APPLICATION_ID, true, true);
|
|
||||||
|
|
||||||
// On a fresh Glean, no attribution or distribution information is set.
|
|
||||||
assert_eq!(
|
|
||||||
<AttributionMetrics as Default>::default(),
|
|
||||||
glean.test_get_attribution()
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
<DistributionMetrics as Default>::default(),
|
|
||||||
glean.test_get_distribution()
|
|
||||||
);
|
|
||||||
|
|
||||||
let mut attribution = AttributionMetrics {
|
|
||||||
source: Some("source".into()),
|
|
||||||
medium: Some("medium".into()),
|
|
||||||
campaign: Some("campaign".into()),
|
|
||||||
term: Some("term".into()),
|
|
||||||
content: Some("content".into()),
|
|
||||||
};
|
|
||||||
let distribution = DistributionMetrics {
|
|
||||||
name: Some("name".into()),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Set them all at once.
|
|
||||||
glean.update_attribution(attribution.clone());
|
|
||||||
glean.update_distribution(distribution.clone());
|
|
||||||
|
|
||||||
assert_eq!(attribution, glean.test_get_attribution());
|
|
||||||
assert_eq!(distribution, glean.test_get_distribution());
|
|
||||||
|
|
||||||
let attribution_update = AttributionMetrics {
|
|
||||||
campaign: Some("new campaign".into()),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
let distribution_update = DistributionMetrics {
|
|
||||||
name: Some("new name".into()),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Perform updates.
|
|
||||||
glean.update_attribution(attribution_update);
|
|
||||||
glean.update_distribution(distribution_update.clone());
|
|
||||||
|
|
||||||
// Ensure only the updated fields took over
|
|
||||||
attribution.campaign = Some("new campaign".into());
|
|
||||||
assert_eq!(attribution, glean.test_get_attribution());
|
|
||||||
assert_eq!(distribution_update, glean.test_get_distribution());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn enabling_when_already_enabled_is_a_noop() {
|
fn enabling_when_already_enabled_is_a_noop() {
|
||||||
let dir = tempfile::tempdir().unwrap();
|
let dir = tempfile::tempdir().unwrap();
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ use crate::Glean;
|
|||||||
|
|
||||||
const MAX_LABELS: usize = 16;
|
const MAX_LABELS: usize = 16;
|
||||||
const OTHER_LABEL: &str = "__other__";
|
const OTHER_LABEL: &str = "__other__";
|
||||||
const MAX_LABEL_LENGTH: usize = 111;
|
const MAX_LABEL_LENGTH: usize = 71;
|
||||||
|
|
||||||
/// A labeled counter.
|
/// A labeled counter.
|
||||||
pub type LabeledCounter = LabeledMetric<CounterMetric>;
|
pub type LabeledCounter = LabeledMetric<CounterMetric>;
|
||||||
@@ -265,7 +265,7 @@ where
|
|||||||
/// only the first 16 unique labels will be used.
|
/// only the first 16 unique labels will be used.
|
||||||
/// After that, any additional labels will be recorded under the special `OTHER_LABEL` label.
|
/// After that, any additional labels will be recorded under the special `OTHER_LABEL` label.
|
||||||
///
|
///
|
||||||
/// Labels must have a maximum of 111 characters, and may comprise any printable ASCII characters.
|
/// Labels must be `snake_case` and less than 30 characters.
|
||||||
/// If an invalid label is used, the metric will be recorded in the special `OTHER_LABEL` label.
|
/// If an invalid label is used, the metric will be recorded in the special `OTHER_LABEL` label.
|
||||||
pub fn get<S: AsRef<str>>(&self, label: S) -> Arc<T> {
|
pub fn get<S: AsRef<str>>(&self, label: S) -> Arc<T> {
|
||||||
let label = label.as_ref();
|
let label = label.as_ref();
|
||||||
|
|||||||
32
third_party/rust/glean-core/src/ping/mod.rs
vendored
32
third_party/rust/glean-core/src/ping/mod.rs
vendored
@@ -176,36 +176,8 @@ impl PingMaker {
|
|||||||
StorageManager.snapshot_as_json(glean.storage(), "glean_client_info", true)
|
StorageManager.snapshot_as_json(glean.storage(), "glean_client_info", true)
|
||||||
{
|
{
|
||||||
let client_info_obj = client_info.as_object().unwrap(); // safe unwrap, snapshot always returns an object.
|
let client_info_obj = client_info.as_object().unwrap(); // safe unwrap, snapshot always returns an object.
|
||||||
for (_metric_type, metrics) in client_info_obj {
|
for (_key, value) in client_info_obj {
|
||||||
merge(&mut map, metrics);
|
merge(&mut map, value);
|
||||||
}
|
|
||||||
let map = map.as_object_mut().unwrap(); // safe unwrap, we created the object above.
|
|
||||||
let mut attribution = serde_json::Map::new();
|
|
||||||
let mut distribution = serde_json::Map::new();
|
|
||||||
map.retain(|name, value| {
|
|
||||||
// Only works because we ensure no client_info metric categories contain '.'.
|
|
||||||
let mut split = name.split('.');
|
|
||||||
let category = split.next();
|
|
||||||
let name = split.next();
|
|
||||||
if let (Some(category), Some(name)) = (category, name) {
|
|
||||||
if category == "attribution" {
|
|
||||||
attribution.insert(name.into(), value.take());
|
|
||||||
false
|
|
||||||
} else if category == "distribution" {
|
|
||||||
distribution.insert(name.into(), value.take());
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if !attribution.is_empty() {
|
|
||||||
map.insert("attribution".into(), serde_json::Value::from(attribution));
|
|
||||||
}
|
|
||||||
if !distribution.is_empty() {
|
|
||||||
map.insert("distribution".into(), serde_json::Value::from(distribution));
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log::warn!("Empty client info data.");
|
log::warn!("Empty client info data.");
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ where
|
|||||||
/// only the first 16 unique labels will be used.
|
/// only the first 16 unique labels will be used.
|
||||||
/// After that, any additional labels will be recorded under the special `OTHER_LABEL` label.
|
/// After that, any additional labels will be recorded under the special `OTHER_LABEL` label.
|
||||||
///
|
///
|
||||||
/// Labels must have a maximum of 111 characters, and may comprise any printable ASCII characters.
|
/// Labels must be `snake_case` and less than 30 characters.
|
||||||
/// If an invalid label is used, the metric will be recorded in the special `OTHER_LABEL` label.
|
/// If an invalid label is used, the metric will be recorded in the special `OTHER_LABEL` label.
|
||||||
fn get(&self, label: &str) -> T;
|
fn get(&self, label: &str) -> T;
|
||||||
|
|
||||||
|
|||||||
2
third_party/rust/glean-core/tests/labeled.rs
vendored
2
third_party/rust/glean-core/tests/labeled.rs
vendored
@@ -387,7 +387,7 @@ fn dynamic_labels_too_long() {
|
|||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
|
|
||||||
let metric = labeled.get("1".repeat(112));
|
let metric = labeled.get("1".repeat(72));
|
||||||
metric.add_sync(&glean, 1);
|
metric.add_sync(&glean, 1);
|
||||||
|
|
||||||
let snapshot = StorageManager
|
let snapshot = StorageManager
|
||||||
|
|||||||
68
third_party/rust/glean-core/tests/ping_maker.rs
vendored
68
third_party/rust/glean-core/tests/ping_maker.rs
vendored
@@ -4,8 +4,6 @@
|
|||||||
|
|
||||||
mod common;
|
mod common;
|
||||||
use crate::common::*;
|
use crate::common::*;
|
||||||
use glean_core::{AttributionMetrics, DistributionMetrics};
|
|
||||||
use serde_json::json;
|
|
||||||
|
|
||||||
use glean_core::metrics::*;
|
use glean_core::metrics::*;
|
||||||
use glean_core::ping::PingMaker;
|
use glean_core::ping::PingMaker;
|
||||||
@@ -308,69 +306,3 @@ fn metadata_is_correctly_added_when_necessary() {
|
|||||||
let headers = metadata.as_ref().unwrap().get("headers").unwrap();
|
let headers = metadata.as_ref().unwrap().get("headers").unwrap();
|
||||||
assert_eq!(headers.get("X-Debug-ID").unwrap(), "valid-tag");
|
assert_eq!(headers.get("X-Debug-ID").unwrap(), "valid-tag");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn attribution_and_distribution_appear_in_client_info() {
|
|
||||||
let (glean, ping_maker, ping_type, _t) = set_up_basic_ping();
|
|
||||||
|
|
||||||
let attribution = AttributionMetrics {
|
|
||||||
source: Some("source".into()),
|
|
||||||
medium: Some("medium".into()),
|
|
||||||
campaign: Some("campaign".into()),
|
|
||||||
term: Some("term".into()),
|
|
||||||
content: Some("content".into()),
|
|
||||||
};
|
|
||||||
let distribution = DistributionMetrics {
|
|
||||||
name: Some("name".into()),
|
|
||||||
};
|
|
||||||
glean.update_attribution(attribution);
|
|
||||||
glean.update_distribution(distribution);
|
|
||||||
|
|
||||||
let ping = ping_maker
|
|
||||||
.collect(&glean, &ping_type, None, "", "")
|
|
||||||
.unwrap();
|
|
||||||
let client_info = ping.content["client_info"].as_object().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(json!({"name": "name"}), client_info["distribution"]);
|
|
||||||
assert_eq!(
|
|
||||||
json!({
|
|
||||||
"source": "source",
|
|
||||||
"medium": "medium",
|
|
||||||
"campaign": "campaign",
|
|
||||||
"term": "term",
|
|
||||||
"content": "content",
|
|
||||||
}),
|
|
||||||
client_info["attribution"]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Now let's test updated values.
|
|
||||||
let attribution_update = AttributionMetrics {
|
|
||||||
content: Some("what a boring word".into()),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
let distribution_update = DistributionMetrics {
|
|
||||||
name: Some("what's in a name".into()),
|
|
||||||
};
|
|
||||||
glean.update_attribution(attribution_update);
|
|
||||||
glean.update_distribution(distribution_update);
|
|
||||||
|
|
||||||
let ping = ping_maker
|
|
||||||
.collect(&glean, &ping_type, None, "", "")
|
|
||||||
.unwrap();
|
|
||||||
let client_info = ping.content["client_info"].as_object().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
json!({"name": "what's in a name"}),
|
|
||||||
client_info["distribution"]
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
json!({
|
|
||||||
"source": "source",
|
|
||||||
"medium": "medium",
|
|
||||||
"campaign": "campaign",
|
|
||||||
"term": "term",
|
|
||||||
"content": "what a boring word",
|
|
||||||
}),
|
|
||||||
client_info["attribution"]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
2
third_party/rust/glean/.cargo-checksum.json
vendored
2
third_party/rust/glean/.cargo-checksum.json
vendored
@@ -1 +1 @@
|
|||||||
{"files":{"Cargo.lock":"add20d32d164cac0a56ddac41468eaf0b23b9616f32e94a8434f5841d14b3a97","Cargo.toml":"99107d6ac4ef4ff33e2d206e8498875df879001e4621ba94e9d4ccf14267f39c","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5627cc81e6187ab6c2b4dff061af16d559edcab64ba786bac39daa69c703c595","src/common_test.rs":"c86cccfb7da1506cfed29cb2ee13d839b7ac7cffdfd70793c9665bb44e0b684f","src/configuration.rs":"de65ab99a26b4547be20803bc195cb50a6ab40b1a3f49a2e6230fed5a9d7a8d8","src/core_metrics.rs":"fef8fb4e5fa57c179836c6eb2cf59278fe3b8b036dbe57b0ff02971b4acd822f","src/lib.rs":"998359d04ba0f71aaa360b8999c716f22c9efaf1ff4e1fdce80f1d3af5e584b0","src/net/http_uploader.rs":"0a94ac3cd87cb021529dee46d537765ab8d923e0f4ac7615225e878d3739e6dc","src/net/mod.rs":"09ba010b03d045fd8a2ccbe4f205c5275bb622bceb34cb81a0aa8f7d33804e2e","src/private/event.rs":"f299c79e4e2acb657f06004f3038bd8909e287719458566bc7f96262d8665e62","src/private/mod.rs":"66e90c41de74d1e80c5d3f49b8f1a86b8396be0b8c4a80f1a28903fe6d105ecf","src/private/object.rs":"7f17a7a658e8f7aa19a6bedf70f60f3f42713316d5d60298d682bb045caaafb7","src/private/ping.rs":"d2fb45e9e178ff6b17aa9c1b5258dfcd2ed91a2b43b44dec826de256ef5e8520","src/system.rs":"d602804a72258bfd65e51c571946631732ee27d81342d8aa406e47fdd241bbfa","src/test.rs":"8ff4d5072d23d9fbf5444e474d21b41a31e86a37e2a25fc2f2a92976e7642cbb","tests/collection_enabled.rs":"3327a949dbdeec493d661261abda68ffa71acc50ab24cba4fde5302749e6f16b","tests/collection_enabled_bin.rs":"d3a6458b84012a447e5cb792f2292a06951ed252fad803b9166b437bacba542c","tests/common/mod.rs":"2fd391c5eb45f56fdfa3261dd631406c67ed36b10b0d5432febe2483da5c9d89","tests/custom_distribution_buffered.rs":"47c13d1f39adf3881e10caa19e0c08235f08958809e234bf37a79d37d7322cd5","tests/init_fails.rs":"ca7fa1b3dd6a21a9e005b7a4f0a18664c4bceb952dd463db8316500f72280d5b","tests/interruptible_shutdown.rs":"3d954bbe47d4f5fd103c51a4ff99f151662143c25c826da9734a00cd215909b9","tests/memory_distribution_buffered.rs":"db487475a5cf17a0864ccf150984ebdd28bf616573772cf678246cc1bdbcbc0f","tests/metric_metadata.rs":"05c947d3decf0a3281378dbb108080a05319ad8f130af5b07f9b049b80e5f04f","tests/near-empty-c0ffee-db.safe.bin":"89afb3bb8fc94430fb0ed0fe55f85f3f8bcc8fd0fed69a9df13cc560294ec9f5","tests/never_init.rs":"51fff5618f6603bc0945d70131698d10a1c6275f43bbc22a2de5807f8a79229f","tests/no_time_to_init.rs":"2ede23df6618ff1cb5ae3b7bbf95900ad0fd92072afa2e0319bf147b4f75cefc","tests/overflowing_preinit.rs":"985e140460a100986fd051ce901b787a3a7a9747a856cd06066b740ac7d2381c","tests/persist_ping_lifetime_nopanic.rs":"18379d3ffbf4a2c8c684c04ff7a0660b86dfbbb447db2d24dfed6073cb7ddf8f","tests/schema.rs":"23b49005402b914e55a0c5c155f30c2662c609f79be78d1385ec25b3600b3547","tests/simple.rs":"15c76a1b5a336fd6abfbdebafc971f5c6a9b75107ddbca65f0031cde3e2886da","tests/test-delayed-ping-data.sh":"4a6db98b4df6b77898ace6a8b4e8b4c60d3e5c44873bbf38c62e83583e27a3ff","tests/test-enabled-pings.sh":"06656e38f63e65475006b107dd6bd179b0cbaa1fad1470de38e679e91a9315a3","tests/test-pending-gets-removed.sh":"e335f2f00fa97a61b6d94e0005fb3b9de8c8db8076111a67ca47d85392039ea9","tests/test-ping-lifetime-flush.sh":"e8f118ea2f6fd973809e38d5e828a03cfccfe0b0f497ccde5ec92d6d1380c071","tests/test-shutdown-blocking.sh":"a44d8d4bbe2ee3ede9e48121150ae7a5386025160c5cef2181ca142232c5fb27","tests/test-thread-crashing.sh":"f3cd0cc8a7b4fe82bef0fe6fbfbbe45fbad6da3afe0f82578bc5cfb2d6527ac6","tests/timing_distribution_buffered.rs":"501f7289c0c28f0ab83838c88b058999b19436d0f2b693be0787513d7b67e06d","tests/timing_distribution_single_sample.rs":"4f9498b6ef29913da0356027efe5f572c81d2f426e8538c068b54a1cfa33c1b8","tests/upload_timing.rs":"b3b9db197bc2ec41556388969a6bf289e7ef19e05b9019bc2bd98c823fcf6ea3","tests/uploader_capabilities.rs":"347f19e534a50a211ea179d6818631270d1b4ec468098e6b6abcde1e4a6a9bca"},"package":"95024f4707705270208e36983976cbac235dd7fc33c9f1cb0dee396ec1ce295d"}
|
{"files":{"Cargo.lock":"61c7d6620026e84a7bb067305d92ffb8c51a59261c339d3ef6a8406d03bbfd92","Cargo.toml":"bec966c61ac0670d367556c54f9156aad7b2cd72dce2d09c783fdf421f49c563","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5627cc81e6187ab6c2b4dff061af16d559edcab64ba786bac39daa69c703c595","src/common_test.rs":"c86cccfb7da1506cfed29cb2ee13d839b7ac7cffdfd70793c9665bb44e0b684f","src/configuration.rs":"de65ab99a26b4547be20803bc195cb50a6ab40b1a3f49a2e6230fed5a9d7a8d8","src/core_metrics.rs":"fef8fb4e5fa57c179836c6eb2cf59278fe3b8b036dbe57b0ff02971b4acd822f","src/lib.rs":"61b56a35c2bc6cd60bba2225b399881512d4b9a7d8cadca7fbed37ee6959d74c","src/net/http_uploader.rs":"0a94ac3cd87cb021529dee46d537765ab8d923e0f4ac7615225e878d3739e6dc","src/net/mod.rs":"09ba010b03d045fd8a2ccbe4f205c5275bb622bceb34cb81a0aa8f7d33804e2e","src/private/event.rs":"f299c79e4e2acb657f06004f3038bd8909e287719458566bc7f96262d8665e62","src/private/mod.rs":"66e90c41de74d1e80c5d3f49b8f1a86b8396be0b8c4a80f1a28903fe6d105ecf","src/private/object.rs":"7f17a7a658e8f7aa19a6bedf70f60f3f42713316d5d60298d682bb045caaafb7","src/private/ping.rs":"d2fb45e9e178ff6b17aa9c1b5258dfcd2ed91a2b43b44dec826de256ef5e8520","src/system.rs":"d602804a72258bfd65e51c571946631732ee27d81342d8aa406e47fdd241bbfa","src/test.rs":"bfbea9416dfdc96ebc1f9af5005b5b23f2285b74ef82c74cdab11635322ea3e3","tests/collection_enabled.rs":"3327a949dbdeec493d661261abda68ffa71acc50ab24cba4fde5302749e6f16b","tests/collection_enabled_bin.rs":"d3a6458b84012a447e5cb792f2292a06951ed252fad803b9166b437bacba542c","tests/common/mod.rs":"2fd391c5eb45f56fdfa3261dd631406c67ed36b10b0d5432febe2483da5c9d89","tests/custom_distribution_buffered.rs":"47c13d1f39adf3881e10caa19e0c08235f08958809e234bf37a79d37d7322cd5","tests/init_fails.rs":"ca7fa1b3dd6a21a9e005b7a4f0a18664c4bceb952dd463db8316500f72280d5b","tests/interruptible_shutdown.rs":"3d954bbe47d4f5fd103c51a4ff99f151662143c25c826da9734a00cd215909b9","tests/memory_distribution_buffered.rs":"db487475a5cf17a0864ccf150984ebdd28bf616573772cf678246cc1bdbcbc0f","tests/metric_metadata.rs":"05c947d3decf0a3281378dbb108080a05319ad8f130af5b07f9b049b80e5f04f","tests/near-empty-c0ffee-db.safe.bin":"89afb3bb8fc94430fb0ed0fe55f85f3f8bcc8fd0fed69a9df13cc560294ec9f5","tests/never_init.rs":"51fff5618f6603bc0945d70131698d10a1c6275f43bbc22a2de5807f8a79229f","tests/no_time_to_init.rs":"2ede23df6618ff1cb5ae3b7bbf95900ad0fd92072afa2e0319bf147b4f75cefc","tests/overflowing_preinit.rs":"985e140460a100986fd051ce901b787a3a7a9747a856cd06066b740ac7d2381c","tests/persist_ping_lifetime_nopanic.rs":"18379d3ffbf4a2c8c684c04ff7a0660b86dfbbb447db2d24dfed6073cb7ddf8f","tests/schema.rs":"23b49005402b914e55a0c5c155f30c2662c609f79be78d1385ec25b3600b3547","tests/simple.rs":"15c76a1b5a336fd6abfbdebafc971f5c6a9b75107ddbca65f0031cde3e2886da","tests/test-delayed-ping-data.sh":"4a6db98b4df6b77898ace6a8b4e8b4c60d3e5c44873bbf38c62e83583e27a3ff","tests/test-enabled-pings.sh":"06656e38f63e65475006b107dd6bd179b0cbaa1fad1470de38e679e91a9315a3","tests/test-pending-gets-removed.sh":"e335f2f00fa97a61b6d94e0005fb3b9de8c8db8076111a67ca47d85392039ea9","tests/test-ping-lifetime-flush.sh":"e8f118ea2f6fd973809e38d5e828a03cfccfe0b0f497ccde5ec92d6d1380c071","tests/test-shutdown-blocking.sh":"a44d8d4bbe2ee3ede9e48121150ae7a5386025160c5cef2181ca142232c5fb27","tests/test-thread-crashing.sh":"f3cd0cc8a7b4fe82bef0fe6fbfbbe45fbad6da3afe0f82578bc5cfb2d6527ac6","tests/timing_distribution_buffered.rs":"501f7289c0c28f0ab83838c88b058999b19436d0f2b693be0787513d7b67e06d","tests/timing_distribution_single_sample.rs":"4f9498b6ef29913da0356027efe5f572c81d2f426e8538c068b54a1cfa33c1b8","tests/upload_timing.rs":"b3b9db197bc2ec41556388969a6bf289e7ef19e05b9019bc2bd98c823fcf6ea3","tests/uploader_capabilities.rs":"347f19e534a50a211ea179d6818631270d1b4ec468098e6b6abcde1e4a6a9bca"},"package":"251b9cb685554b96dcf785dba69ce90447006dd6d9229db783336c981c3777e1"}
|
||||||
10
third_party/rust/glean/Cargo.lock
generated
vendored
10
third_party/rust/glean/Cargo.lock
generated
vendored
@@ -135,9 +135,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-channel"
|
name = "crossbeam-channel"
|
||||||
version = "0.5.15"
|
version = "0.5.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
|
checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
@@ -242,7 +242,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
@@ -260,9 +260,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glean-core"
|
name = "glean-core"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5ca0df94fb37669287b77e8aa300913ad1d14426d7f9e443b0ce1185349c817e"
|
checksum = "a49d1d62648ddeed8cb996373046ea45de93f1d1ff956aba054b9304bc305753"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_logger",
|
"android_logger",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
|||||||
4
third_party/rust/glean/Cargo.toml
vendored
4
third_party/rust/glean/Cargo.toml
vendored
@@ -13,7 +13,7 @@
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.82"
|
rust-version = "1.82"
|
||||||
name = "glean"
|
name = "glean"
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
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>",
|
||||||
@@ -115,7 +115,7 @@ path = "tests/uploader_capabilities.rs"
|
|||||||
version = "0.5"
|
version = "0.5"
|
||||||
|
|
||||||
[dependencies.glean-core]
|
[dependencies.glean-core]
|
||||||
version = "64.1.1"
|
version = "64.0.1"
|
||||||
|
|
||||||
[dependencies.inherent]
|
[dependencies.inherent]
|
||||||
version = "1"
|
version = "1"
|
||||||
|
|||||||
30
third_party/rust/glean/src/lib.rs
vendored
30
third_party/rust/glean/src/lib.rs
vendored
@@ -39,8 +39,8 @@ pub use glean_core::{
|
|||||||
Datetime, DistributionData, MemoryUnit, MetricIdentifier, Rate, RecordedEvent, TimeUnit,
|
Datetime, DistributionData, MemoryUnit, MetricIdentifier, Rate, RecordedEvent, TimeUnit,
|
||||||
TimerId,
|
TimerId,
|
||||||
},
|
},
|
||||||
traits, AttributionMetrics, CommonMetricData, DistributionMetrics, Error, ErrorType, Glean,
|
traits, CommonMetricData, Error, ErrorType, Glean, HistogramType, LabeledMetricData, Lifetime,
|
||||||
HistogramType, LabeledMetricData, Lifetime, PingRateLimit, RecordedExperiment, Result,
|
PingRateLimit, RecordedExperiment, Result,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod configuration;
|
mod configuration;
|
||||||
@@ -356,31 +356,5 @@ pub fn get_registered_ping_names() -> Vec<String> {
|
|||||||
glean_core::glean_get_registered_ping_names()
|
glean_core::glean_get_registered_ping_names()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Updates attribution fields with new values.
|
|
||||||
/// AttributionMetrics fields with `None` values will not overwrite older values.
|
|
||||||
pub fn update_attribution(attribution: AttributionMetrics) {
|
|
||||||
glean_core::glean_update_attribution(attribution);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// **TEST-ONLY Method**
|
|
||||||
///
|
|
||||||
/// Returns the current attribution metrics.
|
|
||||||
pub fn test_get_attribution() -> AttributionMetrics {
|
|
||||||
glean_core::glean_test_get_attribution()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Updates distribution fields with new values.
|
|
||||||
/// DistributionMetrics fields with `None` values will not overwrite older values.
|
|
||||||
pub fn update_distribution(distribution: DistributionMetrics) {
|
|
||||||
glean_core::glean_update_distribution(distribution);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// **TEST-ONLY Method**
|
|
||||||
///
|
|
||||||
/// Returns the current distribution metrics.
|
|
||||||
pub fn test_get_distribution() -> DistributionMetrics {
|
|
||||||
glean_core::glean_test_get_distribution()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test;
|
mod test;
|
||||||
|
|||||||
46
third_party/rust/glean/src/test.rs
vendored
46
third_party/rust/glean/src/test.rs
vendored
@@ -1501,49 +1501,3 @@ fn pings_ride_along_builtin_pings() {
|
|||||||
let url = r.recv().unwrap();
|
let url = r.recv().unwrap();
|
||||||
assert!(url.contains("ride-along"));
|
assert!(url.contains("ride-along"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_attribution_and_distribution_updates_before_glean_inits() {
|
|
||||||
let _lock = lock_test();
|
|
||||||
let dir = tempfile::tempdir().unwrap();
|
|
||||||
let tmpname = dir.path().to_path_buf();
|
|
||||||
|
|
||||||
destroy_glean(true, &tmpname);
|
|
||||||
|
|
||||||
// No Glean, let's set and update some attribution + distribution.
|
|
||||||
let mut attribution = AttributionMetrics {
|
|
||||||
source: Some("source".into()),
|
|
||||||
medium: Some("medium".into()),
|
|
||||||
campaign: Some("campaign".into()),
|
|
||||||
term: Some("term".into()),
|
|
||||||
content: Some("content".into()),
|
|
||||||
};
|
|
||||||
let distribution = DistributionMetrics {
|
|
||||||
name: Some("name".into()),
|
|
||||||
};
|
|
||||||
update_attribution(attribution.clone());
|
|
||||||
update_distribution(distribution);
|
|
||||||
|
|
||||||
let attribution_update = AttributionMetrics {
|
|
||||||
term: Some("new term".into()),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
let distribution_update = DistributionMetrics {
|
|
||||||
name: Some("different name".into()),
|
|
||||||
};
|
|
||||||
update_attribution(attribution_update);
|
|
||||||
update_distribution(distribution_update.clone());
|
|
||||||
|
|
||||||
test_reset_glean(
|
|
||||||
ConfigurationBuilder::new(true, tmpname, GLOBAL_APPLICATION_ID)
|
|
||||||
.with_server_endpoint("invalid-test-host")
|
|
||||||
.build(),
|
|
||||||
ClientInfoMetrics::unknown(),
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Ensure the updated attribution + distribution are correctly stored.
|
|
||||||
attribution.term = Some("new term".into());
|
|
||||||
assert_eq!(attribution, test_get_attribution());
|
|
||||||
assert_eq!(distribution_update, test_get_distribution());
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -587,7 +587,7 @@ mod test {
|
|||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
|
|
||||||
metric.get(&"1".repeat(112)).set(true);
|
metric.get(&"1".repeat(72)).set(true);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
1,
|
1,
|
||||||
|
|||||||
@@ -407,11 +407,11 @@ class Labeled<TimingDistributionMetric, DynamicLabel> {
|
|||||||
|
|
||||||
TimingDistributionMetric MaybeTruncateAndGet(const nsACString& aLabel) const {
|
TimingDistributionMetric MaybeTruncateAndGet(const nsACString& aLabel) const {
|
||||||
// bug 1959765 is for incorporating this behaviour into the SDK.
|
// bug 1959765 is for incorporating this behaviour into the SDK.
|
||||||
if (aLabel.Length() < 112) {
|
if (aLabel.Length() < 72) { // bug 1959696 will up this to 112.
|
||||||
return Get(aLabel);
|
return Get(aLabel);
|
||||||
}
|
}
|
||||||
nsAutoCStringN<111> truncated;
|
nsAutoCStringN<71> truncated; // bug 1959696 will up this to 111.
|
||||||
truncated.Append(aLabel.BeginReading(), 108);
|
truncated.Append(aLabel.BeginReading(), 68);
|
||||||
truncated += "...";
|
truncated += "...";
|
||||||
return Get(truncated);
|
return Get(truncated);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ gecko_metrics = [
|
|||||||
firefox_desktop_metrics = [
|
firefox_desktop_metrics = [
|
||||||
"browser/actors/metrics.yaml",
|
"browser/actors/metrics.yaml",
|
||||||
"browser/components/asrouter/metrics.yaml",
|
"browser/components/asrouter/metrics.yaml",
|
||||||
"browser/components/attribution/metrics.yaml",
|
|
||||||
"browser/components/backup/metrics.yaml",
|
"browser/components/backup/metrics.yaml",
|
||||||
"browser/components/doh/metrics.yaml",
|
"browser/components/doh/metrics.yaml",
|
||||||
"browser/components/downloads/metrics.yaml",
|
"browser/components/downloads/metrics.yaml",
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ mod init;
|
|||||||
|
|
||||||
pub use init::fog_init;
|
pub use init::fog_init;
|
||||||
|
|
||||||
use glean::{AttributionMetrics, DistributionMetrics};
|
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn fog_shutdown() {
|
pub extern "C" fn fog_shutdown() {
|
||||||
glean::shutdown();
|
glean::shutdown();
|
||||||
@@ -270,95 +268,3 @@ pub extern "C" fn fog_apply_serverknobs(serverknobs_path: &nsAString) -> bool {
|
|||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct FogAttributionMetrics {
|
|
||||||
source: nsCString,
|
|
||||||
medium: nsCString,
|
|
||||||
campaign: nsCString,
|
|
||||||
term: nsCString,
|
|
||||||
content: nsCString,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FogAttributionMetrics {
|
|
||||||
fn take(&mut self, other: AttributionMetrics) {
|
|
||||||
if let Some(source) = other.source {
|
|
||||||
self.source = source.into();
|
|
||||||
}
|
|
||||||
if let Some(medium) = other.medium {
|
|
||||||
self.medium = medium.into();
|
|
||||||
}
|
|
||||||
if let Some(campaign) = other.campaign {
|
|
||||||
self.campaign = campaign.into();
|
|
||||||
}
|
|
||||||
if let Some(term) = other.term {
|
|
||||||
self.term = term.into();
|
|
||||||
}
|
|
||||||
if let Some(content) = other.content {
|
|
||||||
self.content = content.into();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<&FogAttributionMetrics> for AttributionMetrics {
|
|
||||||
fn from(value: &FogAttributionMetrics) -> Self {
|
|
||||||
let to_opt_string = |s: &nsCString| {
|
|
||||||
if s.is_empty() {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(s.to_utf8().into_owned())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AttributionMetrics {
|
|
||||||
source: to_opt_string(&value.source),
|
|
||||||
medium: to_opt_string(&value.medium),
|
|
||||||
campaign: to_opt_string(&value.campaign),
|
|
||||||
term: to_opt_string(&value.term),
|
|
||||||
content: to_opt_string(&value.content),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct FogDistributionMetrics {
|
|
||||||
name: nsCString,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FogDistributionMetrics {
|
|
||||||
fn take(&mut self, other: DistributionMetrics) {
|
|
||||||
if let Some(name) = other.name {
|
|
||||||
self.name = name.into();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<&FogDistributionMetrics> for DistributionMetrics {
|
|
||||||
fn from(value: &FogDistributionMetrics) -> Self {
|
|
||||||
let name = if value.name.is_empty() {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(value.name.to_utf8().into_owned())
|
|
||||||
};
|
|
||||||
DistributionMetrics { name }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn fog_update_attribution(attr: &FogAttributionMetrics) {
|
|
||||||
glean::update_attribution(attr.into());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn fog_test_get_attribution(value: &mut FogAttributionMetrics) {
|
|
||||||
value.take(glean::test_get_attribution());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn fog_update_distribution(dist: &FogDistributionMetrics) {
|
|
||||||
glean::update_distribution(dist.into());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn fog_test_get_distribution(value: &mut FogDistributionMetrics) {
|
|
||||||
value.take(glean::test_get_distribution());
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ add_task(async () => {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue()
|
Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnlyIpc.aLabeledCounter["1".repeat(112)].add(3);
|
Glean.testOnlyIpc.aLabeledCounter["1".repeat(72)].add(3);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue(),
|
() => Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -44,6 +44,7 @@ add_task(async () => {
|
|||||||
{
|
{
|
||||||
a_label: 1,
|
a_label: 1,
|
||||||
another_label: 2,
|
another_label: 2,
|
||||||
|
["1".repeat(72)]: 3,
|
||||||
},
|
},
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -609,8 +609,9 @@ TEST_F(FOGFixture, TestLabeledTimingDistWorks) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(FOGFixture, TestLabeledTimingDistTruncateGet) {
|
TEST_F(FOGFixture, TestLabeledTimingDistTruncateGet) {
|
||||||
|
// Note that bug 1959696 will up this limit to 111.
|
||||||
auto longKey =
|
auto longKey =
|
||||||
"this is a label that is longer than the new label limit of 111 characters introduced in bug 1959696 in April of 2025."_ns;
|
"this is a key that is longer than the present limit of 71 characters ok?"_ns;
|
||||||
|
|
||||||
auto sec = TimeDuration::FromMilliseconds(1);
|
auto sec = TimeDuration::FromMilliseconds(1);
|
||||||
test_only::where_has_the_time_gone.MaybeTruncateAndGet(longKey)
|
test_only::where_has_the_time_gone.MaybeTruncateAndGet(longKey)
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
/* Any copyright is dedicated to the Public Domain.
|
|
||||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
const { AppConstants } = ChromeUtils.importESModule(
|
|
||||||
"resource://gre/modules/AppConstants.sys.mjs"
|
|
||||||
);
|
|
||||||
|
|
||||||
add_setup(
|
|
||||||
/* on Android FOG is set up through head.js */
|
|
||||||
{ skip_if: () => AppConstants.platform == "android" },
|
|
||||||
function test_setup() {
|
|
||||||
// FOG needs a profile directory to put its data in.
|
|
||||||
do_get_profile();
|
|
||||||
|
|
||||||
// We need to initialize it once, otherwise operations will be stuck in the pre-init queue.
|
|
||||||
Services.fog.initializeFOG();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
add_task(function test_attribution_works() {
|
|
||||||
// Ensure we aren't racing Glean init.
|
|
||||||
// (Remove upon vendoring of a fix to bug 1959515).
|
|
||||||
Glean.testOnly.balloons.testGetValue();
|
|
||||||
|
|
||||||
let attr = Services.fog.testGetAttribution();
|
|
||||||
Assert.deepEqual(
|
|
||||||
attr,
|
|
||||||
{
|
|
||||||
source: null,
|
|
||||||
medium: null,
|
|
||||||
campaign: null,
|
|
||||||
term: null,
|
|
||||||
content: null,
|
|
||||||
},
|
|
||||||
"Initial attribution should be empty."
|
|
||||||
);
|
|
||||||
|
|
||||||
Services.fog.updateAttribution("source", null, "campaign", null, "content");
|
|
||||||
|
|
||||||
let expected = {
|
|
||||||
source: "source",
|
|
||||||
medium: null,
|
|
||||||
campaign: "campaign",
|
|
||||||
term: null,
|
|
||||||
content: "content",
|
|
||||||
};
|
|
||||||
attr = Services.fog.testGetAttribution();
|
|
||||||
Assert.deepEqual(attr, expected, "Must give what it got.");
|
|
||||||
});
|
|
||||||
|
|
||||||
add_task(function test_distribution_works() {
|
|
||||||
// Ensure we aren't racing Glean init.
|
|
||||||
// (Remove upon vendoring of a fix to bug 1959515).
|
|
||||||
Glean.testOnly.balloons.testGetValue();
|
|
||||||
|
|
||||||
let dist = Services.fog.testGetDistribution();
|
|
||||||
Assert.deepEqual(
|
|
||||||
dist,
|
|
||||||
{ name: null },
|
|
||||||
"Initial distribution should be empty."
|
|
||||||
);
|
|
||||||
|
|
||||||
Services.fog.updateDistribution("name");
|
|
||||||
|
|
||||||
dist = Services.fog.testGetDistribution();
|
|
||||||
Assert.deepEqual(dist, { name: "name" }, "Must give what it got.");
|
|
||||||
});
|
|
||||||
@@ -318,7 +318,7 @@ add_task(function test_gifft_labeled_counter() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue()
|
Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnlyIpc.aLabeledCounter["1".repeat(112)].add(3);
|
Glean.testOnlyIpc.aLabeledCounter["1".repeat(72)].add(3);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue(),
|
() => Glean.testOnlyIpc.aLabeledCounter.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -332,6 +332,7 @@ add_task(function test_gifft_labeled_counter() {
|
|||||||
{
|
{
|
||||||
a_label: 4,
|
a_label: 4,
|
||||||
another_label: 2,
|
another_label: 2,
|
||||||
|
["1".repeat(72)]: 3,
|
||||||
},
|
},
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
@@ -496,7 +497,7 @@ add_task(async function test_gifft_labeled_boolean() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.testOnly.mirrorsForLabeledBools.__other__.testGetValue()
|
Glean.testOnly.mirrorsForLabeledBools.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnly.mirrorsForLabeledBools["1".repeat(112)].set(true);
|
Glean.testOnly.mirrorsForLabeledBools["1".repeat(72)].set(true);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.mirrorsForLabeledBools.__other__.testGetValue(),
|
() => Glean.testOnly.mirrorsForLabeledBools.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -509,6 +510,7 @@ add_task(async function test_gifft_labeled_boolean() {
|
|||||||
{
|
{
|
||||||
a_label: true,
|
a_label: true,
|
||||||
another_label: false,
|
another_label: false,
|
||||||
|
["1".repeat(72)]: true,
|
||||||
},
|
},
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
@@ -807,7 +809,7 @@ add_task(async function test_gifft_labeled_quantity() {
|
|||||||
Assert.equal(1, Glean.testOnly.buttonJars.whoseGot.testGetValue());
|
Assert.equal(1, Glean.testOnly.buttonJars.whoseGot.testGetValue());
|
||||||
// What about invalid/__other__?
|
// What about invalid/__other__?
|
||||||
Assert.equal(undefined, Glean.testOnly.buttonJars.__other__.testGetValue());
|
Assert.equal(undefined, Glean.testOnly.buttonJars.__other__.testGetValue());
|
||||||
Glean.testOnly.buttonJars["1".repeat(112)].set(9000);
|
Glean.testOnly.buttonJars["1".repeat(72)].set(9000);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.buttonJars.__other__.testGetValue(),
|
() => Glean.testOnly.buttonJars.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -821,6 +823,7 @@ add_task(async function test_gifft_labeled_quantity() {
|
|||||||
{
|
{
|
||||||
pants: 42,
|
pants: 42,
|
||||||
whoseGot: 1,
|
whoseGot: 1,
|
||||||
|
["1".repeat(72)]: 9000,
|
||||||
},
|
},
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -103,9 +103,7 @@ add_task({ skip_if: () => runningInParent }, async function run_child_stuff() {
|
|||||||
|
|
||||||
// Has to be different from aLabeledCounter so the error we record doesn't
|
// Has to be different from aLabeledCounter so the error we record doesn't
|
||||||
// get in the way.
|
// get in the way.
|
||||||
Glean.testOnlyIpc.anotherLabeledCounter["1".repeat(112)].add(
|
Glean.testOnlyIpc.anotherLabeledCounter["1".repeat(72)].add(INVALID_COUNTERS);
|
||||||
INVALID_COUNTERS
|
|
||||||
);
|
|
||||||
|
|
||||||
Glean.testOnlyIpc.aLabeledCounterForHgram.true.add(1);
|
Glean.testOnlyIpc.aLabeledCounterForHgram.true.add(1);
|
||||||
Glean.testOnlyIpc.aLabeledCounterForHgram.false.add(1);
|
Glean.testOnlyIpc.aLabeledCounterForHgram.false.add(1);
|
||||||
@@ -279,7 +277,12 @@ add_task(
|
|||||||
"telemetry.test.mirror_for_labeled_counter",
|
"telemetry.test.mirror_for_labeled_counter",
|
||||||
"content"
|
"content"
|
||||||
);
|
);
|
||||||
Assert.deepEqual(undefined, value);
|
Assert.deepEqual(
|
||||||
|
{
|
||||||
|
["1".repeat(72)]: INVALID_COUNTERS,
|
||||||
|
},
|
||||||
|
value
|
||||||
|
);
|
||||||
|
|
||||||
const boolHgramCounters = Glean.testOnlyIpc.aLabeledCounterForHgram;
|
const boolHgramCounters = Glean.testOnlyIpc.aLabeledCounterForHgram;
|
||||||
Assert.equal(boolHgramCounters.true.testGetValue(), 1);
|
Assert.equal(boolHgramCounters.true.testGetValue(), 1);
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ add_task(async function test_fog_labels_conform() {
|
|||||||
"wednesday",
|
"wednesday",
|
||||||
Glean.testOnly.mabelsLabelMaker.camelCase.testGetValue()
|
Glean.testOnly.mabelsLabelMaker.camelCase.testGetValue()
|
||||||
);
|
);
|
||||||
const veryLong = "1".repeat(112);
|
const veryLong = "1".repeat(72);
|
||||||
Glean.testOnly.mabelsLabelMaker[veryLong].set("seventy-two");
|
Glean.testOnly.mabelsLabelMaker[veryLong].set("seventy-two");
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.mabelsLabelMaker[veryLong].testGetValue(),
|
() => Glean.testOnly.mabelsLabelMaker[veryLong].testGetValue(),
|
||||||
@@ -358,7 +358,7 @@ add_task(async function test_fog_labeled_boolean_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.testOnly.mabelsLikeBalloons.__other__.testGetValue()
|
Glean.testOnly.mabelsLikeBalloons.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnly.mabelsLikeBalloons["1".repeat(112)].set(true);
|
Glean.testOnly.mabelsLikeBalloons["1".repeat(72)].set(true);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.mabelsLikeBalloons.__other__.testGetValue(),
|
() => Glean.testOnly.mabelsLikeBalloons.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -387,7 +387,7 @@ add_task(async function test_fog_labeled_counter_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.testOnly.mabelsKitchenCounters.__other__.testGetValue()
|
Glean.testOnly.mabelsKitchenCounters.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnly.mabelsKitchenCounters["1".repeat(112)].add(1);
|
Glean.testOnly.mabelsKitchenCounters["1".repeat(72)].add(1);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.mabelsKitchenCounters.__other__.testGetValue(),
|
() => Glean.testOnly.mabelsKitchenCounters.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -416,7 +416,7 @@ add_task(async function test_fog_labeled_string_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.testOnly.mabelsBalloonStrings.__other__.testGetValue()
|
Glean.testOnly.mabelsBalloonStrings.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnly.mabelsBalloonStrings["1".repeat(112)].set("valid");
|
Glean.testOnly.mabelsBalloonStrings["1".repeat(72)].set("valid");
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.mabelsBalloonStrings.__other__.testGetValue(),
|
() => Glean.testOnly.mabelsBalloonStrings.__other__.testGetValue(),
|
||||||
/DataError/
|
/DataError/
|
||||||
@@ -715,7 +715,7 @@ add_task(async function test_fog_labeled_custom_distribution_works() {
|
|||||||
Glean.testOnly.mabelsCustomLabelLengths.__other__.testGetValue()
|
Glean.testOnly.mabelsCustomLabelLengths.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.testOnly.mabelsCustomLabelLengths[
|
Glean.testOnly.mabelsCustomLabelLengths[
|
||||||
"1".repeat(112)
|
"1".repeat(72)
|
||||||
].accumulateSingleSample(3);
|
].accumulateSingleSample(3);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.mabelsCustomLabelLengths.__other__.testGetValue(),
|
() => Glean.testOnly.mabelsCustomLabelLengths.__other__.testGetValue(),
|
||||||
@@ -786,7 +786,7 @@ add_task(async function test_fog_labeled_quantity_works() {
|
|||||||
Assert.equal(0, Glean.testOnly.buttonJars.curling.testGetValue());
|
Assert.equal(0, Glean.testOnly.buttonJars.curling.testGetValue());
|
||||||
// What about invalid/__other__?
|
// What about invalid/__other__?
|
||||||
Assert.equal(undefined, Glean.testOnly.buttonJars.__other__.testGetValue());
|
Assert.equal(undefined, Glean.testOnly.buttonJars.__other__.testGetValue());
|
||||||
Glean.testOnly.buttonJars["1".repeat(112)].set(0);
|
Glean.testOnly.buttonJars["1".repeat(72)].set(0);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.testOnly.buttonJars.__other__.testGetValue(),
|
() => Glean.testOnly.buttonJars.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ add_task({ skip_if: () => runningInParent }, async function run_child_stuff() {
|
|||||||
COUNTERS_WITH_JUNK_ON_THEM
|
COUNTERS_WITH_JUNK_ON_THEM
|
||||||
);
|
);
|
||||||
|
|
||||||
Glean.testOnly.mabelsBathroomCounters["1".repeat(112)].add(INVALID_COUNTERS);
|
Glean.testOnly.mabelsBathroomCounters["1".repeat(72)].add(INVALID_COUNTERS);
|
||||||
|
|
||||||
Glean.testOnlyIpc.irate.addToNumerator(44);
|
Glean.testOnlyIpc.irate.addToNumerator(44);
|
||||||
Glean.testOnlyIpc.irate.addToDenominator(14);
|
Glean.testOnlyIpc.irate.addToDenominator(14);
|
||||||
|
|||||||
@@ -379,7 +379,7 @@ add_task(async function test_jog_labeled_boolean_works() {
|
|||||||
Assert.equal(undefined, Glean.jogCat.jogLabeledBool.__other__.testGetValue());
|
Assert.equal(undefined, Glean.jogCat.jogLabeledBool.__other__.testGetValue());
|
||||||
Glean.jogCat.jogLabeledBool.NowValidLabel.set(true);
|
Glean.jogCat.jogLabeledBool.NowValidLabel.set(true);
|
||||||
Assert.ok(Glean.jogCat.jogLabeledBool.NowValidLabel.testGetValue());
|
Assert.ok(Glean.jogCat.jogLabeledBool.NowValidLabel.testGetValue());
|
||||||
Glean.jogCat.jogLabeledBool["1".repeat(112)].set(true);
|
Glean.jogCat.jogLabeledBool["1".repeat(72)].set(true);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.jogCat.jogLabeledBool.__other__.testGetValue(),
|
() => Glean.jogCat.jogLabeledBool.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -448,7 +448,7 @@ add_task(async function test_jog_labeled_counter_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.jogCat.jogLabeledCounter.__other__.testGetValue()
|
Glean.jogCat.jogLabeledCounter.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.jogCat.jogLabeledCounter["1".repeat(112)].add(1);
|
Glean.jogCat.jogLabeledCounter["1".repeat(72)].add(1);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.jogCat.jogLabeledCounter.__other__.testGetValue(),
|
() => Glean.jogCat.jogLabeledCounter.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
@@ -486,7 +486,7 @@ add_task(async function test_jog_labeled_counter_with_static_labels_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.jogCat.jogLabeledCounterWithLabels.__other__.testGetValue()
|
Glean.jogCat.jogLabeledCounterWithLabels.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.jogCat.jogLabeledCounterWithLabels["1".repeat(112)].add(1);
|
Glean.jogCat.jogLabeledCounterWithLabels["1".repeat(72)].add(1);
|
||||||
// TODO:(bug 1766515) - This should throw.
|
// TODO:(bug 1766515) - This should throw.
|
||||||
/*Assert.throws(
|
/*Assert.throws(
|
||||||
() => Glean.jogCat.jogLabeledCounterWithLabels.__other__.testGetValue(),
|
() => Glean.jogCat.jogLabeledCounterWithLabels.__other__.testGetValue(),
|
||||||
@@ -522,7 +522,7 @@ add_task(async function test_jog_labeled_string_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.jogCat.jogLabeledString.__other__.testGetValue()
|
Glean.jogCat.jogLabeledString.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.jogCat.jogLabeledString["1".repeat(112)].set("valid");
|
Glean.jogCat.jogLabeledString["1".repeat(72)].set("valid");
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.jogCat.jogLabeledString.__other__.testGetValue(),
|
() => Glean.jogCat.jogLabeledString.__other__.testGetValue(),
|
||||||
/DataError/
|
/DataError/
|
||||||
@@ -559,7 +559,7 @@ add_task(async function test_jog_labeled_string_with_labels_works() {
|
|||||||
undefined,
|
undefined,
|
||||||
Glean.jogCat.jogLabeledStringWithLabels.__other__.testGetValue()
|
Glean.jogCat.jogLabeledStringWithLabels.__other__.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.jogCat.jogLabeledStringWithLabels["1".repeat(112)].set("valid");
|
Glean.jogCat.jogLabeledStringWithLabels["1".repeat(72)].set("valid");
|
||||||
// TODO:(bug 1766515) - This should throw.
|
// TODO:(bug 1766515) - This should throw.
|
||||||
/*Assert.throws(
|
/*Assert.throws(
|
||||||
() => Glean.jogCat.jogLabeledStringWithLabels.__other__.testGetValue(),
|
() => Glean.jogCat.jogLabeledStringWithLabels.__other__.testGetValue(),
|
||||||
@@ -898,7 +898,7 @@ add_task(async function test_jog_labeled_quantity_works() {
|
|||||||
100,
|
100,
|
||||||
Glean.jogCat.jogLabeledQuantity.NowValidLabel.testGetValue()
|
Glean.jogCat.jogLabeledQuantity.NowValidLabel.testGetValue()
|
||||||
);
|
);
|
||||||
Glean.jogCat.jogLabeledQuantity["1".repeat(112)].set(true);
|
Glean.jogCat.jogLabeledQuantity["1".repeat(72)].set(true);
|
||||||
Assert.throws(
|
Assert.throws(
|
||||||
() => Glean.jogCat.jogLabeledQuantity.__other__.testGetValue(),
|
() => Glean.jogCat.jogLabeledQuantity.__other__.testGetValue(),
|
||||||
/DataError/,
|
/DataError/,
|
||||||
|
|||||||
@@ -207,12 +207,12 @@ add_task({ skip_if: () => runningInParent }, async function run_child_stuff() {
|
|||||||
Glean.jogIpc.jogLabeledCounter.label_1.add(COUNTERS_1);
|
Glean.jogIpc.jogLabeledCounter.label_1.add(COUNTERS_1);
|
||||||
Glean.jogIpc.jogLabeledCounter.label_2.add(COUNTERS_2);
|
Glean.jogIpc.jogLabeledCounter.label_2.add(COUNTERS_2);
|
||||||
|
|
||||||
Glean.jogIpc.jogLabeledCounterErr["1".repeat(112)].add(INVALID_COUNTERS);
|
Glean.jogIpc.jogLabeledCounterErr["1".repeat(72)].add(INVALID_COUNTERS);
|
||||||
|
|
||||||
Glean.jogIpc.jogLabeledCounterWithLabels.label_1.add(COUNTERS_1);
|
Glean.jogIpc.jogLabeledCounterWithLabels.label_1.add(COUNTERS_1);
|
||||||
Glean.jogIpc.jogLabeledCounterWithLabels.label_2.add(COUNTERS_2);
|
Glean.jogIpc.jogLabeledCounterWithLabels.label_2.add(COUNTERS_2);
|
||||||
|
|
||||||
Glean.jogIpc.jogLabeledCounterWithLabelsErr["1".repeat(112)].add(
|
Glean.jogIpc.jogLabeledCounterWithLabelsErr["1".repeat(72)].add(
|
||||||
INVALID_COUNTERS
|
INVALID_COUNTERS
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
firefox-appdir = "browser"
|
firefox-appdir = "browser"
|
||||||
head = "head.js"
|
head = "head.js"
|
||||||
|
|
||||||
["test_AttributionDistribution.js"]
|
|
||||||
skip-if = ["os == 'android'"] # FOG isn't responsible for attribution/distribution on Android.
|
|
||||||
|
|
||||||
["test_FOGIPCLimit.js"]
|
["test_FOGIPCLimit.js"]
|
||||||
|
|
||||||
["test_FOGInit.js"]
|
["test_FOGInit.js"]
|
||||||
|
|||||||
@@ -488,138 +488,6 @@ FOG::TestRegisterRuntimePing(
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
FOG::UpdateAttribution(const nsACString& aSource, const nsACString& aMedium,
|
|
||||||
const nsACString& aCampaign, const nsACString& aTerm,
|
|
||||||
const nsACString& aContent) {
|
|
||||||
MOZ_ASSERT(XRE_IsParentProcess());
|
|
||||||
glean::impl::FogAttributionMetrics attr{.source = nsCString(aSource),
|
|
||||||
.medium = nsCString(aMedium),
|
|
||||||
.campaign = nsCString(aCampaign),
|
|
||||||
.term = nsCString(aTerm),
|
|
||||||
.content = nsCString(aContent)};
|
|
||||||
glean::impl::fog_update_attribution(&attr);
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
FOG::TestGetAttribution(JSContext* aCx, JS::MutableHandleValue aResult) {
|
|
||||||
#ifdef MOZ_GLEAN_ANDROID
|
|
||||||
NS_WARNING("Don't test attribution from Gecko in Android. Throwing.");
|
|
||||||
aResult.set(JS::UndefinedValue());
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
#else
|
|
||||||
MOZ_ASSERT(XRE_IsParentProcess());
|
|
||||||
glean::impl::FogAttributionMetrics attr;
|
|
||||||
glean::impl::fog_test_get_attribution(&attr);
|
|
||||||
|
|
||||||
JS::RootedObject jsAttr(aCx, JS_NewPlainObject(aCx));
|
|
||||||
NS_ENSURE_TRUE(jsAttr, NS_ERROR_FAILURE);
|
|
||||||
|
|
||||||
JS::RootedValue jsSource(aCx);
|
|
||||||
if (attr.source.IsEmpty()) {
|
|
||||||
NS_ENSURE_TRUE(JS_DefineProperty(aCx, jsAttr, "source", JS::NullHandleValue,
|
|
||||||
JSPROP_ENUMERATE),
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
} else if (!dom::ToJSValue(aCx, attr.source, &jsSource) ||
|
|
||||||
!JS_DefineProperty(aCx, jsAttr, "source", jsSource,
|
|
||||||
JSPROP_ENUMERATE)) {
|
|
||||||
NS_WARNING("Failed to define attribution.source.");
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
JS::RootedValue jsMedium(aCx);
|
|
||||||
if (attr.medium.IsEmpty()) {
|
|
||||||
NS_ENSURE_TRUE(JS_DefineProperty(aCx, jsAttr, "medium", JS::NullHandleValue,
|
|
||||||
JSPROP_ENUMERATE),
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
} else if (!dom::ToJSValue(aCx, attr.medium, &jsMedium) ||
|
|
||||||
!JS_DefineProperty(aCx, jsAttr, "medium", jsMedium,
|
|
||||||
JSPROP_ENUMERATE)) {
|
|
||||||
NS_WARNING("Failed to define attribution.medium.");
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
JS::RootedValue jsCampaign(aCx);
|
|
||||||
if (attr.campaign.IsEmpty()) {
|
|
||||||
NS_ENSURE_TRUE(JS_DefineProperty(aCx, jsAttr, "campaign",
|
|
||||||
JS::NullHandleValue, JSPROP_ENUMERATE),
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
} else if (!dom::ToJSValue(aCx, attr.campaign, &jsCampaign) ||
|
|
||||||
!JS_DefineProperty(aCx, jsAttr, "campaign", jsCampaign,
|
|
||||||
JSPROP_ENUMERATE)) {
|
|
||||||
NS_WARNING("Failed to define attribution.campaign.");
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
JS::RootedValue jsTerm(aCx);
|
|
||||||
if (attr.term.IsEmpty()) {
|
|
||||||
NS_ENSURE_TRUE(JS_DefineProperty(aCx, jsAttr, "term", JS::NullHandleValue,
|
|
||||||
JSPROP_ENUMERATE),
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
} else if (!dom::ToJSValue(aCx, attr.term, &jsTerm) ||
|
|
||||||
!JS_DefineProperty(aCx, jsAttr, "term", jsTerm,
|
|
||||||
JSPROP_ENUMERATE)) {
|
|
||||||
NS_WARNING("Failed to define attribution.term.");
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
JS::RootedValue jsContent(aCx);
|
|
||||||
if (attr.content.IsEmpty()) {
|
|
||||||
NS_ENSURE_TRUE(JS_DefineProperty(aCx, jsAttr, "content",
|
|
||||||
JS::NullHandleValue, JSPROP_ENUMERATE),
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
} else if (!dom::ToJSValue(aCx, attr.content, &jsContent) ||
|
|
||||||
!JS_DefineProperty(aCx, jsAttr, "content", jsContent,
|
|
||||||
JSPROP_ENUMERATE)) {
|
|
||||||
NS_WARNING("Failed to define attribution.content.");
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
aResult.setObject(*jsAttr);
|
|
||||||
return NS_OK;
|
|
||||||
#endif // MOZ_GLEAN_ANDROID
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
FOG::UpdateDistribution(const nsACString& aName) {
|
|
||||||
MOZ_ASSERT(XRE_IsParentProcess());
|
|
||||||
glean::impl::FogDistributionMetrics dist{.name = nsCString(aName)};
|
|
||||||
glean::impl::fog_update_distribution(&dist);
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
FOG::TestGetDistribution(JSContext* aCx, JS::MutableHandleValue aResult) {
|
|
||||||
#ifdef MOZ_GLEAN_ANDROID
|
|
||||||
NS_WARNING("Don't test distribution from Gecko in Android. Throwing.");
|
|
||||||
aResult.set(JS::UndefinedValue());
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
#else
|
|
||||||
MOZ_ASSERT(XRE_IsParentProcess());
|
|
||||||
glean::impl::FogDistributionMetrics dist;
|
|
||||||
glean::impl::fog_test_get_distribution(&dist);
|
|
||||||
|
|
||||||
JS::RootedObject jsDist(aCx, JS_NewPlainObject(aCx));
|
|
||||||
NS_ENSURE_TRUE(jsDist, NS_ERROR_FAILURE);
|
|
||||||
|
|
||||||
JS::RootedValue jsName(aCx);
|
|
||||||
if (dist.name.IsEmpty()) {
|
|
||||||
NS_ENSURE_TRUE(JS_DefineProperty(aCx, jsDist, "name", JS::NullHandleValue,
|
|
||||||
JSPROP_ENUMERATE),
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
} else if (!dom::ToJSValue(aCx, dist.name, &jsName) ||
|
|
||||||
!JS_DefineProperty(aCx, jsDist, "name", jsName,
|
|
||||||
JSPROP_ENUMERATE)) {
|
|
||||||
NS_WARNING("Failed to define distribution.name.");
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
aResult.setObject(*jsDist);
|
|
||||||
return NS_OK;
|
|
||||||
#endif // MOZ_GLEAN_ANDROID
|
|
||||||
}
|
|
||||||
|
|
||||||
void FOG::InitMemoryReporter() { RegisterWeakMemoryReporter(this); }
|
void FOG::InitMemoryReporter() { RegisterWeakMemoryReporter(this); }
|
||||||
|
|
||||||
MOZ_DEFINE_MALLOC_SIZE_OF(FOGMallocSizeOf)
|
MOZ_DEFINE_MALLOC_SIZE_OF(FOGMallocSizeOf)
|
||||||
|
|||||||
@@ -197,47 +197,4 @@ interface nsIFOG : nsISupports
|
|||||||
in Array<ACString> aReasonCodes,
|
in Array<ACString> aReasonCodes,
|
||||||
in boolean aFollowsCollectionEnabled,
|
in boolean aFollowsCollectionEnabled,
|
||||||
in Array<ACString> aUploaderCapabilities);
|
in Array<ACString> aUploaderCapabilities);
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the core attribution metrics in Glean.
|
|
||||||
*
|
|
||||||
* @param aSource - The product's attribution source (e.g. "google-play").
|
|
||||||
* @param aMedium - The product's attribution medium (e.g. "organic" for a search engine).
|
|
||||||
* @param aCampaign - The product's attribution campaign (e.g. "mozilla-org").
|
|
||||||
* @param aTerm - The product's attribution term (e.g. "browser with developer tools for android").
|
|
||||||
* @param aContent - The product's attribution content (e.g. "firefoxview").
|
|
||||||
*/
|
|
||||||
void updateAttribution(in ACString aSource,
|
|
||||||
in ACString aMedium,
|
|
||||||
in ACString aCampaign,
|
|
||||||
in ACString aTerm,
|
|
||||||
in ACString aContent);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ** Test-only Method **
|
|
||||||
*
|
|
||||||
* Returns the core attribution data from Glean.
|
|
||||||
*
|
|
||||||
* @returns the core attribution data from Glean in the form
|
|
||||||
* `{source, medium, campaign, term, content}`.
|
|
||||||
*/
|
|
||||||
[implicit_jscontext]
|
|
||||||
jsval testGetAttribution();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the core distribution metrics in Glean.
|
|
||||||
*
|
|
||||||
* @param aName - The product's distribution name (e.g. "MozillaOnline").
|
|
||||||
*/
|
|
||||||
void updateDistribution(in ACString aName);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ** Test-only Method **
|
|
||||||
*
|
|
||||||
* Returns the core distribution data from Glean.
|
|
||||||
*
|
|
||||||
* @returns the core distribution data from Glean in the form `{name}`.
|
|
||||||
*/
|
|
||||||
[implicit_jscontext]
|
|
||||||
jsval testGetDistribution();
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ var gActiveExperimentStartupBuffer = new Map();
|
|||||||
|
|
||||||
// For Powering arewegleanyet.com (See bug 1944592)
|
// For Powering arewegleanyet.com (See bug 1944592)
|
||||||
// Legacy Count: 110
|
// Legacy Count: 110
|
||||||
// Glean Count: 35
|
// Glean Count: 19
|
||||||
|
|
||||||
var gGlobalEnvironment;
|
var gGlobalEnvironment;
|
||||||
function getGlobal() {
|
function getGlobal() {
|
||||||
@@ -1781,22 +1781,6 @@ EnvironmentCache.prototype = {
|
|||||||
: data[key];
|
: data[key];
|
||||||
}
|
}
|
||||||
this._currentEnvironment.settings.attribution = attributionData;
|
this._currentEnvironment.settings.attribution = attributionData;
|
||||||
let extAttribution = {
|
|
||||||
experiment: attributionData.experiment,
|
|
||||||
variation: attributionData.variation,
|
|
||||||
ua: attributionData.ua,
|
|
||||||
dltoken: attributionData.dltoken,
|
|
||||||
msstoresignedin: attributionData.msstoresignedin,
|
|
||||||
dlsource: attributionData.dlsource,
|
|
||||||
};
|
|
||||||
Services.fog.updateAttribution(
|
|
||||||
attributionData.source,
|
|
||||||
attributionData.medium,
|
|
||||||
attributionData.campaign,
|
|
||||||
attributionData.term,
|
|
||||||
attributionData.content
|
|
||||||
);
|
|
||||||
Glean.gleanAttribution.ext.set(extAttribution);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1902,15 +1886,6 @@ EnvironmentCache.prototype = {
|
|||||||
);
|
);
|
||||||
partnerData.partnerNames = partnerBranch.getChildList("");
|
partnerData.partnerNames = partnerBranch.getChildList("");
|
||||||
|
|
||||||
Services.fog.updateDistribution(partnerData.distributionId);
|
|
||||||
Glean.gleanDistribution.ext.set({
|
|
||||||
distributionVersion: partnerData.distributionVersion,
|
|
||||||
partnerId: partnerData.partnerId,
|
|
||||||
distributor: partnerData.distributor,
|
|
||||||
distributorChannel: partnerData.distributorChannel,
|
|
||||||
partnerNames: partnerData.partnerNames,
|
|
||||||
});
|
|
||||||
|
|
||||||
return partnerData;
|
return partnerData;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -379,18 +379,6 @@ export var TelemetryEnvironmentTesting = {
|
|||||||
lazy.Assert.equal(typeof data.settings.attribution, "object");
|
lazy.Assert.equal(typeof data.settings.attribution, "object");
|
||||||
lazy.Assert.equal(data.settings.attribution.source, "google.com");
|
lazy.Assert.equal(data.settings.attribution.source, "google.com");
|
||||||
lazy.Assert.equal(data.settings.attribution.dlsource, "unittest");
|
lazy.Assert.equal(data.settings.attribution.dlsource, "unittest");
|
||||||
let attr = Services.fog.testGetAttribution();
|
|
||||||
lazy.Assert.equal(
|
|
||||||
attr.source,
|
|
||||||
"google.com",
|
|
||||||
"Must have correct attribution.source."
|
|
||||||
);
|
|
||||||
let attrExt = Glean.gleanAttribution.ext.testGetValue();
|
|
||||||
lazy.Assert.equal(
|
|
||||||
attrExt.dlsource,
|
|
||||||
"unittest",
|
|
||||||
"Must have correct dlsource."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.checkIntlSettings(data.settings);
|
this.checkIntlSettings(data.settings);
|
||||||
@@ -456,8 +444,6 @@ export var TelemetryEnvironmentTesting = {
|
|||||||
"There must be a partner section in Environment."
|
"There must be a partner section in Environment."
|
||||||
);
|
);
|
||||||
|
|
||||||
let dist = Services.fog.testGetDistribution();
|
|
||||||
let distExt = Glean.gleanDistribution.ext.testGetValue();
|
|
||||||
for (let f in EXPECTED_FIELDS) {
|
for (let f in EXPECTED_FIELDS) {
|
||||||
let expected = isInitial ? null : EXPECTED_FIELDS[f];
|
let expected = isInitial ? null : EXPECTED_FIELDS[f];
|
||||||
lazy.Assert.strictEqual(
|
lazy.Assert.strictEqual(
|
||||||
@@ -465,32 +451,14 @@ export var TelemetryEnvironmentTesting = {
|
|||||||
expected,
|
expected,
|
||||||
f + " must have the correct value."
|
f + " must have the correct value."
|
||||||
);
|
);
|
||||||
if (f == "distributionId") {
|
|
||||||
lazy.Assert.strictEqual(
|
|
||||||
dist.name,
|
|
||||||
expected,
|
|
||||||
"Core Glean distribution must be correct."
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
lazy.Assert.equal(
|
|
||||||
distExt[f],
|
|
||||||
expected,
|
|
||||||
`Extended Glean distribution field "${f}" must be correct.`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that "partnerNames" exists and contains the correct element.
|
// Check that "partnerNames" exists and contains the correct element.
|
||||||
lazy.Assert.ok(Array.isArray(data.partner.partnerNames));
|
lazy.Assert.ok(Array.isArray(data.partner.partnerNames));
|
||||||
if (isInitial) {
|
if (isInitial) {
|
||||||
lazy.Assert.equal(data.partner.partnerNames.length, 0);
|
lazy.Assert.equal(data.partner.partnerNames.length, 0);
|
||||||
lazy.Assert.equal(distExt.partnerNames, null);
|
|
||||||
} else {
|
} else {
|
||||||
lazy.Assert.ok(data.partner.partnerNames.includes(PARTNER_NAME));
|
lazy.Assert.ok(data.partner.partnerNames.includes(PARTNER_NAME));
|
||||||
lazy.Assert.ok(
|
|
||||||
distExt.partnerNames.includes(PARTNER_NAME),
|
|
||||||
"Glean partner names contain expected partner name."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user