diff --git a/backend/Cargo.toml b/backend/Cargo.toml index c77f6774..df4b4454 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -42,6 +42,7 @@ schemars = "0.8" regex = "1.11.1" notify-rust = "4.11" octocrab = "0.44" +os_info = "3.12.0" sentry = { version = "0.41.0", features = ["anyhow", "backtrace", "panic", "debug-images"] } sentry-tower = "0.41.0" sentry-tracing = { version = "0.41.0", features = ["backtrace"] } diff --git a/backend/src/services/analytics.rs b/backend/src/services/analytics.rs index bf617c09..e68caa62 100644 --- a/backend/src/services/analytics.rs +++ b/backend/src/services/analytics.rs @@ -4,6 +4,7 @@ use std::{ time::Duration, }; +use os_info; use serde_json::{json, Value}; #[derive(Debug, Clone)] @@ -75,6 +76,7 @@ impl AnalyticsService { json!(chrono::Utc::now().to_rfc3339()), ); props.insert("version".to_string(), json!(env!("CARGO_PKG_VERSION"))); + props.insert("device".to_string(), get_device_info()); } payload["properties"] = event_properties; } @@ -167,6 +169,17 @@ pub fn generate_user_id() -> String { format!("npm_user_{:016x}", hasher.finish()) } +fn get_device_info() -> Value { + let info = os_info::get(); + + json!({ + "os_type": info.os_type().to_string(), + "os_version": info.version().to_string(), + "architecture": info.architecture().unwrap_or("unknown").to_string(), + "bitness": info.bitness().to_string(), + }) +} + #[cfg(test)] mod tests { use super::*;