mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
Bug 1781030 - Upgrade to Glean v51.0.1. r=perry.mcmanis,supply-chain-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D152626
This commit is contained in:
parent
760010bb23
commit
94b2463ce2
13
Cargo.lock
generated
13
Cargo.lock
generated
@ -58,9 +58,9 @@ checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
|
||||
|
||||
[[package]]
|
||||
name = "android_logger"
|
||||
version = "0.11.0"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b74b7ddf197de32e415d197aa21c1c0cb36e01e4794fd801302280ac7847ee02"
|
||||
checksum = "b5e9dd62f37dea550caf48c77591dc50bd1a378ce08855be1a0c42a97b7550fb"
|
||||
dependencies = [
|
||||
"android_log-sys",
|
||||
"env_logger 0.9.0",
|
||||
@ -2203,9 +2203,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "glean"
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe54494f067655870956431d2a6942e56611da53d67101dd64847445b29367b0"
|
||||
checksum = "a20e782acaa1771ea4de48aa8bcf3421ae1e77c36dbae7595428fc2e333d0df5"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
@ -2223,16 +2223,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "glean-core"
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f32fadcf37284fdaf70d1e9d0afd753b8a5c02348fd2e366e81e2b6f9ba84091"
|
||||
checksum = "127156f8df21363a476e37b7adf3fe89995cf48fda281563fe7ae1bdb1160760"
|
||||
dependencies = [
|
||||
"android_logger",
|
||||
"bincode",
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
"env_logger 0.9.0",
|
||||
"ffi-support",
|
||||
"flate2",
|
||||
"log",
|
||||
"once_cell",
|
||||
|
@ -36,7 +36,7 @@ allprojects {
|
||||
topsrcdir = gradle.mozconfig.topsrcdir
|
||||
topobjdir = gradle.mozconfig.topobjdir
|
||||
|
||||
gleanVersion = "50.1.3"
|
||||
gleanVersion = "51.0.1"
|
||||
if (gleanVersion != getRustVersionFor("glean")) {
|
||||
throw new StopExecutionException("Mismatched Glean version, expected: ${gleanVersion}," +
|
||||
" found ${getRustVersionFor("glean")}")
|
||||
|
23
gfx/wr/Cargo.lock
generated
23
gfx/wr/Cargo.lock
generated
@ -31,9 +31,9 @@ checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
|
||||
|
||||
[[package]]
|
||||
name = "android_logger"
|
||||
version = "0.11.0"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b74b7ddf197de32e415d197aa21c1c0cb36e01e4794fd801302280ac7847ee02"
|
||||
checksum = "b5e9dd62f37dea550caf48c77591dc50bd1a378ce08855be1a0c42a97b7550fb"
|
||||
dependencies = [
|
||||
"android_log-sys",
|
||||
"env_logger",
|
||||
@ -714,16 +714,6 @@ dependencies = [
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ffi-support"
|
||||
version = "0.4.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "27838c6815cfe9de2d3aeb145ffd19e565f577414b33f3bdbf42fe040e9e0ff6"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.0.23"
|
||||
@ -876,9 +866,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "glean"
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe54494f067655870956431d2a6942e56611da53d67101dd64847445b29367b0"
|
||||
checksum = "a20e782acaa1771ea4de48aa8bcf3421ae1e77c36dbae7595428fc2e333d0df5"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
@ -896,16 +886,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "glean-core"
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f32fadcf37284fdaf70d1e9d0afd753b8a5c02348fd2e366e81e2b6f9ba84091"
|
||||
checksum = "127156f8df21363a476e37b7adf3fe89995cf48fda281563fe7ae1bdb1160760"
|
||||
dependencies = [
|
||||
"android_logger",
|
||||
"bincode",
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
"env_logger",
|
||||
"ffi-support",
|
||||
"flate2",
|
||||
"log",
|
||||
"once_cell",
|
||||
|
@ -51,7 +51,7 @@ svg_fmt = "0.4"
|
||||
tracy-rs = "0.1.2"
|
||||
derive_more = { version = "0.99", default-features = false, features = ["add_assign"] }
|
||||
etagere = "0.2.6"
|
||||
glean = "50.1.3"
|
||||
glean = "51.0.1"
|
||||
fog = { version = "0.1.0", optional = true }
|
||||
swgl = { path = "../swgl", optional = true }
|
||||
topological-sort = "0.1"
|
||||
|
@ -130,7 +130,7 @@ pth:xpcom/geckoprocesstypes_generator
|
||||
pth:xpcom/idl-parser
|
||||
# glean-sdk may not be installable if a wheel isn't available
|
||||
# and it has to be built from source.
|
||||
pypi-optional:glean-sdk==50.1.3:telemetry will not be collected
|
||||
pypi-optional:glean-sdk==51.0.1:telemetry will not be collected
|
||||
# Mach gracefully handles the case where `psutil` is unavailable.
|
||||
# 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).
|
||||
|
@ -7,6 +7,12 @@ criteria = "safe-to-deploy"
|
||||
version = "0.11.0"
|
||||
notes = "Small crate, wrapping Android log functionality, reviewed by janerik"
|
||||
|
||||
[[audits.android_logger]]
|
||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
delta = "0.11.0 -> 0.11.1"
|
||||
notes = "Small crate, wrapping Android log functionality, now switched to properly using MaybeUninit"
|
||||
|
||||
[[audits.android_system_properties]]
|
||||
who = "Nicolas Silva <nical@fastmail.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
@ -122,6 +128,12 @@ criteria = "safe-to-deploy"
|
||||
delta = "50.1.2 -> 50.1.3"
|
||||
notes = "Unchanged from last version"
|
||||
|
||||
[[audits.glean]]
|
||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
delta = "50.1.3 -> 51.0.1"
|
||||
notes = "Maintained by the Glean team at Mozilla"
|
||||
|
||||
[[audits.glean-core]]
|
||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
@ -140,6 +152,12 @@ criteria = "safe-to-deploy"
|
||||
delta = "50.1.2 -> 50.1.3"
|
||||
notes = "Bug fix release with minimal changes, changes done by myself"
|
||||
|
||||
[[audits.glean-core]]
|
||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
delta = "50.1.3 -> 51.0.1"
|
||||
notes = "Maintained by the Glean team at Mozilla"
|
||||
|
||||
[[audits.linked-hash-map]]
|
||||
who = "Aria Beingessner <a.beingessner@gmail.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
|
@ -1 +1 @@
|
||||
{"files":{"Cargo.toml":"896268b277c2cd333293139e868abac82c39983de9aa56aead4464c38239b66a","LICENSE-APACHE":"99938c5864dd33decb62ab20fd883a9b00181d768ae887a4f19b2d0015c41dc9","LICENSE-MIT":"35043211d1b7be8f7e3f9cad27d981f2189ba9a39d9527b275b3c9740298dfe2","README.md":"bf2e6227790edeb5959c2be250b71d1a197a3a344dc5fc1638fbb39c73bdfd21","src/lib.rs":"e3a0a6bb68d7bad681a978274b612e77cecc41112b448209a09c96b5b33d029e","tests/config_log_level.rs":"8aae2c7decbcf12a2a454486c9d4dd4a82a20e01d327c4abf4e9cfded973159d","tests/default_init.rs":"ef18c9ea38687a178623c11acfa3d34d16b9030eaad337ab9ed6a609a2c42ca2","tests/multiple_init.rs":"a6ed4986a758b7b2322c6ad0a18ec99fd06521a6c8767a6622eab2cbf9be601e"},"package":"b74b7ddf197de32e415d197aa21c1c0cb36e01e4794fd801302280ac7847ee02"}
|
||||
{"files":{"Cargo.toml":"abdac5f9f4574b24d387e1a7d6e44cfd0d1bf9a95ebd858f51dc02bf5604c582","LICENSE-APACHE":"99938c5864dd33decb62ab20fd883a9b00181d768ae887a4f19b2d0015c41dc9","LICENSE-MIT":"35043211d1b7be8f7e3f9cad27d981f2189ba9a39d9527b275b3c9740298dfe2","README.md":"bf2e6227790edeb5959c2be250b71d1a197a3a344dc5fc1638fbb39c73bdfd21","src/lib.rs":"b789a29f5f55ccdc2ba9428747a39ce2a649e0c35ac30c983b0fa6c5f549e855","tests/config_log_level.rs":"dbe26e82c497031f47804ed59dfcdb5d09af7354591f90ea89b46315e7d2edc9","tests/default_init.rs":"e5c77dbcf3dc2d9e21e5c48c190e6cdcdea7d8eecea8c8ce513ca98223c46b49","tests/multiple_init.rs":"42adfe70b2f951a3b3f051235709013124df613a7967ca5bad998fc5356b8b9f"},"package":"b5e9dd62f37dea550caf48c77591dc50bd1a378ce08855be1a0c42a97b7550fb"}
|
2
third_party/rust/android_logger/Cargo.toml
vendored
2
third_party/rust/android_logger/Cargo.toml
vendored
@ -11,7 +11,7 @@
|
||||
|
||||
[package]
|
||||
name = "android_logger"
|
||||
version = "0.11.0"
|
||||
version = "0.11.1"
|
||||
authors = ["The android_logger Developers"]
|
||||
description = """
|
||||
A logging implementation for `log` which hooks to android log output.
|
||||
|
95
third_party/rust/android_logger/src/lib.rs
vendored
95
third_party/rust/android_logger/src/lib.rs
vendored
@ -72,15 +72,15 @@ extern crate log;
|
||||
|
||||
extern crate env_logger;
|
||||
|
||||
use log::{Level, Log, Metadata, Record};
|
||||
#[cfg(target_os = "android")]
|
||||
use log_ffi::LogPriority;
|
||||
use log::{Level, Log, Metadata, Record};
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::mem;
|
||||
use std::fmt;
|
||||
use std::mem::{self, MaybeUninit};
|
||||
use std::ptr;
|
||||
|
||||
pub use env_logger::filter::{Filter, Builder as FilterBuilder};
|
||||
pub use env_logger::filter::{Builder as FilterBuilder, Filter};
|
||||
pub use env_logger::fmt::Formatter;
|
||||
|
||||
pub(crate) type FormatFn = Box<dyn Fn(&mut dyn fmt::Write, &Record) -> fmt::Result + Sync + Send>;
|
||||
@ -115,7 +115,6 @@ impl AndroidLogger {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static ANDROID_LOGGER: OnceCell<AndroidLogger> = OnceCell::new();
|
||||
|
||||
const LOGGING_TAG_MAX_LEN: usize = 23;
|
||||
@ -136,22 +135,23 @@ impl Log for AndroidLogger {
|
||||
}
|
||||
|
||||
fn log(&self, record: &Record) {
|
||||
let config = self.config
|
||||
.get_or_init(Config::default);
|
||||
let config = self.config.get_or_init(Config::default);
|
||||
|
||||
if !config.filter_matches(record) {
|
||||
return;
|
||||
}
|
||||
|
||||
// tag must not exceed LOGGING_TAG_MAX_LEN
|
||||
#[allow(deprecated)] // created an issue #35 for this
|
||||
let mut tag_bytes: [u8; LOGGING_TAG_MAX_LEN + 1] = unsafe { mem::uninitialized() };
|
||||
let mut tag_bytes: [MaybeUninit<u8>; LOGGING_TAG_MAX_LEN + 1] = uninit_array();
|
||||
|
||||
let module_path = record.module_path().unwrap_or_default().to_owned();
|
||||
|
||||
// If no tag was specified, use module name
|
||||
let custom_tag = &config.tag;
|
||||
let tag = custom_tag.as_ref().map(|s| s.as_bytes()).unwrap_or_else(|| module_path.as_bytes());
|
||||
let tag = custom_tag
|
||||
.as_ref()
|
||||
.map(|s| s.as_bytes())
|
||||
.unwrap_or_else(|| module_path.as_bytes());
|
||||
|
||||
// truncate the tag here to fit into LOGGING_TAG_MAX_LEN
|
||||
self.fill_tag_bytes(&mut tag_bytes, tag);
|
||||
@ -181,21 +181,19 @@ impl Log for AndroidLogger {
|
||||
}
|
||||
|
||||
impl AndroidLogger {
|
||||
fn fill_tag_bytes(&self, array: &mut [u8], tag: &[u8]) {
|
||||
fn fill_tag_bytes(&self, array: &mut [MaybeUninit<u8>], tag: &[u8]) {
|
||||
if tag.len() > LOGGING_TAG_MAX_LEN {
|
||||
for (input, output) in tag.iter()
|
||||
for (input, output) in tag
|
||||
.iter()
|
||||
.take(LOGGING_TAG_MAX_LEN - 2)
|
||||
.chain(b"..\0".iter())
|
||||
.zip(array.iter_mut())
|
||||
{
|
||||
*output = *input;
|
||||
output.write(*input);
|
||||
}
|
||||
} else {
|
||||
for (input, output) in tag.iter()
|
||||
.chain(b"\0".iter())
|
||||
.zip(array.iter_mut())
|
||||
{
|
||||
*output = *input;
|
||||
for (input, output) in tag.iter().chain(b"\0".iter()).zip(array.iter_mut()) {
|
||||
output.write(*input);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -256,13 +254,15 @@ impl Config {
|
||||
}
|
||||
}
|
||||
|
||||
struct PlatformLogWriter<'a> {
|
||||
#[cfg(target_os = "android")] priority: LogPriority,
|
||||
#[cfg(not(target_os = "android"))] priority: Level,
|
||||
pub struct PlatformLogWriter<'a> {
|
||||
#[cfg(target_os = "android")]
|
||||
priority: LogPriority,
|
||||
#[cfg(not(target_os = "android"))]
|
||||
priority: Level,
|
||||
len: usize,
|
||||
last_newline_index: usize,
|
||||
tag: &'a CStr,
|
||||
buffer: [u8; LOGGING_MSG_MAX_LEN + 1],
|
||||
buffer: [MaybeUninit<u8>; LOGGING_MSG_MAX_LEN + 1],
|
||||
}
|
||||
|
||||
impl<'a> PlatformLogWriter<'a> {
|
||||
@ -280,7 +280,7 @@ impl<'a> PlatformLogWriter<'a> {
|
||||
len: 0,
|
||||
last_newline_index: 0,
|
||||
tag,
|
||||
buffer: unsafe { mem::uninitialized() },
|
||||
buffer: uninit_array(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -292,7 +292,7 @@ impl<'a> PlatformLogWriter<'a> {
|
||||
len: 0,
|
||||
last_newline_index: 0,
|
||||
tag,
|
||||
buffer: unsafe { mem::uninitialized() },
|
||||
buffer: uninit_array(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -324,7 +324,7 @@ impl<'a> PlatformLogWriter<'a> {
|
||||
}
|
||||
|
||||
/// Flush everything remaining to android logger.
|
||||
fn flush(&mut self) {
|
||||
pub fn flush(&mut self) {
|
||||
let total_len = self.len;
|
||||
|
||||
if total_len == 0 {
|
||||
@ -338,21 +338,22 @@ impl<'a> PlatformLogWriter<'a> {
|
||||
|
||||
/// Output buffer up until the \0 which will be placed at `len` position.
|
||||
fn output_specified_len(&mut self, len: usize) {
|
||||
let mut last_byte: u8 = b'\0';
|
||||
let mut last_byte = MaybeUninit::new(b'\0');
|
||||
|
||||
mem::swap(&mut last_byte, unsafe {
|
||||
self.buffer.get_unchecked_mut(len)
|
||||
});
|
||||
|
||||
let msg: &CStr = unsafe { CStr::from_ptr(mem::transmute(self.buffer.as_ptr())) };
|
||||
let msg: &CStr = unsafe { CStr::from_ptr(self.buffer.as_ptr().cast()) };
|
||||
android_log(self.priority, self.tag, msg);
|
||||
|
||||
*unsafe { self.buffer.get_unchecked_mut(len) } = last_byte;
|
||||
unsafe { *self.buffer.get_unchecked_mut(len) = last_byte };
|
||||
}
|
||||
|
||||
/// Copy `len` bytes from `index` position to starting position.
|
||||
fn copy_bytes_to_start(&mut self, index: usize, len: usize) {
|
||||
let src = unsafe { self.buffer.as_ptr().add(index) };
|
||||
let dst = self.buffer.as_mut_ptr();
|
||||
let src = unsafe { self.buffer.as_ptr().add(index) };
|
||||
unsafe { ptr::copy(src, dst, len) };
|
||||
}
|
||||
}
|
||||
@ -371,7 +372,7 @@ impl<'a> fmt::Write for PlatformLogWriter<'a> {
|
||||
.zip(incomming_bytes)
|
||||
.enumerate()
|
||||
.fold(None, |acc, (i, (output, input))| {
|
||||
*output = *input;
|
||||
output.write(*input);
|
||||
if *input == b'\n' {
|
||||
Some(i)
|
||||
} else {
|
||||
@ -409,7 +410,9 @@ impl<'a> fmt::Write for PlatformLogWriter<'a> {
|
||||
/// This action does not require initialization. However, without initialization it
|
||||
/// will use the default filter, which allows all logs.
|
||||
pub fn log(record: &Record) {
|
||||
ANDROID_LOGGER.get_or_init(AndroidLogger::default).log(record)
|
||||
ANDROID_LOGGER
|
||||
.get_or_init(AndroidLogger::default)
|
||||
.log(record)
|
||||
}
|
||||
|
||||
/// Initializes the global logger with an android logger.
|
||||
@ -430,6 +433,12 @@ pub fn init_once(config: Config) {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: When `maybe_uninit_uninit_array ` is stabilized, use it instead of this helper
|
||||
fn uninit_array<const N: usize, T>() -> [MaybeUninit<T>; N] {
|
||||
// SAFETY: Array contains MaybeUninit, which is fine to be uninit
|
||||
unsafe { MaybeUninit::uninit().assume_init() }
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@ -489,12 +498,12 @@ mod tests {
|
||||
let logger = AndroidLogger::new(Config::default());
|
||||
let too_long_tag: [u8; LOGGING_TAG_MAX_LEN + 20] = [b'a'; LOGGING_TAG_MAX_LEN + 20];
|
||||
|
||||
let mut result: [u8; LOGGING_TAG_MAX_LEN + 1] = Default::default();
|
||||
let mut result: [MaybeUninit<u8>; LOGGING_TAG_MAX_LEN + 1] = uninit_array();
|
||||
logger.fill_tag_bytes(&mut result, &too_long_tag);
|
||||
|
||||
let mut expected_result = [b'a'; LOGGING_TAG_MAX_LEN - 2].to_vec();
|
||||
expected_result.extend("..\0".as_bytes());
|
||||
assert_eq!(result.to_vec(), expected_result);
|
||||
assert_eq!(unsafe { assume_init_slice(&result) }, expected_result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -502,12 +511,12 @@ mod tests {
|
||||
let logger = AndroidLogger::new(Config::default());
|
||||
let short_tag: [u8; 3] = [b'a'; 3];
|
||||
|
||||
let mut result: [u8; LOGGING_TAG_MAX_LEN + 1] = Default::default();
|
||||
let mut result: [MaybeUninit<u8>; LOGGING_TAG_MAX_LEN + 1] = uninit_array();
|
||||
logger.fill_tag_bytes(&mut result, &short_tag);
|
||||
|
||||
let mut expected_result = short_tag.to_vec();
|
||||
expected_result.push(0);
|
||||
assert_eq!(result.to_vec()[..4], expected_result);
|
||||
assert_eq!(unsafe { assume_init_slice(&result[..4]) }, expected_result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -535,7 +544,10 @@ mod tests {
|
||||
// Should have flushed up until the last newline.
|
||||
assert_eq!(writer.len, 3);
|
||||
assert_eq!(writer.last_newline_index, 0);
|
||||
assert_eq!(&writer.buffer.to_vec()[..writer.len], "\n90".as_bytes());
|
||||
assert_eq!(
|
||||
unsafe { assume_init_slice(&writer.buffer[..writer.len]) },
|
||||
"\n90".as_bytes()
|
||||
);
|
||||
|
||||
writer.temporal_flush();
|
||||
// Should have flushed all remaining bytes.
|
||||
@ -578,7 +590,7 @@ mod tests {
|
||||
writer.output_specified_len(5);
|
||||
|
||||
assert_eq!(
|
||||
writer.buffer[..log_string.len()].to_vec(),
|
||||
unsafe { assume_init_slice(&writer.buffer[..log_string.len()]) },
|
||||
log_string.as_bytes()
|
||||
);
|
||||
}
|
||||
@ -592,7 +604,10 @@ mod tests {
|
||||
|
||||
writer.copy_bytes_to_start(3, 2);
|
||||
|
||||
assert_eq!(writer.buffer[..10].to_vec(), "3423456789".as_bytes());
|
||||
assert_eq!(
|
||||
unsafe { assume_init_slice(&writer.buffer[..10]) },
|
||||
"3423456789".as_bytes()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -607,7 +622,7 @@ mod tests {
|
||||
writer.copy_bytes_to_start(10, 0);
|
||||
|
||||
assert_eq!(
|
||||
writer.buffer[..test_string.len()].to_vec(),
|
||||
unsafe { assume_init_slice(&writer.buffer[..test_string.len()]) },
|
||||
test_string.as_bytes()
|
||||
);
|
||||
}
|
||||
@ -615,4 +630,8 @@ mod tests {
|
||||
fn get_tag_writer() -> PlatformLogWriter<'static> {
|
||||
PlatformLogWriter::new(Level::Warn, CStr::from_bytes_with_nul(b"tag\0").unwrap())
|
||||
}
|
||||
|
||||
unsafe fn assume_init_slice<T>(slice: &[MaybeUninit<T>]) -> &[T] {
|
||||
&*(slice as *const [MaybeUninit<T>] as *const [T])
|
||||
}
|
||||
}
|
||||
|
@ -6,4 +6,4 @@ fn config_log_level() {
|
||||
android_logger::init_once(android_logger::Config::default().with_min_level(log::Level::Trace));
|
||||
|
||||
assert_eq!(log::max_level(), log::LevelFilter::Trace);
|
||||
}
|
||||
}
|
||||
|
@ -7,4 +7,4 @@ fn default_init() {
|
||||
|
||||
// android_logger has default log level "off"
|
||||
assert_eq!(log::max_level(), log::LevelFilter::Off);
|
||||
}
|
||||
}
|
||||
|
@ -9,4 +9,4 @@ fn multiple_init() {
|
||||
android_logger::init_once(android_logger::Config::default().with_min_level(log::Level::Error));
|
||||
|
||||
assert_eq!(log::max_level(), log::LevelFilter::Trace);
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
8
third_party/rust/glean-core/Cargo.toml
vendored
8
third_party/rust/glean-core/Cargo.toml
vendored
@ -12,7 +12,7 @@
|
||||
[package]
|
||||
edition = "2018"
|
||||
name = "glean-core"
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
authors = [
|
||||
"Jan-Erik Rediger <jrediger@mozilla.com>",
|
||||
"The Glean Team <glean-team@mozilla.com>",
|
||||
@ -46,9 +46,6 @@ features = ["serde"]
|
||||
[dependencies.crossbeam-channel]
|
||||
version = "0.5"
|
||||
|
||||
[dependencies.ffi-support]
|
||||
version = "0.4.0"
|
||||
|
||||
[dependencies.flate2]
|
||||
version = "1.0.19"
|
||||
|
||||
@ -113,9 +110,6 @@ version = "3.1.0"
|
||||
version = "0.19.3"
|
||||
features = ["builtin-bindgen"]
|
||||
|
||||
[features]
|
||||
rkv-safe-mode = []
|
||||
|
||||
[target."cfg(not(target_os = \"android\"))".dependencies.env_logger]
|
||||
version = "0.9.0"
|
||||
features = [
|
||||
|
296
third_party/rust/glean-core/src/database/mod.rs
vendored
296
third_party/rust/glean-core/src/database/mod.rs
vendored
@ -10,6 +10,7 @@ use std::path::Path;
|
||||
use std::str;
|
||||
use std::sync::RwLock;
|
||||
|
||||
use rkv::migrator::Migrator;
|
||||
use rkv::StoreOptions;
|
||||
|
||||
/// Unwrap a `Result`s `Ok` value or do the specified action.
|
||||
@ -27,148 +28,119 @@ macro_rules! unwrap_or {
|
||||
};
|
||||
}
|
||||
|
||||
// Select the LMDB-powered storage backend when the feature is not activated.
|
||||
#[cfg(not(feature = "rkv-safe-mode"))]
|
||||
mod backend {
|
||||
use std::path::Path;
|
||||
/// cbindgen:ignore
|
||||
pub type Rkv = rkv::Rkv<rkv::backend::SafeModeEnvironment>;
|
||||
/// cbindgen:ignore
|
||||
pub type SingleStore = rkv::SingleStore<rkv::backend::SafeModeDatabase>;
|
||||
/// cbindgen:ignore
|
||||
pub type Writer<'t> = rkv::Writer<rkv::backend::SafeModeRwTransaction<'t>>;
|
||||
|
||||
/// cbindgen:ignore
|
||||
pub type Rkv = rkv::Rkv<rkv::backend::LmdbEnvironment>;
|
||||
/// cbindgen:ignore
|
||||
pub type SingleStore = rkv::SingleStore<rkv::backend::LmdbDatabase>;
|
||||
/// cbindgen:ignore
|
||||
pub type Writer<'t> = rkv::Writer<rkv::backend::LmdbRwTransaction<'t>>;
|
||||
|
||||
pub fn rkv_new(path: &Path) -> Result<Rkv, rkv::StoreError> {
|
||||
Rkv::new::<rkv::backend::Lmdb>(path)
|
||||
}
|
||||
|
||||
/// No migration necessary when staying with LMDB.
|
||||
pub fn migrate(_path: &Path, _dst_env: &Rkv) {
|
||||
// Intentionally left empty.
|
||||
pub fn rkv_new(path: &Path) -> std::result::Result<Rkv, rkv::StoreError> {
|
||||
match Rkv::new::<rkv::backend::SafeMode>(path) {
|
||||
// An invalid file can mean:
|
||||
// 1. An empty file.
|
||||
// 2. A corrupted file.
|
||||
//
|
||||
// In both instances there's not much we can do.
|
||||
// Drop the data by removing the file, and start over.
|
||||
Err(rkv::StoreError::FileInvalid) => {
|
||||
let safebin = path.join("data.safe.bin");
|
||||
fs::remove_file(safebin).map_err(|_| rkv::StoreError::FileInvalid)?;
|
||||
// Now try again, we only handle that error once.
|
||||
Rkv::new::<rkv::backend::SafeMode>(path)
|
||||
}
|
||||
other => other,
|
||||
}
|
||||
}
|
||||
|
||||
// Select the "safe mode" storage backend when the feature is activated.
|
||||
#[cfg(feature = "rkv-safe-mode")]
|
||||
mod backend {
|
||||
use rkv::migrator::Migrator;
|
||||
use std::{fs, path::Path};
|
||||
|
||||
/// cbindgen:ignore
|
||||
pub type Rkv = rkv::Rkv<rkv::backend::SafeModeEnvironment>;
|
||||
/// cbindgen:ignore
|
||||
pub type SingleStore = rkv::SingleStore<rkv::backend::SafeModeDatabase>;
|
||||
/// cbindgen:ignore
|
||||
pub type Writer<'t> = rkv::Writer<rkv::backend::SafeModeRwTransaction<'t>>;
|
||||
|
||||
pub fn rkv_new(path: &Path) -> Result<Rkv, rkv::StoreError> {
|
||||
match Rkv::new::<rkv::backend::SafeMode>(path) {
|
||||
// An invalid file can mean:
|
||||
// 1. An empty file.
|
||||
// 2. A corrupted file.
|
||||
//
|
||||
// In both instances there's not much we can do.
|
||||
// Drop the data by removing the file, and start over.
|
||||
Err(rkv::StoreError::FileInvalid) => {
|
||||
let safebin = path.join("data.safe.bin");
|
||||
fs::remove_file(safebin).map_err(|_| rkv::StoreError::FileInvalid)?;
|
||||
// Now try again, we only handle that error once.
|
||||
Rkv::new::<rkv::backend::SafeMode>(path)
|
||||
fn delete_and_log(path: &Path, msg: &str) {
|
||||
if let Err(err) = fs::remove_file(path) {
|
||||
match err.kind() {
|
||||
std::io::ErrorKind::NotFound => {
|
||||
// Silently drop this error, the file was already non-existing.
|
||||
}
|
||||
other => other,
|
||||
_ => log::warn!("{}", msg),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn delete_and_log(path: &Path, msg: &str) {
|
||||
if let Err(err) = fs::remove_file(path) {
|
||||
match err.kind() {
|
||||
std::io::ErrorKind::NotFound => {
|
||||
// Silently drop this error, the file was already non-existing.
|
||||
}
|
||||
_ => log::warn!("{}", msg),
|
||||
fn delete_lmdb_database(path: &Path) {
|
||||
let datamdb = path.join("data.mdb");
|
||||
delete_and_log(&datamdb, "Failed to delete old data.");
|
||||
|
||||
let lockmdb = path.join("lock.mdb");
|
||||
delete_and_log(&lockmdb, "Failed to delete old lock.");
|
||||
}
|
||||
|
||||
/// Migrate from LMDB storage to safe-mode storage.
|
||||
///
|
||||
/// This migrates the data once, then deletes the LMDB storage.
|
||||
/// The safe-mode storage must be empty for it to work.
|
||||
/// Existing data will not be overwritten.
|
||||
/// If the destination database is not empty the LMDB database is deleted
|
||||
/// without migrating data.
|
||||
/// This is a no-op if no LMDB database file exists.
|
||||
pub fn migrate(path: &Path, dst_env: &Rkv) {
|
||||
use rkv::{MigrateError, StoreError};
|
||||
|
||||
log::debug!("Migrating files in {}", path.display());
|
||||
|
||||
// Shortcut if no data to migrate is around.
|
||||
let datamdb = path.join("data.mdb");
|
||||
if !datamdb.exists() {
|
||||
log::debug!("No data to migrate.");
|
||||
return;
|
||||
}
|
||||
|
||||
// We're handling the same error cases as `easy_migrate_lmdb_to_safe_mode`,
|
||||
// but annotate each why they don't cause problems for Glean.
|
||||
// Additionally for known cases we delete the LMDB database regardless.
|
||||
let should_delete =
|
||||
match Migrator::open_and_migrate_lmdb_to_safe_mode(path, |builder| builder, dst_env) {
|
||||
// Source environment is corrupted.
|
||||
// We start fresh with the new database.
|
||||
Err(MigrateError::StoreError(StoreError::FileInvalid)) => true,
|
||||
Err(MigrateError::StoreError(StoreError::DatabaseCorrupted)) => true,
|
||||
// Path not accessible.
|
||||
// Somehow our directory vanished between us creating it and reading from it.
|
||||
// Nothing we can do really.
|
||||
Err(MigrateError::StoreError(StoreError::IoError(_))) => true,
|
||||
// Path accessible but incompatible for configuration.
|
||||
// This should not happen, we never used storages that safe-mode doesn't understand.
|
||||
// If it does happen, let's start fresh and use the safe-mode from now on.
|
||||
Err(MigrateError::StoreError(StoreError::UnsuitableEnvironmentPath(_))) => true,
|
||||
// Nothing to migrate.
|
||||
// Source database was empty. We just start fresh anyway.
|
||||
Err(MigrateError::SourceEmpty) => true,
|
||||
// Migrating would overwrite.
|
||||
// Either a previous migration failed and we still started writing data,
|
||||
// or someone placed back an old data file.
|
||||
// In any case we better stay on the new data and delete the old one.
|
||||
Err(MigrateError::DestinationNotEmpty) => {
|
||||
log::warn!("Failed to migrate old data. Destination was not empty");
|
||||
true
|
||||
}
|
||||
}
|
||||
// An internal lock was poisoned.
|
||||
// This would only happen if multiple things run concurrently and one crashes.
|
||||
Err(MigrateError::ManagerPoisonError) => false,
|
||||
// Couldn't close source environment and delete files on disk (e.g. other stores still open).
|
||||
// This could only happen if multiple instances are running,
|
||||
// we leave files in place.
|
||||
Err(MigrateError::CloseError(_)) => false,
|
||||
// Other store errors are never returned from the migrator.
|
||||
// We need to handle them to please rustc.
|
||||
Err(MigrateError::StoreError(_)) => false,
|
||||
// Other errors can't happen, so this leaves us with the Ok case.
|
||||
// This already deleted the LMDB files.
|
||||
Ok(()) => false,
|
||||
};
|
||||
|
||||
if should_delete {
|
||||
log::debug!("Need to delete remaining LMDB files.");
|
||||
delete_lmdb_database(path);
|
||||
}
|
||||
|
||||
fn delete_lmdb_database(path: &Path) {
|
||||
let datamdb = path.join("data.mdb");
|
||||
delete_and_log(&datamdb, "Failed to delete old data.");
|
||||
|
||||
let lockmdb = path.join("lock.mdb");
|
||||
delete_and_log(&lockmdb, "Failed to delete old lock.");
|
||||
}
|
||||
|
||||
/// Migrate from LMDB storage to safe-mode storage.
|
||||
///
|
||||
/// This migrates the data once, then deletes the LMDB storage.
|
||||
/// The safe-mode storage must be empty for it to work.
|
||||
/// Existing data will not be overwritten.
|
||||
/// If the destination database is not empty the LMDB database is deleted
|
||||
/// without migrating data.
|
||||
/// This is a no-op if no LMDB database file exists.
|
||||
pub fn migrate(path: &Path, dst_env: &Rkv) {
|
||||
use rkv::{MigrateError, StoreError};
|
||||
|
||||
log::debug!("Migrating files in {}", path.display());
|
||||
|
||||
// Shortcut if no data to migrate is around.
|
||||
let datamdb = path.join("data.mdb");
|
||||
if !datamdb.exists() {
|
||||
log::debug!("No data to migrate.");
|
||||
return;
|
||||
}
|
||||
|
||||
// We're handling the same error cases as `easy_migrate_lmdb_to_safe_mode`,
|
||||
// but annotate each why they don't cause problems for Glean.
|
||||
// Additionally for known cases we delete the LMDB database regardless.
|
||||
let should_delete =
|
||||
match Migrator::open_and_migrate_lmdb_to_safe_mode(path, |builder| builder, dst_env) {
|
||||
// Source environment is corrupted.
|
||||
// We start fresh with the new database.
|
||||
Err(MigrateError::StoreError(StoreError::FileInvalid)) => true,
|
||||
Err(MigrateError::StoreError(StoreError::DatabaseCorrupted)) => true,
|
||||
// Path not accessible.
|
||||
// Somehow our directory vanished between us creating it and reading from it.
|
||||
// Nothing we can do really.
|
||||
Err(MigrateError::StoreError(StoreError::IoError(_))) => true,
|
||||
// Path accessible but incompatible for configuration.
|
||||
// This should not happen, we never used storages that safe-mode doesn't understand.
|
||||
// If it does happen, let's start fresh and use the safe-mode from now on.
|
||||
Err(MigrateError::StoreError(StoreError::UnsuitableEnvironmentPath(_))) => true,
|
||||
// Nothing to migrate.
|
||||
// Source database was empty. We just start fresh anyway.
|
||||
Err(MigrateError::SourceEmpty) => true,
|
||||
// Migrating would overwrite.
|
||||
// Either a previous migration failed and we still started writing data,
|
||||
// or someone placed back an old data file.
|
||||
// In any case we better stay on the new data and delete the old one.
|
||||
Err(MigrateError::DestinationNotEmpty) => {
|
||||
log::warn!("Failed to migrate old data. Destination was not empty");
|
||||
true
|
||||
}
|
||||
// An internal lock was poisoned.
|
||||
// This would only happen if multiple things run concurrently and one crashes.
|
||||
Err(MigrateError::ManagerPoisonError) => false,
|
||||
// Couldn't close source environment and delete files on disk (e.g. other stores still open).
|
||||
// This could only happen if multiple instances are running,
|
||||
// we leave files in place.
|
||||
Err(MigrateError::CloseError(_)) => false,
|
||||
// Other store errors are never returned from the migrator.
|
||||
// We need to handle them to please rustc.
|
||||
Err(MigrateError::StoreError(_)) => false,
|
||||
// Other errors can't happen, so this leaves us with the Ok case.
|
||||
// This already deleted the LMDB files.
|
||||
Ok(()) => false,
|
||||
};
|
||||
|
||||
if should_delete {
|
||||
log::debug!("Need to delete remaining LMDB files.");
|
||||
delete_lmdb_database(path);
|
||||
}
|
||||
|
||||
log::debug!("Migration ended. Safe-mode database in {}", path.display());
|
||||
}
|
||||
log::debug!("Migration ended. Safe-mode database in {}", path.display());
|
||||
}
|
||||
|
||||
use crate::metrics::Metric;
|
||||
@ -176,7 +148,6 @@ use crate::CommonMetricData;
|
||||
use crate::Glean;
|
||||
use crate::Lifetime;
|
||||
use crate::Result;
|
||||
use backend::*;
|
||||
|
||||
pub struct Database {
|
||||
/// Handle to the database environment.
|
||||
@ -250,21 +221,6 @@ impl Database {
|
||||
/// It also loads any Lifetime::Ping data that might be
|
||||
/// persisted, in case `delay_ping_lifetime_io` is set.
|
||||
pub fn new(data_path: &Path, delay_ping_lifetime_io: bool) -> Result<Self> {
|
||||
#[cfg(all(windows, not(feature = "rkv-safe-mode")))]
|
||||
{
|
||||
// The underlying lmdb wrapper implementation
|
||||
// cannot actually handle non-UTF8 paths on Windows.
|
||||
// It will unconditionally panic if passed one.
|
||||
// See
|
||||
// https://github.com/mozilla/lmdb-rs/blob/df1c2f56e3088f097c719c57b9925ab51e26f3f4/src/environment.rs#L43-L53
|
||||
//
|
||||
// To avoid this, in case we're using LMDB on Windows (that's just testing now though),
|
||||
// we simply error out earlier.
|
||||
if data_path.to_str().is_none() {
|
||||
return Err(crate::Error::utf8_error());
|
||||
}
|
||||
}
|
||||
|
||||
let path = data_path.join("db");
|
||||
log::debug!("Database path: {:?}", path.display());
|
||||
let file_size = database_size(&path);
|
||||
@ -839,25 +795,12 @@ mod test {
|
||||
|
||||
let res = Database::new(&path, false);
|
||||
|
||||
#[cfg(feature = "rkv-safe-mode")]
|
||||
{
|
||||
assert!(
|
||||
res.is_ok(),
|
||||
"Database should succeed at {}: {:?}",
|
||||
path.display(),
|
||||
res
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "rkv-safe-mode"))]
|
||||
{
|
||||
assert!(
|
||||
res.is_err(),
|
||||
"Database should fail at {}: {:?}",
|
||||
path.display(),
|
||||
res
|
||||
);
|
||||
}
|
||||
assert!(
|
||||
res.is_ok(),
|
||||
"Database should succeed at {}: {:?}",
|
||||
path.display(),
|
||||
res
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -1491,27 +1434,6 @@ mod test {
|
||||
);
|
||||
}
|
||||
|
||||
/// LDMB ignores an empty database file just fine.
|
||||
#[cfg(not(feature = "rkv-safe-mode"))]
|
||||
#[test]
|
||||
fn empty_data_file() {
|
||||
let dir = tempdir().unwrap();
|
||||
|
||||
// Create database directory structure.
|
||||
let database_dir = dir.path().join("db");
|
||||
fs::create_dir_all(&database_dir).expect("create database dir");
|
||||
|
||||
// Create empty database file.
|
||||
let datamdb = database_dir.join("data.mdb");
|
||||
let f = fs::File::create(datamdb).expect("create database file");
|
||||
drop(f);
|
||||
|
||||
Database::new(dir.path(), false).unwrap();
|
||||
|
||||
assert!(dir.path().exists());
|
||||
}
|
||||
|
||||
#[cfg(feature = "rkv-safe-mode")]
|
||||
mod safe_mode {
|
||||
use std::fs::File;
|
||||
|
||||
|
20
third_party/rust/glean-core/src/error.rs
vendored
20
third_party/rust/glean-core/src/error.rs
vendored
@ -7,8 +7,6 @@ use std::fmt::{self, Display};
|
||||
use std::io;
|
||||
use std::result;
|
||||
|
||||
use ffi_support::{handle_map::HandleError, ExternError};
|
||||
|
||||
use rkv::StoreError;
|
||||
|
||||
/// A specialized [`Result`] type for this crate's operations.
|
||||
@ -32,9 +30,6 @@ pub enum ErrorKind {
|
||||
/// Lifetime conversion failed
|
||||
Lifetime(i32),
|
||||
|
||||
/// FFI-Support error
|
||||
Handle(HandleError),
|
||||
|
||||
/// IO error
|
||||
IoError(io::Error),
|
||||
|
||||
@ -107,7 +102,6 @@ impl Display for Error {
|
||||
use ErrorKind::*;
|
||||
match self.kind() {
|
||||
Lifetime(l) => write!(f, "Lifetime conversion from {} failed", l),
|
||||
Handle(e) => write!(f, "Invalid handle: {}", e),
|
||||
IoError(e) => write!(f, "An I/O error occurred: {}", e),
|
||||
Rkv(e) => write!(f, "An Rkv error occurred: {}", e),
|
||||
Json(e) => write!(f, "A JSON error occurred: {}", e),
|
||||
@ -133,14 +127,6 @@ impl From<ErrorKind> for Error {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<HandleError> for Error {
|
||||
fn from(error: HandleError) -> Error {
|
||||
Error {
|
||||
kind: ErrorKind::Handle(error),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<io::Error> for Error {
|
||||
fn from(error: io::Error) -> Error {
|
||||
Error {
|
||||
@ -157,12 +143,6 @@ impl From<StoreError> for Error {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Error> for ExternError {
|
||||
fn from(error: Error) -> ExternError {
|
||||
ffi_support::ExternError::new_error(ffi_support::ErrorCode::new(42), format!("{}", error))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<serde_json::error::Error> for Error {
|
||||
fn from(error: serde_json::error::Error) -> Error {
|
||||
Error {
|
||||
|
@ -157,16 +157,13 @@ pub fn test_get_num_recorded_errors(
|
||||
glean: &Glean,
|
||||
meta: &CommonMetricData,
|
||||
error: ErrorType,
|
||||
ping_name: Option<&str>,
|
||||
) -> Result<i32, String> {
|
||||
let use_ping_name = ping_name.unwrap_or(&meta.send_in_pings[0]);
|
||||
let metric = get_error_metric_for_metric(meta, error);
|
||||
|
||||
metric.get_value(glean, Some(use_ping_name)).ok_or_else(|| {
|
||||
metric.get_value(glean, Some("metrics")).ok_or_else(|| {
|
||||
format!(
|
||||
"No error recorded for {} in '{}' store",
|
||||
"No error recorded for {} in 'metrics' store",
|
||||
meta.base_identifier(),
|
||||
use_ping_name
|
||||
)
|
||||
})
|
||||
}
|
||||
@ -221,24 +218,19 @@ mod test {
|
||||
expected_invalid_labels_errors,
|
||||
);
|
||||
|
||||
for store in &["store1", "store2", "metrics"] {
|
||||
let invalid_val =
|
||||
get_error_metric_for_metric(string_metric.meta(), ErrorType::InvalidValue);
|
||||
let invalid_label =
|
||||
get_error_metric_for_metric(string_metric.meta(), ErrorType::InvalidLabel);
|
||||
for &store in &["store1", "store2", "metrics"] {
|
||||
assert_eq!(
|
||||
Ok(expected_invalid_values_errors),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
string_metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some(store)
|
||||
)
|
||||
Some(expected_invalid_values_errors),
|
||||
invalid_val.get_value(&glean, Some(store))
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
Ok(expected_invalid_labels_errors),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
string_metric.meta(),
|
||||
ErrorType::InvalidLabel,
|
||||
Some(store)
|
||||
)
|
||||
Some(expected_invalid_labels_errors),
|
||||
invalid_label.get_value(&glean, Some(store))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -306,24 +306,6 @@ impl EventDatabase {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// **Test-only API (exported for FFI purposes).**
|
||||
///
|
||||
/// Returns whether there are any events currently stored for the given even
|
||||
/// metric.
|
||||
///
|
||||
/// This doesn't clear the stored value.
|
||||
pub fn test_has_value<'a>(&'a self, meta: &'a CommonMetricData, store_name: &str) -> bool {
|
||||
record_coverage(&meta.base_identifier());
|
||||
|
||||
self.event_stores
|
||||
.read()
|
||||
.unwrap() // safe unwrap, only error case is poisoning
|
||||
.get(&store_name.to_string())
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.any(|event| event.name == meta.name && event.category == meta.category)
|
||||
}
|
||||
|
||||
/// **Test-only API (exported for FFI purposes).**
|
||||
///
|
||||
/// Gets the vector of currently stored events for the given event metric in
|
||||
|
40
third_party/rust/glean-core/src/glean.udl
vendored
40
third_party/rust/glean-core/src/glean.udl
vendored
@ -242,7 +242,7 @@ interface CounterMetric {
|
||||
|
||||
i32? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
// Different resolutions supported by the time related metric types
|
||||
@ -277,7 +277,7 @@ interface TimespanMetric {
|
||||
|
||||
i64? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface BooleanMetric {
|
||||
@ -287,7 +287,7 @@ interface BooleanMetric {
|
||||
|
||||
boolean? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface StringMetric {
|
||||
@ -297,7 +297,7 @@ interface StringMetric {
|
||||
|
||||
string? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface LabeledCounter {
|
||||
@ -305,7 +305,7 @@ interface LabeledCounter {
|
||||
|
||||
CounterMetric get(string label);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface LabeledBoolean {
|
||||
@ -313,7 +313,7 @@ interface LabeledBoolean {
|
||||
|
||||
BooleanMetric get(string label);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface LabeledString {
|
||||
@ -321,7 +321,7 @@ interface LabeledString {
|
||||
|
||||
StringMetric get(string label);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface StringListMetric {
|
||||
@ -333,7 +333,7 @@ interface StringListMetric {
|
||||
|
||||
sequence<string>? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface UrlMetric {
|
||||
@ -343,7 +343,7 @@ interface UrlMetric {
|
||||
|
||||
string? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface UuidMetric {
|
||||
@ -355,7 +355,7 @@ interface UuidMetric {
|
||||
|
||||
string? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface QuantityMetric {
|
||||
@ -365,7 +365,7 @@ interface QuantityMetric {
|
||||
|
||||
i64? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
// A snapshot of all buckets and the accumulated sum of a distribution.
|
||||
@ -398,7 +398,7 @@ interface TimingDistributionMetric {
|
||||
|
||||
DistributionData? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
// Different resolutions supported by the memory related metric types
|
||||
@ -423,7 +423,7 @@ interface MemoryDistributionMetric {
|
||||
|
||||
DistributionData? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
// Different kinds of histograms.
|
||||
@ -441,7 +441,7 @@ interface CustomDistributionMetric {
|
||||
|
||||
DistributionData? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
// Representation of a date, time and timezone.
|
||||
@ -465,7 +465,7 @@ interface DatetimeMetric {
|
||||
|
||||
string? test_get_value_as_string(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
// Represents the recorded data for a single event.
|
||||
@ -498,7 +498,7 @@ interface EventMetric {
|
||||
|
||||
sequence<RecordedEvent>? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
dictionary Rate {
|
||||
@ -515,7 +515,7 @@ interface RateMetric {
|
||||
|
||||
Rate? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface DenominatorMetric {
|
||||
@ -525,7 +525,7 @@ interface DenominatorMetric {
|
||||
|
||||
i32? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface NumeratorMetric {
|
||||
@ -535,7 +535,7 @@ interface NumeratorMetric {
|
||||
|
||||
Rate? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
||||
interface TextMetric {
|
||||
@ -545,5 +545,5 @@ interface TextMetric {
|
||||
|
||||
string? test_get_value(optional string? ping_name = null);
|
||||
|
||||
i32 test_get_num_recorded_errors(ErrorType error, optional string? ping_name = null);
|
||||
i32 test_get_num_recorded_errors(ErrorType error);
|
||||
};
|
||||
|
@ -123,12 +123,11 @@ impl BooleanMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -152,12 +152,11 @@ impl CounterMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -210,12 +210,11 @@ impl CustomDistributionMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -316,12 +316,11 @@ impl DatetimeMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -129,12 +129,11 @@ impl DenominatorMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -160,12 +160,11 @@ impl EventMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -270,11 +270,10 @@ where
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.submetric.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.submetric.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -259,12 +259,11 @@ impl MemoryDistributionMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ impl NumeratorMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
self.0.test_get_num_recorded_errors(error, ping_name)
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
self.0.test_get_num_recorded_errors(error)
|
||||
}
|
||||
}
|
||||
|
@ -115,12 +115,11 @@ impl QuantityMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -180,12 +180,11 @@ impl RateMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -129,12 +129,11 @@ impl StringMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -169,7 +168,7 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
1,
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
.unwrap()
|
||||
);
|
||||
}
|
||||
|
@ -188,12 +188,11 @@ impl StringListMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -133,12 +133,11 @@ impl TextMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -173,7 +172,7 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
1,
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
.unwrap()
|
||||
);
|
||||
}
|
||||
|
@ -297,12 +297,11 @@ impl TimespanMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -461,12 +461,11 @@ impl TimingDistributionMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
14
third_party/rust/glean-core/src/metrics/url.rs
vendored
14
third_party/rust/glean-core/src/metrics/url.rs
vendored
@ -156,12 +156,11 @@ impl UrlMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -213,7 +212,7 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
1,
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
.unwrap()
|
||||
);
|
||||
}
|
||||
@ -238,8 +237,7 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
1,
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None)
|
||||
.unwrap()
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
@ -297,8 +295,8 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
incorrects.len(),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None)
|
||||
.unwrap() as usize
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).unwrap()
|
||||
as usize
|
||||
);
|
||||
|
||||
for correct in corrects.into_iter() {
|
||||
|
@ -148,12 +148,11 @@ impl UuidMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType, ping_name: Option<String>) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
crate::block_on_dispatcher();
|
||||
|
||||
crate::core::with_glean(|glean| {
|
||||
test_get_num_recorded_errors(glean, self.meta(), error, ping_name.as_deref())
|
||||
.unwrap_or(0)
|
||||
test_get_num_recorded_errors(glean, self.meta(), error).unwrap_or(0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -35,15 +35,9 @@ pub trait Boolean {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -39,15 +39,9 @@ pub trait Counter {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -50,15 +50,9 @@ pub trait CustomDistribution {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors recorded.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -44,15 +44,9 @@ pub trait Datetime {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -110,15 +110,9 @@ pub trait Event {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -32,15 +32,9 @@ where
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -46,15 +46,9 @@ pub trait MemoryDistribution {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors recorded.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -39,15 +39,9 @@ pub trait Numerator {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - the optional name of the ping to retrieve the metric
|
||||
/// for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -39,15 +39,9 @@ pub trait Quantity {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -49,15 +49,9 @@ pub trait Rate {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - the optional name of the ping to retrieve the metric
|
||||
/// for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -42,15 +42,9 @@ pub trait String {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -52,15 +52,9 @@ pub trait StringList {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors recorded.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -42,15 +42,9 @@ pub trait Text {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -59,15 +59,9 @@ pub trait Timespan {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -65,15 +65,9 @@ pub trait TimingDistribution {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors recorded.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -43,15 +43,9 @@ pub trait Url {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
@ -38,15 +38,9 @@ pub trait Uuid {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `error` - The type of error
|
||||
/// * `ping_name` - represents the optional name of the ping to retrieve the
|
||||
/// metric for. Defaults to the first value in `send_in_pings`.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32;
|
||||
fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32;
|
||||
}
|
||||
|
2
third_party/rust/glean-core/tests/counter.rs
vendored
2
third_party/rust/glean-core/tests/counter.rs
vendored
@ -123,7 +123,7 @@ fn counters_must_not_increment_when_passed_zero_or_negative() {
|
||||
// Make sure that the errors have been recorded
|
||||
assert_eq!(
|
||||
Ok(2),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -143,13 +143,9 @@ mod linear {
|
||||
assert_eq!(1, snapshot.values[&3]);
|
||||
|
||||
// No errors should be reported.
|
||||
assert!(test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
.is_err());
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -191,12 +187,7 @@ mod linear {
|
||||
// 1 error should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
||||
@ -354,13 +345,9 @@ mod exponential {
|
||||
assert_eq!(1, snapshot.values[&3]);
|
||||
|
||||
// No errors should be reported.
|
||||
assert!(test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
.is_err());
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -402,12 +389,7 @@ mod exponential {
|
||||
// 1 error should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
||||
|
2
third_party/rust/glean-core/tests/labeled.rs
vendored
2
third_party/rust/glean-core/tests/labeled.rs
vendored
@ -167,7 +167,7 @@ fn can_record_error_for_submetric() {
|
||||
// Make sure that the errors have been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -136,13 +136,7 @@ fn the_accumulate_samples_api_correctly_stores_memory_values() {
|
||||
assert_eq!(1, snapshot.values[&3024]);
|
||||
|
||||
// No errors should be reported.
|
||||
assert!(test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
.is_err());
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -183,11 +177,6 @@ fn the_accumulate_samples_api_correctly_handles_negative_values() {
|
||||
// 1 error should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
@ -113,6 +113,6 @@ fn quantities_must_not_set_when_passed_negative() {
|
||||
// Make sure that the errors have been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
20
third_party/rust/glean-core/tests/rate.rs
vendored
20
third_party/rust/glean-core/tests/rate.rs
vendored
@ -24,9 +24,7 @@ fn rate_smoke() {
|
||||
metric.add_to_numerator_sync(&glean, 0);
|
||||
metric.add_to_denominator_sync(&glean, 0);
|
||||
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None).is_err(),
|
||||
);
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
|
||||
|
||||
// Adding a negative value errors.
|
||||
metric.add_to_numerator_sync(&glean, -1);
|
||||
@ -34,7 +32,7 @@ fn rate_smoke() {
|
||||
|
||||
assert_eq!(
|
||||
Ok(2),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue),
|
||||
);
|
||||
|
||||
// Getting the value returns 0s if that's all we have.
|
||||
@ -61,16 +59,14 @@ fn numerator_smoke() {
|
||||
// Adding 0 doesn't error.
|
||||
metric.add_to_numerator_sync(&glean, 0);
|
||||
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None).is_err()
|
||||
);
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
|
||||
|
||||
// Adding a negative value errors.
|
||||
metric.add_to_numerator_sync(&glean, -1);
|
||||
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue),
|
||||
);
|
||||
|
||||
// Getting the value returns 0s if that's all we have.
|
||||
@ -124,12 +120,8 @@ fn denominator_smoke() {
|
||||
denom.add_sync(&glean, 7);
|
||||
|
||||
// no errors.
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, num1.meta(), ErrorType::InvalidValue, None).is_err()
|
||||
);
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, num2.meta(), ErrorType::InvalidValue, None).is_err()
|
||||
);
|
||||
assert!(test_get_num_recorded_errors(&glean, num1.meta(), ErrorType::InvalidValue).is_err());
|
||||
assert!(test_get_num_recorded_errors(&glean, num2.meta(), ErrorType::InvalidValue).is_err());
|
||||
|
||||
// Getting the value returns 0s if that's all we have.
|
||||
let data = num1.get_value(&glean, None).unwrap();
|
||||
|
2
third_party/rust/glean-core/tests/string.rs
vendored
2
third_party/rust/glean-core/tests/string.rs
vendored
@ -116,6 +116,6 @@ fn long_string_values_are_truncated() {
|
||||
// Make sure that the errors have been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
}
|
||||
|
16
third_party/rust/glean-core/tests/string_list.rs
vendored
16
third_party/rust/glean-core/tests/string_list.rs
vendored
@ -128,7 +128,7 @@ fn long_string_values_are_truncated() {
|
||||
// Ensure the error has been recorded.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
|
||||
metric.set_sync(&glean, vec![test_string.clone()]);
|
||||
@ -142,7 +142,7 @@ fn long_string_values_are_truncated() {
|
||||
// Ensure the error has been recorded.
|
||||
assert_eq!(
|
||||
Ok(2),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
}
|
||||
|
||||
@ -170,9 +170,7 @@ fn disabled_string_lists_dont_record() {
|
||||
assert_eq!(None, metric.get_value(&glean, "store1"));
|
||||
|
||||
// Ensure no error was recorded.
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None).is_err()
|
||||
);
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -206,7 +204,7 @@ fn string_lists_dont_exceed_max_items() {
|
||||
// Ensure we recorded the error.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
|
||||
// Try to set it to a list that's too long. Ensure it cuts off at 20 elements.
|
||||
@ -220,7 +218,7 @@ fn string_lists_dont_exceed_max_items() {
|
||||
|
||||
assert_eq!(
|
||||
Ok(2),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
||||
@ -243,7 +241,5 @@ fn set_does_not_record_error_when_receiving_empty_list() {
|
||||
assert_eq!(Some(vec![]), metric.get_value(&glean, "store1"));
|
||||
|
||||
// Ensure we didn't record an error.
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None).is_err()
|
||||
);
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
|
||||
}
|
||||
|
2
third_party/rust/glean-core/tests/text.rs
vendored
2
third_party/rust/glean-core/tests/text.rs
vendored
@ -110,6 +110,6 @@ fn long_text_values_are_truncated() {
|
||||
// Make sure that the errors have been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
}
|
||||
|
12
third_party/rust/glean-core/tests/timespan.rs
vendored
12
third_party/rust/glean-core/tests/timespan.rs
vendored
@ -115,9 +115,7 @@ fn second_timer_run_is_skipped() {
|
||||
metric.set_stop(&glean, duration);
|
||||
|
||||
// No error should be recorded here: we had no prior value stored.
|
||||
assert!(
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState, None).is_err()
|
||||
);
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState).is_err());
|
||||
|
||||
let first_value = metric.get_value(&glean, "store1").unwrap();
|
||||
assert_eq!(duration, first_value);
|
||||
@ -132,7 +130,7 @@ fn second_timer_run_is_skipped() {
|
||||
// new measurement was dropped.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState)
|
||||
);
|
||||
}
|
||||
|
||||
@ -281,7 +279,7 @@ fn set_raw_time_does_nothing_when_timer_running() {
|
||||
// Make sure that the error has been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState)
|
||||
);
|
||||
}
|
||||
|
||||
@ -324,7 +322,7 @@ fn timespan_is_not_tracked_across_upload_toggle() {
|
||||
// Make sure that the error has been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState, None)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState)
|
||||
);
|
||||
}
|
||||
|
||||
@ -348,6 +346,6 @@ fn time_cannot_go_backwards() {
|
||||
assert!(metric.get_value(&glean, "test1").is_none());
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue, None),
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue),
|
||||
);
|
||||
}
|
||||
|
@ -134,12 +134,7 @@ fn timing_distributions_must_not_accumulate_negative_values() {
|
||||
// Make sure that the errors have been recorded
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
||||
@ -180,13 +175,7 @@ fn the_accumulate_samples_api_correctly_stores_timing_values() {
|
||||
assert_eq!(1, snapshot.values[&2784941737]);
|
||||
|
||||
// No errors should be reported.
|
||||
assert!(test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
.is_err());
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -223,12 +212,7 @@ fn the_accumulate_samples_api_correctly_handles_negative_values() {
|
||||
// 1 error should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidValue,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidValue)
|
||||
);
|
||||
}
|
||||
|
||||
@ -269,12 +253,7 @@ fn the_accumulate_samples_api_correctly_handles_overflowing_values() {
|
||||
// 1 error should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidOverflow,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
}
|
||||
|
||||
@ -331,12 +310,7 @@ fn stopping_non_existing_id_records_an_error() {
|
||||
// 1 error should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidState,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState)
|
||||
);
|
||||
}
|
||||
|
||||
@ -377,13 +351,7 @@ fn the_accumulate_raw_samples_api_correctly_stores_timing_values() {
|
||||
assert_eq!(1, snapshot.values[&2784941737]);
|
||||
|
||||
// No errors should be reported.
|
||||
assert!(test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidState,
|
||||
Some("store1")
|
||||
)
|
||||
.is_err());
|
||||
assert!(test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidState).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -430,11 +398,6 @@ fn raw_samples_api_error_cases() {
|
||||
// No errors should be reported.
|
||||
assert_eq!(
|
||||
Ok(1),
|
||||
test_get_num_recorded_errors(
|
||||
&glean,
|
||||
metric.meta(),
|
||||
ErrorType::InvalidOverflow,
|
||||
Some("store1")
|
||||
)
|
||||
test_get_num_recorded_errors(&glean, metric.meta(), ErrorType::InvalidOverflow)
|
||||
);
|
||||
}
|
||||
|
2
third_party/rust/glean/.cargo-checksum.json
vendored
2
third_party/rust/glean/.cargo-checksum.json
vendored
@ -1 +1 @@
|
||||
{"files":{"Cargo.toml":"e118fe27a3ad1a7c2ec5127996ea93636b0b87567c2425f8bef98eaf917866e6","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5bc5b1c46695f628e1023662752272e938a963b535d5686bd1ecc433f9e018c4","src/common_test.rs":"68f6d408cb7b683fa32c8b38a4df1e6c45bfd77c0c90ca35976ea7548bbc4b2f","src/configuration.rs":"37ad5b3e7d4e31dd04a7d6690179168b5f2768d87dd36056dee5d08bdbe20fb2","src/core_metrics.rs":"76ac5350cb6f82d9a193d519b085a08f138dceba77da3514bd0c636bcdefefca","src/lib.rs":"e342d497d60abceca3c84d35523a54d187b0282220a112da53e4ab1cf76da205","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"86cbcb0b46f9d13923a20db9e482b65da49d7daa4e335a3f3092f1d760f572b0","src/private/event.rs":"f6cd799c7764c53510180a1cef6a5a9b435fae27b87270519d5b4e59201e8ecc","src/private/mod.rs":"0364ecf5f0439443a5b209583f4ff2c474b79f7c253c981ab0b7cdc528368698","src/private/ping.rs":"cbdc57f41fc9d46e56b4dfff91ac683753d1f8b3ecd0aa9bc3419e3595b8b81b","src/system.rs":"ff23a5b94f52dab484342dfed702412bc29ab1bbfd5af326033d8e07e7b9075f","src/test.rs":"30d62d967c56a7ca76c097e27bfb6d6d3779ccd5d374cf5a07a04216e4e0880b","tests/common/mod.rs":"37cd4c48e140c793b852ae09fb3e812da28a4412977295015bcbffd632fcf294","tests/init_fails.rs":"9b78226a4e3220de5b64a205a97b8d5778d1700391b5b71c7819b6cdd120747e","tests/never_init.rs":"1f33b8ce7ca3514b57b48cc16d98408974c85cf8aa7d13257ffc2ad878ebb295","tests/no_time_to_init.rs":"494dcddce49f279c6508f484ee59cf8bb83e7324de07bdbc1142f2a066b7f6a1","tests/overflowing_preinit.rs":"396206d5078b7e6c148bbf2aecb0f963cfaa4d7eff3fc7bf6590125076ee6113","tests/persist_ping_lifetime.rs":"2297d4b208e14188e6dcca2d4806b805cfc7dd824d21bd143a7803b95e0709f4","tests/persist_ping_lifetime_nopanic.rs":"06f1f3ca3b8a6c8b7fc4d6fc48d0e1d2ccffd32139f080db0a95003e9edd507d","tests/schema.rs":"a96089f828928b6be1fad7815e3269f5693af1b773e570312b357a29af28122a","tests/simple.rs":"a1d72af899293390bb955ca379baafb89c29bb746630409f8c51f453d222dbad"},"package":"fe54494f067655870956431d2a6942e56611da53d67101dd64847445b29367b0"}
|
||||
{"files":{"Cargo.toml":"cca6235962158e52716cffef30031b7bd6d9c6ace3f06267d2e3da34d24f7c15","LICENSE":"1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5","README.md":"5bc5b1c46695f628e1023662752272e938a963b535d5686bd1ecc433f9e018c4","src/common_test.rs":"68f6d408cb7b683fa32c8b38a4df1e6c45bfd77c0c90ca35976ea7548bbc4b2f","src/configuration.rs":"37ad5b3e7d4e31dd04a7d6690179168b5f2768d87dd36056dee5d08bdbe20fb2","src/core_metrics.rs":"76ac5350cb6f82d9a193d519b085a08f138dceba77da3514bd0c636bcdefefca","src/lib.rs":"e342d497d60abceca3c84d35523a54d187b0282220a112da53e4ab1cf76da205","src/net/http_uploader.rs":"43812a70d19a38e8d7a093c8076c2b6345372c3c861b0f3511428762700a65e0","src/net/mod.rs":"86cbcb0b46f9d13923a20db9e482b65da49d7daa4e335a3f3092f1d760f572b0","src/private/event.rs":"02bbebf545695812e5055741cc0b5f3c99eda2039e684e26fcdd5f087ed15fe3","src/private/mod.rs":"0364ecf5f0439443a5b209583f4ff2c474b79f7c253c981ab0b7cdc528368698","src/private/ping.rs":"cbdc57f41fc9d46e56b4dfff91ac683753d1f8b3ecd0aa9bc3419e3595b8b81b","src/system.rs":"ff23a5b94f52dab484342dfed702412bc29ab1bbfd5af326033d8e07e7b9075f","src/test.rs":"d70c6aaadd529bec2fa3029c4138193865e598ad054ec636a4b5baae48177f99","tests/common/mod.rs":"37cd4c48e140c793b852ae09fb3e812da28a4412977295015bcbffd632fcf294","tests/init_fails.rs":"9b78226a4e3220de5b64a205a97b8d5778d1700391b5b71c7819b6cdd120747e","tests/never_init.rs":"1f33b8ce7ca3514b57b48cc16d98408974c85cf8aa7d13257ffc2ad878ebb295","tests/no_time_to_init.rs":"494dcddce49f279c6508f484ee59cf8bb83e7324de07bdbc1142f2a066b7f6a1","tests/overflowing_preinit.rs":"396206d5078b7e6c148bbf2aecb0f963cfaa4d7eff3fc7bf6590125076ee6113","tests/persist_ping_lifetime.rs":"2297d4b208e14188e6dcca2d4806b805cfc7dd824d21bd143a7803b95e0709f4","tests/persist_ping_lifetime_nopanic.rs":"06f1f3ca3b8a6c8b7fc4d6fc48d0e1d2ccffd32139f080db0a95003e9edd507d","tests/schema.rs":"a96089f828928b6be1fad7815e3269f5693af1b773e570312b357a29af28122a","tests/simple.rs":"a1d72af899293390bb955ca379baafb89c29bb746630409f8c51f453d222dbad"},"package":"a20e782acaa1771ea4de48aa8bcf3421ae1e77c36dbae7595428fc2e333d0df5"}
|
9
third_party/rust/glean/Cargo.toml
vendored
9
third_party/rust/glean/Cargo.toml
vendored
@ -12,7 +12,7 @@
|
||||
[package]
|
||||
edition = "2018"
|
||||
name = "glean"
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
authors = [
|
||||
"Jan-Erik Rediger <jrediger@mozilla.com>",
|
||||
"The Glean Team <glean-team@mozilla.com>",
|
||||
@ -41,7 +41,7 @@ features = ["serde"]
|
||||
version = "0.5"
|
||||
|
||||
[dependencies.glean-core]
|
||||
version = "50.1.3"
|
||||
version = "51.0.1"
|
||||
|
||||
[dependencies.inherent]
|
||||
version = "1"
|
||||
@ -85,14 +85,11 @@ default-features = false
|
||||
version = "1.0.19"
|
||||
|
||||
[dev-dependencies.jsonschema-valid]
|
||||
version = "0.4.0"
|
||||
version = "0.5.0"
|
||||
|
||||
[dev-dependencies.tempfile]
|
||||
version = "3.1.0"
|
||||
|
||||
[features]
|
||||
rkv-safe-mode = ["glean-core/rkv-safe-mode"]
|
||||
|
||||
[badges.circle-ci]
|
||||
branch = "main"
|
||||
repository = "mozilla/glean"
|
||||
|
72
third_party/rust/glean/src/private/event.rs
vendored
72
third_party/rust/glean/src/private/event.rs
vendored
@ -38,6 +38,18 @@ impl<K: traits::ExtraKeys> EventMetric<K> {
|
||||
}
|
||||
}
|
||||
|
||||
/// The public constructor used by runtime-defined metrics.
|
||||
pub fn with_runtime_extra_keys(
|
||||
meta: glean_core::CommonMetricData,
|
||||
allowed_extra_keys: Vec<String>,
|
||||
) -> Self {
|
||||
let inner = glean_core::metrics::EventMetric::new(meta, allowed_extra_keys);
|
||||
Self {
|
||||
inner,
|
||||
extra_keys: PhantomData,
|
||||
}
|
||||
}
|
||||
|
||||
/// Record a new event with a provided timestamp.
|
||||
///
|
||||
/// It's the caller's responsibility to ensure the timestamp comes from the same clock source.
|
||||
@ -132,6 +144,57 @@ mod test {
|
||||
|
||||
assert_eq!(None, data[2].extra);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn with_runtime_extra_keys() {
|
||||
let _lock = lock_test();
|
||||
let _t = new_glean(None, true);
|
||||
|
||||
#[derive(Default, Debug, Clone, Hash, Eq, PartialEq)]
|
||||
struct RuntimeExtra {}
|
||||
|
||||
impl glean_core::traits::ExtraKeys for RuntimeExtra {
|
||||
const ALLOWED_KEYS: &'static [&'static str] = &[];
|
||||
|
||||
fn into_ffi_extra(self) -> HashMap<String, String> {
|
||||
HashMap::new()
|
||||
}
|
||||
}
|
||||
|
||||
let metric: EventMetric<RuntimeExtra> = EventMetric::with_runtime_extra_keys(
|
||||
CommonMetricData {
|
||||
name: "event".into(),
|
||||
category: "test".into(),
|
||||
send_in_pings: vec!["test1".into()],
|
||||
..Default::default()
|
||||
},
|
||||
vec!["key1".into(), "key2".into()],
|
||||
);
|
||||
|
||||
let map1 = HashMap::from([("key1".into(), "1".into())]);
|
||||
metric.record_with_time(0, map1);
|
||||
|
||||
let map2 = HashMap::from([("key1".into(), "1".into()), ("key2".into(), "2".into())]);
|
||||
metric.record_with_time(1, map2);
|
||||
|
||||
metric.record_with_time(2, HashMap::new());
|
||||
|
||||
let data = metric.test_get_value(None).expect("no event recorded");
|
||||
assert_eq!(3, data.len());
|
||||
assert!(data[0].timestamp <= data[1].timestamp);
|
||||
assert!(data[1].timestamp <= data[2].timestamp);
|
||||
|
||||
let mut map = HashMap::new();
|
||||
map.insert("key1".into(), "1".into());
|
||||
assert_eq!(Some(map), data[0].extra);
|
||||
|
||||
let mut map = HashMap::new();
|
||||
map.insert("key1".into(), "1".into());
|
||||
map.insert("key2".into(), "2".into());
|
||||
assert_eq!(Some(map), data[1].extra);
|
||||
|
||||
assert_eq!(None, data[2].extra);
|
||||
}
|
||||
}
|
||||
|
||||
#[inherent]
|
||||
@ -154,12 +217,7 @@ impl<K: traits::ExtraKeys> traits::Event for EventMetric<K> {
|
||||
self.inner.test_get_value(ping_name)
|
||||
}
|
||||
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
self.inner.test_get_num_recorded_errors(error, ping_name)
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
self.inner.test_get_num_recorded_errors(error)
|
||||
}
|
||||
}
|
||||
|
2
third_party/rust/glean/src/test.rs
vendored
2
third_party/rust/glean/src/test.rs
vendored
@ -1127,7 +1127,7 @@ fn test_boolean_get_num_errors() {
|
||||
});
|
||||
|
||||
// Check specifically for an invalid label
|
||||
let result = metric.test_get_num_recorded_errors(ErrorType::InvalidLabel, None);
|
||||
let result = metric.test_get_num_recorded_errors(ErrorType::InvalidLabel);
|
||||
|
||||
assert_eq!(result, 0);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ edition = "2018"
|
||||
license = "MPL-2.0"
|
||||
|
||||
[dependencies]
|
||||
glean = { version = "50.1.2", features = ["rkv-safe-mode"] }
|
||||
glean = "51.0.1"
|
||||
log = "0.4"
|
||||
nserror = { path = "../../../xpcom/rust/nserror" }
|
||||
nsstring = { path = "../../../xpcom/rust/nsstring" }
|
||||
|
@ -8,7 +8,7 @@ publish = false
|
||||
[dependencies]
|
||||
bincode = "1.0"
|
||||
chrono = "0.4.10"
|
||||
glean = "50.1.3"
|
||||
glean = "51.0.1"
|
||||
inherent = "1.0.0"
|
||||
log = "0.4"
|
||||
nsstring = { path = "../../../../xpcom/rust/nsstring", optional = true }
|
||||
|
@ -17,12 +17,8 @@ pub extern "C" fn fog_boolean_test_get_value(id: u32, ping_name: &nsACString) ->
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_boolean_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(BOOLEAN_MAP, id, metric, test_get_errors!(metric, ping_name));
|
||||
pub extern "C" fn fog_boolean_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(BOOLEAN_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
||||
|
@ -22,11 +22,7 @@ pub unsafe extern "C" fn fog_counter_test_get_value(id: u32, ping_name: &nsACStr
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_counter_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(COUNTER_MAP, id, metric, test_get_errors!(metric, ping_name));
|
||||
pub extern "C" fn fog_counter_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(COUNTER_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -69,14 +69,14 @@ pub extern "C" fn fog_custom_distribution_accumulate_samples_signed(
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_custom_distribution_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
CUSTOM_DISTRIBUTION_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
test_get_errors!(metric)
|
||||
);
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -60,16 +60,7 @@ pub extern "C" fn fog_datetime_set(id: u32, dt: &FogDatetime) {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_datetime_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
DATETIME_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
);
|
||||
pub extern "C" fn fog_datetime_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(DATETIME_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -22,16 +22,7 @@ pub unsafe extern "C" fn fog_denominator_test_get_value(id: u32, ping_name: &nsA
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_denominator_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
DENOMINATOR_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
);
|
||||
pub extern "C" fn fog_denominator_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(DENOMINATOR_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -60,17 +60,8 @@ pub unsafe extern "C" fn fog_event_test_has_value(id: u32, ping_name: &nsACStrin
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_event_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let storage = if ping_name.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(ping_name.to_utf8().into_owned())
|
||||
};
|
||||
let err = metric_maps::event_test_get_error(id, storage);
|
||||
pub extern "C" fn fog_event_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = metric_maps::event_test_get_error(id);
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
||||
|
@ -136,30 +136,8 @@ macro_rules! test_get {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `$metric` - The metric to test.
|
||||
/// * `$storage` - the storage name to look into, an nsACString.
|
||||
macro_rules! test_get_errors {
|
||||
($metric:path, $storage:ident) => {{
|
||||
let storage = if $storage.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some($storage.to_utf8())
|
||||
};
|
||||
// Note: I'd really appreciate a trick that'd get the compiler to
|
||||
// double-check I haven't missed any error types here.
|
||||
|
||||
test_get_errors_string!($metric, storage)
|
||||
}};
|
||||
}
|
||||
|
||||
/// Check the provided metric in the provided storage for errors.
|
||||
/// On finding one, return an error string.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `$metric` - The metric to test.
|
||||
/// * `$storage` - the storage name to look into, an Option<String>
|
||||
macro_rules! test_get_errors_string {
|
||||
($metric:path, $storage:ident) => {{
|
||||
($metric:path) => {{
|
||||
let error_types = [
|
||||
glean::ErrorType::InvalidValue,
|
||||
glean::ErrorType::InvalidLabel,
|
||||
@ -168,7 +146,7 @@ macro_rules! test_get_errors_string {
|
||||
];
|
||||
let mut error_str = None;
|
||||
for &error_type in error_types.iter() {
|
||||
let num_errors = $metric.test_get_num_recorded_errors(error_type, $storage.as_deref());
|
||||
let num_errors = $metric.test_get_num_recorded_errors(error_type);
|
||||
if num_errors > 0 {
|
||||
error_str = Some(format!(
|
||||
"Metric had {} error(s) of type {}!",
|
||||
|
@ -51,14 +51,14 @@ pub extern "C" fn fog_memory_distribution_accumulate(id: u32, sample: u64) {
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_memory_distribution_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
MEMORY_DISTRIBUTION_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
test_get_errors!(metric)
|
||||
);
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -29,16 +29,7 @@ pub unsafe extern "C" fn fog_numerator_test_get_value(
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_numerator_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
NUMERATOR_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
);
|
||||
pub extern "C" fn fog_numerator_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(NUMERATOR_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -22,16 +22,7 @@ pub extern "C" fn fog_quantity_test_get_value(id: u32, ping_name: &nsACString) -
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_quantity_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
QUANTITY_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
);
|
||||
pub extern "C" fn fog_quantity_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(QUANTITY_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -34,11 +34,7 @@ pub unsafe extern "C" fn fog_rate_test_get_value(
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_rate_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(RATE_MAP, id, metric, test_get_errors!(metric, ping_name));
|
||||
pub extern "C" fn fog_rate_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(RATE_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -27,11 +27,7 @@ pub extern "C" fn fog_string_set(id: u32, value: &nsACString) {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_string_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(STRING_MAP, id, metric, test_get_errors!(metric, ping_name));
|
||||
pub extern "C" fn fog_string_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(STRING_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -36,16 +36,7 @@ pub extern "C" fn fog_string_list_set(id: u32, value: &ThinVec<nsCString>) {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_string_list_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
STRING_LIST_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
);
|
||||
pub extern "C" fn fog_string_list_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(STRING_LIST_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -42,16 +42,7 @@ pub extern "C" fn fog_timespan_test_get_value(id: u32, ping_name: &nsACString) -
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_timespan_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
TIMESPAN_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
);
|
||||
pub extern "C" fn fog_timespan_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(TIMESPAN_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -77,14 +77,14 @@ pub extern "C" fn fog_timing_distribution_test_get_value(
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_timing_distribution_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(
|
||||
TIMING_DISTRIBUTION_MAP,
|
||||
id,
|
||||
metric,
|
||||
test_get_errors!(metric, ping_name)
|
||||
test_get_errors!(metric)
|
||||
);
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -23,11 +23,7 @@ pub extern "C" fn fog_url_set(id: u32, value: &nsACString) {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_url_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(URL_MAP, id, metric, test_get_errors!(metric, ping_name));
|
||||
pub extern "C" fn fog_url_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(URL_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -31,11 +31,7 @@ pub extern "C" fn fog_uuid_generate_and_set(id: u32) {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fog_uuid_test_get_error(
|
||||
id: u32,
|
||||
ping_name: &nsACString,
|
||||
error_str: &mut nsACString,
|
||||
) -> bool {
|
||||
let err = with_metric!(UUID_MAP, id, metric, test_get_errors!(metric, ping_name));
|
||||
pub extern "C" fn fog_uuid_test_get_error(id: u32, error_str: &mut nsACString) -> bool {
|
||||
let err = with_metric!(UUID_MAP, id, metric, test_get_errors!(metric));
|
||||
err.map(|err_str| error_str.assign(&err_str)).is_some()
|
||||
}
|
||||
|
@ -96,14 +96,9 @@ impl Boolean for BooleanMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
BooleanMetric::Parent(p) => p.test_get_num_recorded_errors(error, ping_name),
|
||||
BooleanMetric::Parent(p) => p.test_get_num_recorded_errors(error),
|
||||
BooleanMetric::Child(_) => panic!(
|
||||
"Cannot get the number of recorded errors for boolean metric in non-parent process!"
|
||||
),
|
||||
|
@ -119,16 +119,9 @@ impl Counter for CounterMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
CounterMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
}
|
||||
CounterMetric::Parent { inner, .. } => inner.test_get_num_recorded_errors(error),
|
||||
CounterMetric::Child(c) => panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
c.0
|
||||
|
@ -105,15 +105,10 @@ impl CustomDistribution for CustomDistributionMetric {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
match self {
|
||||
CustomDistributionMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
inner.test_get_num_recorded_errors(error)
|
||||
}
|
||||
CustomDistributionMetric::Child(c) => panic!(
|
||||
"Cannot get number of recorded errors for {:?} in non-parent process!",
|
||||
|
@ -158,14 +158,9 @@ impl Datetime for DatetimeMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
DatetimeMetric::Parent(p) => p.test_get_num_recorded_errors(error, ping_name),
|
||||
DatetimeMetric::Parent(p) => p.test_get_num_recorded_errors(error),
|
||||
DatetimeMetric::Child(_) => panic!("Cannot get the number of recorded errors for DatetimeMetric in non-parent process!"),
|
||||
}
|
||||
}
|
||||
|
@ -90,16 +90,9 @@ impl Counter for DenominatorMetric {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
DenominatorMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
}
|
||||
DenominatorMetric::Parent { inner, .. } => inner.test_get_num_recorded_errors(error),
|
||||
DenominatorMetric::Child(c) => {
|
||||
panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
|
@ -112,15 +112,9 @@ impl<K: 'static + ExtraKeys + Send + Sync> Event for EventMetric<K> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
EventMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
}
|
||||
EventMetric::Parent { inner, .. } => inner.test_get_num_recorded_errors(error),
|
||||
EventMetric::Child(c) => panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
c.0
|
||||
|
@ -175,16 +175,11 @@ where
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: ErrorType) -> i32 {
|
||||
if need_ipc() {
|
||||
panic!("Use of labeled metrics in IPC land not yet implemented!");
|
||||
} else {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
self.core.test_get_num_recorded_errors(error, ping_name)
|
||||
self.core.test_get_num_recorded_errors(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -317,7 +312,7 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
1,
|
||||
metric.test_get_num_recorded_errors(ErrorType::InvalidLabel, None)
|
||||
metric.test_get_num_recorded_errors(ErrorType::InvalidLabel)
|
||||
);
|
||||
}
|
||||
|
||||
@ -355,7 +350,7 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
0,
|
||||
metric.test_get_num_recorded_errors(ErrorType::InvalidLabel, None)
|
||||
metric.test_get_num_recorded_errors(ErrorType::InvalidLabel)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -107,13 +107,9 @@ impl Counter for LabeledCounterMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
LabeledCounterMetric::Parent(p) => p.test_get_num_recorded_errors(error, ping_name),
|
||||
LabeledCounterMetric::Parent(p) => p.test_get_num_recorded_errors(error),
|
||||
LabeledCounterMetric::Child { id, .. } => panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
id
|
||||
|
@ -125,15 +125,10 @@ impl MemoryDistribution for MemoryDistributionMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors recorded.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
MemoryDistributionMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
inner.test_get_num_recorded_errors(error)
|
||||
}
|
||||
MemoryDistributionMetric::Child(c) => panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
|
@ -88,16 +88,9 @@ impl Numerator for NumeratorMetric {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
NumeratorMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
}
|
||||
NumeratorMetric::Parent { inner, .. } => inner.test_get_num_recorded_errors(error),
|
||||
NumeratorMetric::Child(c) => {
|
||||
panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
|
@ -99,15 +99,10 @@ impl Quantity for QuantityMetric {
|
||||
/// # Returns
|
||||
///
|
||||
/// The number of errors reported.
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
QuantityMetric::Parent(p) => {
|
||||
p.test_get_num_recorded_errors(error, ping_name)
|
||||
p.test_get_num_recorded_errors(error)
|
||||
}
|
||||
QuantityMetric::Child(_) => panic!(
|
||||
"Cannot get the number of recorded errors for quantity metric in non-parent process!"
|
||||
|
@ -107,16 +107,9 @@ impl Rate for RateMetric {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn test_get_num_recorded_errors<'a, S: Into<Option<&'a str>>>(
|
||||
&self,
|
||||
error: glean::ErrorType,
|
||||
ping_name: S,
|
||||
) -> i32 {
|
||||
let ping_name = ping_name.into().map(|s| s.to_string());
|
||||
pub fn test_get_num_recorded_errors(&self, error: glean::ErrorType) -> i32 {
|
||||
match self {
|
||||
RateMetric::Parent { inner, .. } => {
|
||||
inner.test_get_num_recorded_errors(error, ping_name)
|
||||
}
|
||||
RateMetric::Parent { inner, .. } => inner.test_get_num_recorded_errors(error),
|
||||
RateMetric::Child(c) => {
|
||||
panic!(
|
||||
"Cannot get the number of recorded errors for {:?} in non-parent process!",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user