feat(nc-desktop): add sentry to backend (#3652)

This commit is contained in:
Pierre Dommerc
2023-07-20 13:17:49 +02:00
committed by pierre
parent c5f7d066b0
commit d780ac55b1
4 changed files with 326 additions and 5 deletions
+264 -2
View File
@@ -8,6 +8,15 @@ version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
[[package]]
name = "addr2line"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
dependencies = [
"gimli",
]
[[package]]
name = "adler"
version = "1.0.2"
@@ -88,6 +97,9 @@ name = "anyhow"
version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
dependencies = [
"backtrace",
]
[[package]]
name = "arrayref"
@@ -193,6 +205,21 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
version = "0.3.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
dependencies = [
"addr2line",
"cc",
"cfg-if",
"libc",
"miniz_oxide 0.7.1",
"object",
"rustc-demangle",
]
[[package]]
name = "base16ct"
version = "0.1.1"
@@ -1238,6 +1265,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "debugid"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
dependencies = [
"serde",
"uuid 1.3.0",
]
[[package]]
name = "der"
version = "0.6.1"
@@ -1646,6 +1683,18 @@ dependencies = [
"windows-sys 0.45.0",
]
[[package]]
name = "findshlibs"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64"
dependencies = [
"cc",
"lazy_static",
"libc",
"winapi",
]
[[package]]
name = "fix-path-env"
version = "0.1.0"
@@ -1662,7 +1711,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
dependencies = [
"crc32fast",
"miniz_oxide",
"miniz_oxide 0.6.2",
]
[[package]]
@@ -1991,6 +2040,12 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "gimli"
version = "0.27.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
[[package]]
name = "gio"
version = "0.15.12"
@@ -2403,6 +2458,17 @@ dependencies = [
"digest 0.10.6",
]
[[package]]
name = "hostname"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
dependencies = [
"libc",
"match_cfg",
"winapi",
]
[[package]]
name = "html5ever"
version = "0.25.2"
@@ -3047,6 +3113,12 @@ dependencies = [
"tendril",
]
[[package]]
name = "match_cfg"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
[[package]]
name = "matchers"
version = "0.1.0"
@@ -3104,6 +3176,15 @@ dependencies = [
"adler",
]
[[package]]
name = "miniz_oxide"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
dependencies = [
"adler",
]
[[package]]
name = "mio"
version = "0.8.6"
@@ -3471,6 +3552,8 @@ dependencies = [
"rand 0.8.5",
"reqwest",
"rust-embed",
"sentry",
"sentry-log",
"serde",
"serde_json",
"serde_repr",
@@ -4099,6 +4182,15 @@ dependencies = [
"objc",
]
[[package]]
name = "object"
version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.17.1"
@@ -4188,6 +4280,17 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "os_info"
version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
dependencies = [
"log",
"serde",
"winapi",
]
[[package]]
name = "os_str_bytes"
version = "6.5.0"
@@ -4569,7 +4672,7 @@ dependencies = [
"bitflags 1.3.2",
"crc32fast",
"flate2",
"miniz_oxide",
"miniz_oxide 0.6.2",
]
[[package]]
@@ -5040,6 +5143,12 @@ dependencies = [
"walkdir",
]
[[package]]
name = "rustc-demangle"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]]
name = "rustc_version"
version = "0.4.0"
@@ -5286,6 +5395,136 @@ dependencies = [
"pest",
]
[[package]]
name = "sentry"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01b0ad16faa5d12372f914ed40d00bda21a6d1bdcc99264c5e5e1c9495cf3654"
dependencies = [
"httpdate",
"native-tls",
"reqwest",
"sentry-anyhow",
"sentry-backtrace",
"sentry-contexts",
"sentry-core",
"sentry-debug-images",
"sentry-panic",
"sentry-tracing",
"tokio",
"ureq",
]
[[package]]
name = "sentry-anyhow"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f3a571f02f9982af445af829c4837fe4857568a431bd2bed9f7cf88de4a6c44"
dependencies = [
"anyhow",
"sentry-backtrace",
"sentry-core",
]
[[package]]
name = "sentry-backtrace"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11f2ee8f147bb5f22ac59b5c35754a759b9a6f6722402e2a14750b2a63fc59bd"
dependencies = [
"backtrace",
"once_cell",
"regex",
"sentry-core",
]
[[package]]
name = "sentry-contexts"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcd133362c745151eeba0ac61e3ba8350f034e9fe7509877d08059fe1d7720c6"
dependencies = [
"hostname",
"libc",
"os_info",
"rustc_version",
"sentry-core",
"uname",
]
[[package]]
name = "sentry-core"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7163491708804a74446642ff2c80b3acd668d4b9e9f497f85621f3d250fd012b"
dependencies = [
"once_cell",
"rand 0.8.5",
"sentry-types",
"serde",
"serde_json",
]
[[package]]
name = "sentry-debug-images"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a5003d7ff08aa3b2b76994080b183e8cfa06c083e280737c9cee02ca1c70f5e"
dependencies = [
"findshlibs",
"once_cell",
"sentry-core",
]
[[package]]
name = "sentry-log"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2558fc4a85326e6063711b45ce82ed6b18cdacd0732580c1567da914ac1df33e"
dependencies = [
"log",
"sentry-core",
]
[[package]]
name = "sentry-panic"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4dfe8371c9b2e126a8b64f6fefa54cef716ff2a50e63b5558a48b899265bccd"
dependencies = [
"sentry-backtrace",
"sentry-core",
]
[[package]]
name = "sentry-tracing"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aca8b88978677a27ee1a91beafe4052306c474c06f582321fde72d2e2cc2f7f"
dependencies = [
"sentry-backtrace",
"sentry-core",
"tracing-core",
"tracing-subscriber",
]
[[package]]
name = "sentry-types"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e7a88e0c1922d19b3efee12a8215f6a8a806e442e665ada71cc222cab72985f"
dependencies = [
"debugid",
"getrandom 0.2.10",
"hex",
"serde",
"serde_json",
"thiserror",
"time",
"url",
"uuid 1.3.0",
]
[[package]]
name = "serde"
version = "1.0.158"
@@ -6773,6 +7012,15 @@ dependencies = [
"static_assertions",
]
[[package]]
name = "uname"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
dependencies = [
"libc",
]
[[package]]
name = "unicode-bidi"
version = "0.3.13"
@@ -6828,6 +7076,19 @@ version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
name = "ureq"
version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9"
dependencies = [
"base64 0.21.2",
"log",
"native-tls",
"once_cell",
"url",
]
[[package]]
name = "url"
version = "2.3.1"
@@ -6865,6 +7126,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79"
dependencies = [
"getrandom 0.2.10",
"serde",
]
[[package]]
+2
View File
@@ -44,6 +44,8 @@ tokio = { version = "1.24.1", features = ["sync", "time"] }
url = "2.2"
yaml-rust = "0.4"
toml = "0.7"
sentry = { version = "0.31.5", features = [ "anyhow" ] }
sentry-log = "0.31.5"
nym-client-core = { path = "../../../common/client-core" }
nym-api-requests = { path = "../../../nym-api/nym-api-requests" }
+21 -1
View File
@@ -1,4 +1,6 @@
use fern::colors::{Color, ColoredLevelConfig};
use log::Level;
use sentry::Level as SentryLevel;
use serde::Serialize;
use serde_repr::{Deserialize_repr, Serialize_repr};
use std::str::FromStr;
@@ -22,7 +24,10 @@ fn formatted_time() -> String {
_now.format(&format).unwrap()
}
pub fn setup_logging(app_handle: tauri::AppHandle) -> Result<(), log::SetLoggerError> {
pub fn setup_logging(
app_handle: tauri::AppHandle,
monitoring: bool,
) -> Result<(), log::SetLoggerError> {
let colors = ColoredLevelConfig::new()
.trace(Color::Magenta)
.debug(Color::Blue)
@@ -61,6 +66,21 @@ pub fn setup_logging(app_handle: tauri::AppHandle) -> Result<(), log::SetLoggerE
level: record.level().into(),
};
app_handle.emit_all("log://log", msg).unwrap();
}))
.chain(fern::Output::call(move |record| {
if !monitoring {
return;
}
let level = match record.level() {
Level::Error => SentryLevel::Error,
Level::Warn => SentryLevel::Warning,
Level::Info => SentryLevel::Info,
_ => SentryLevel::Debug,
};
// only send error and warn logs to sentry
if let Level::Error | Level::Warn = record.level() {
sentry::capture_message(&record.args().to_string(), level);
};
}));
base_config
+39 -2
View File
@@ -25,6 +25,10 @@ mod state;
mod tasks;
mod window;
// TODO DSN shouldn't be hardcoded
const SENTRY_DSN: &str =
"https://68a2c55113ed47aaa30b9899039b0799@o967446.ingest.sentry.io/4505483113594880";
fn main() {
setup_env(None);
println!("Starting up...");
@@ -32,7 +36,40 @@ fn main() {
// As per breaking change description here
// https://github.com/tauri-apps/tauri/blob/feac1d193c6d618e49916ad0707201f43d5cdd36/tooling/bundler/CHANGELOG.md
if let Err(error) = fix_path_env::fix() {
log::warn!("Failed to fix PATH: {error}");
println!("Failed to fix PATH: {error}");
}
let user_data = UserData::read().unwrap_or_else(|e| {
println!("{}", e);
println!("Fallback to default");
UserData::default()
});
let monitoring = user_data.monitoring.unwrap_or(false);
let _guard = sentry::init((
SENTRY_DSN,
sentry::ClientOptions {
release: sentry::release_name!(),
sample_rate: 1.0, // TODO lower this in prod
traces_sample_rate: 1.0,
..Default::default() // TODO add data scrubbing
// see https://docs.sentry.io/platforms/rust/data-management/sensitive-data/
},
));
sentry::configure_scope(|scope| {
scope.set_user(Some(sentry::User {
id: Some("nym".into()),
..Default::default()
}));
});
if monitoring {
println!("Sentry reporting and monitoring is enabled");
} else {
println!("Monitoring is disabled, dropping sentry guard");
drop(_guard)
}
let user_data = UserData::read().unwrap_or_else(|e| {
@@ -86,7 +123,7 @@ fn main() {
);
}
})
.setup(|app| Ok(crate::logging::setup_logging(app.app_handle())?))
.setup(move |app| Ok(crate::logging::setup_logging(app.app_handle(), monitoring)?))
.system_tray(create_tray_menu())
.on_system_tray_event(tray_menu_event_handler)
.run(context)