summaryrefslogtreecommitdiffstats
path: root/third_party/rust/glean-core/src/core_metrics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/glean-core/src/core_metrics.rs')
-rw-r--r--third_party/rust/glean-core/src/core_metrics.rs206
1 files changed, 206 insertions, 0 deletions
diff --git a/third_party/rust/glean-core/src/core_metrics.rs b/third_party/rust/glean-core/src/core_metrics.rs
new file mode 100644
index 0000000000..baa2b8515b
--- /dev/null
+++ b/third_party/rust/glean-core/src/core_metrics.rs
@@ -0,0 +1,206 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+use crate::metrics::{
+ Datetime, DatetimeMetric, QuantityMetric, StringMetric, TimeUnit, TimespanMetric,
+};
+use crate::{CommonMetricData, Lifetime};
+
+use once_cell::sync::Lazy;
+
+/// Metrics included in every ping as `client_info`.
+#[derive(Debug, Default)]
+pub struct ClientInfoMetrics {
+ /// The build identifier generated by the CI system (e.g. "1234/A").
+ pub app_build: String,
+ /// The user visible version string (e.g. "1.0.3").
+ pub app_display_version: String,
+ /// The app's build date
+ pub app_build_date: Datetime,
+
+ /// The architecture of the device (e.g. "arm", "x86").
+ pub architecture: String,
+ /// The name of the operating system (e.g. "Linux", "Android", "iOS").
+ pub os_version: String,
+
+ /// The product-provided release channel (e.g. "beta").
+ pub channel: Option<String>,
+ /// The Android specific SDK version of the software running on this hardware device (e.g. "23").
+ pub android_sdk_version: Option<String>,
+ /// The Windows specific OS build version (e.g. 19043)
+ pub windows_build_number: Option<i64>,
+ /// The manufacturer of the device the application is running on.
+ /// Not set if the device manufacturer can't be determined (e.g. on Desktop).
+ pub device_manufacturer: Option<String>,
+ /// The model of the device the application is running on.
+ /// On Android, this is Build.MODEL, the user-visible marketing name, like "Pixel 2 XL".
+ /// Not set if the device model can't be determined (e.g. on Desktop).
+ pub device_model: Option<String>,
+ /// The locale of the application during initialization (e.g. "es-ES").
+ /// If the locale can't be determined on the system, the value is "und", to indicate "undetermined".
+ pub locale: Option<String>,
+}
+
+/// Metrics included in every ping as `client_info`.
+impl ClientInfoMetrics {
+ /// Creates the client info with dummy values for all.
+ pub fn unknown() -> Self {
+ ClientInfoMetrics {
+ app_build: "Unknown".to_string(),
+ app_display_version: "Unknown".to_string(),
+ app_build_date: Datetime::default(),
+ architecture: "Unknown".to_string(),
+ os_version: "Unknown".to_string(),
+ channel: Some("Unknown".to_string()),
+ android_sdk_version: None,
+ windows_build_number: None,
+ device_manufacturer: None,
+ device_model: None,
+ locale: None,
+ }
+ }
+}
+
+#[allow(non_upper_case_globals)]
+pub mod internal_metrics {
+ use super::*;
+
+ pub static app_build: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "app_build".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static app_display_version: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "app_display_version".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static app_build_date: Lazy<DatetimeMetric> = Lazy::new(|| {
+ DatetimeMetric::new(
+ CommonMetricData {
+ name: "build_date".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ },
+ TimeUnit::Second,
+ )
+ });
+
+ pub static app_channel: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "app_channel".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static os_version: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "os_version".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static architecture: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "architecture".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static android_sdk_version: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "android_sdk_version".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static windows_build_number: Lazy<QuantityMetric> = Lazy::new(|| {
+ QuantityMetric::new(CommonMetricData {
+ name: "windows_build_number".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static device_manufacturer: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "device_manufacturer".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static device_model: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "device_model".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static locale: Lazy<StringMetric> = Lazy::new(|| {
+ StringMetric::new(CommonMetricData {
+ name: "locale".into(),
+ category: "".into(),
+ send_in_pings: vec!["glean_client_info".into()],
+ lifetime: Lifetime::Application,
+ disabled: false,
+ ..Default::default()
+ })
+ });
+
+ pub static baseline_duration: Lazy<TimespanMetric> = Lazy::new(|| {
+ TimespanMetric::new(
+ CommonMetricData {
+ name: "duration".into(),
+ category: "glean.baseline".into(),
+ send_in_pings: vec!["baseline".into()],
+ lifetime: Lifetime::Ping,
+ disabled: false,
+ ..Default::default()
+ },
+ TimeUnit::Second,
+ )
+ });
+}