diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 9da020cc2..66325fe78 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1053,6 +1053,7 @@ dependencies = [ "connlib-client-shared", "connlib-model", "firezone-logging", + "firezone-telemetry", "ip_network", "jni", "libc", diff --git a/rust/connlib/clients/android/Cargo.toml b/rust/connlib/clients/android/Cargo.toml index 01d6aa889..ae2ae8131 100644 --- a/rust/connlib/clients/android/Cargo.toml +++ b/rust/connlib/clients/android/Cargo.toml @@ -14,6 +14,7 @@ backoff = "0.4.0" connlib-client-shared = { workspace = true } connlib-model = { workspace = true } firezone-logging = { workspace = true } +firezone-telemetry = { workspace = true } ip_network = "0.4" jni = { version = "0.21.1", features = ["invocation"] } libc = "0.2" diff --git a/rust/connlib/clients/android/src/lib.rs b/rust/connlib/clients/android/src/lib.rs index 65c2a27c9..7830ac30f 100644 --- a/rust/connlib/clients/android/src/lib.rs +++ b/rust/connlib/clients/android/src/lib.rs @@ -7,6 +7,7 @@ use crate::tun::Tun; use backoff::ExponentialBackoffBuilder; use connlib_client_shared::{Callbacks, DisconnectError, Session, V4RouteList, V6RouteList}; use connlib_model::{ResourceId, ResourceView}; +use firezone_telemetry::{Telemetry, ANDROID_DSN}; use ip_network::{Ipv4Network, Ipv6Network}; use jni::{ objects::{GlobalRef, JClass, JObject, JString, JValue}, @@ -344,9 +345,11 @@ fn connect( let log_dir = string_from_jstring!(env, log_dir); let log_filter = string_from_jstring!(env, log_filter); let device_info = string_from_jstring!(env, device_info); - let device_info = serde_json::from_str(&device_info).unwrap(); + let telemetry = Telemetry::default(); + telemetry.start(&api_url, env!("CARGO_PKG_VERSION"), ANDROID_DSN); + let handle = init_logging(&PathBuf::from(log_dir), log_filter); install_rustls_crypto_provider(); @@ -394,6 +397,7 @@ fn connect( Ok(SessionWrapper { inner: session, runtime, + telemetry, }) } @@ -451,6 +455,7 @@ pub struct SessionWrapper { inner: Session, runtime: Runtime, + telemetry: Telemetry, } /// # Safety @@ -463,7 +468,10 @@ pub unsafe extern "system" fn Java_dev_firezone_android_tunnel_ConnlibSession_di ) { let session = session_ptr as *mut SessionWrapper; catch_and_throw(&mut env, |_| { - Box::from_raw(session).inner.disconnect(); + let session = Box::from_raw(session); + + session.inner.disconnect(); + session.telemetry.stop(); }); } diff --git a/rust/telemetry/src/lib.rs b/rust/telemetry/src/lib.rs index 3621f7d2b..9d65cf388 100644 --- a/rust/telemetry/src/lib.rs +++ b/rust/telemetry/src/lib.rs @@ -20,6 +20,7 @@ pub const GATEWAY_DSN: Dsn = Dsn("https://f763102cc3937199ec483fbdae63dfdc@o4507 pub const GUI_DSN: Dsn = Dsn("https://2e17bf5ed24a78c0ac9e84a5de2bd6fc@o4507971108339712.ingest.us.sentry.io/4508008945549312"); pub const HEADLESS_DSN: Dsn = Dsn("https://bc27dca8bb37be0142c48c4f89647c13@o4507971108339712.ingest.us.sentry.io/4508010028728320"); pub const IPC_SERVICE_DSN: Dsn = Dsn("https://0590b89fd4479494a1e7ffa4dc705001@o4507971108339712.ingest.us.sentry.io/4508008896069632"); +pub const ANDROID_DSN: Dsn = Dsn("https://928a6ee1f6af9734100b8bc89b2dc87d@o4507971108339712.ingest.us.sentry.io/4508175126233088"); #[derive(Default)] pub struct Telemetry { diff --git a/website/src/components/Changelog/Android.tsx b/website/src/components/Changelog/Android.tsx index 6a28958ef..feecac32c 100644 --- a/website/src/components/Changelog/Android.tsx +++ b/website/src/components/Changelog/Android.tsx @@ -13,6 +13,9 @@ export default function Android() { {/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */} Handles DNS queries over TCP correctly. + + Adds always-on error reporting using sentry.io. +