diff --git a/Cargo.lock b/Cargo.lock index 82a7c32a..f3d629b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -462,6 +462,7 @@ dependencies = [ "rust-rocksdb", "sd-notify", "sentry", + "sentry-tracing", "serde", "serde_html_form", "serde_json", @@ -695,16 +696,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "fallible-iterator" version = "0.3.0" @@ -717,12 +708,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -[[package]] -name = "fastrand" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" - [[package]] name = "fdeflate" version = "0.3.4" @@ -752,18 +737,6 @@ dependencies = [ "version_check", ] -[[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 = "flate2" version = "1.0.28" @@ -780,21 +753,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -876,11 +834,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", - "futures-io", "futures-macro", "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", "slab", @@ -1174,19 +1130,6 @@ dependencies = [ "tokio-rustls", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "hyperlocal" version = "0.8.0" @@ -1450,12 +1393,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - [[package]] name = "lock_api" version = "0.4.11" @@ -1589,24 +1526,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -1751,50 +1670,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "openssl" -version = "0.10.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.55", -] - [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-sys" -version = "0.9.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "opentelemetry" version = "0.21.0" @@ -1876,17 +1757,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "os_info" -version = "3.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" -dependencies = [ - "log", - "serde", - "windows-sys 0.52.0", -] - [[package]] name = "overload" version = "0.1.1" @@ -2242,12 +2112,10 @@ dependencies = [ "http-body", "hyper", "hyper-rustls", - "hyper-tls", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -2260,7 +2128,6 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-native-tls", "tokio-rustls", "tokio-socks", "tower-service", @@ -2546,19 +2413,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "rustls" version = "0.21.10" @@ -2680,43 +2534,7 @@ version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "766448f12e44d68e675d5789a261515c46ac6ccd240abdd451a9c46c84a49523" dependencies = [ - "httpdate", - "native-tls", - "reqwest", - "sentry-backtrace", - "sentry-contexts", "sentry-core", - "sentry-debug-images", - "sentry-panic", - "sentry-tracing", - "tokio", - "ureq", -] - -[[package]] -name = "sentry-backtrace" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32701cad8b3c78101e1cd33039303154791b0ff22e7802ed8cc23212ef478b45" -dependencies = [ - "backtrace", - "once_cell", - "regex", - "sentry-core", -] - -[[package]] -name = "sentry-contexts" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ddd2a91a13805bd8dab4ebf47323426f758c35f7bf24eacc1aded9668f3824" -dependencies = [ - "hostname", - "libc", - "os_info", - "rustc_version", - "sentry-core", - "uname", ] [[package]] @@ -2732,34 +2550,12 @@ dependencies = [ "serde_json", ] -[[package]] -name = "sentry-debug-images" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4d0a615e5eeca5699030620c119a094e04c14cf6b486ea1030460a544111a7" -dependencies = [ - "findshlibs", - "once_cell", - "sentry-core", -] - -[[package]] -name = "sentry-panic" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1c18d0b5fba195a4950f2f4c31023725c76f00aabb5840b7950479ece21b5ca" -dependencies = [ - "sentry-backtrace", - "sentry-core", -] - [[package]] name = "sentry-tracing" version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3012699a9957d7f97047fd75d116e22d120668327db6e7c59824582e16e791b2" dependencies = [ - "sentry-backtrace", "sentry-core", "tracing-core", "tracing-subscriber", @@ -3101,18 +2897,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "tendril" version = "0.4.3" @@ -3282,16 +3066,6 @@ dependencies = [ "syn 2.0.55", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.24.1" @@ -3541,15 +3315,6 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6" -[[package]] -name = "uname" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" -dependencies = [ - "libc", -] - [[package]] name = "uncased" version = "0.9.10" @@ -3592,19 +3357,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "ureq" -version = "2.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" -dependencies = [ - "base64 0.21.7", - "log", - "native-tls", - "once_cell", - "url", -] - [[package]] name = "url" version = "2.5.0" diff --git a/Cargo.toml b/Cargo.toml index 350d8704..d7ac1d37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -173,6 +173,11 @@ features = ["rt-tokio"] [dependencies.sentry] version = "0.32.2" optional = true +default-features = false +default = ["backtrace", "contexts", "debug-images", "panic", "transport", "rustls", "tower", "tower-http", "tracing", "reqwest", "log"] +[dependencies.sentry-tracing] +version = "0.32.2" +optional = true # optional jemalloc usage [dependencies.tikv-jemallocator] @@ -287,7 +292,7 @@ hyperlocal = { git = "https://github.com/softprops/hyperlocal", rev = "2ee4d1496 [features] -default = ["conduit_bin", "backend_rocksdb", "systemd", "element_hacks", "sentry"] +default = ["conduit_bin", "backend_rocksdb", "systemd", "element_hacks", "sentry_telemetry"] conduit_bin = ["axum"] backend_sqlite = ["sqlite"] backend_rocksdb = ["rocksdb"] @@ -295,6 +300,7 @@ rocksdb = ["rust-rocksdb", "num_cpus"] jemalloc = ["tikv-jemalloc-ctl", "tikv-jemallocator"] sqlite = ["rusqlite", "parking_lot", "thread_local", "num_cpus"] systemd = ["sd-notify"] +sentry_telemetry = ["sentry", "sentry-tracing"] #gzip_compression = ["tower-http/compression-gzip"] zstd_compression = ["tower-http/compression-zstd"] diff --git a/src/main.rs b/src/main.rs index d42b0892..9748137c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,6 +35,8 @@ use ruma::api::{ }, IncomingRequest, }; +#[cfg(feature = "sentry_telemetry")] +use sentry_tracing::EventFilter; #[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] use tikv_jemallocator::Jemalloc; use tokio::{ @@ -84,6 +86,22 @@ fn main() { return; }; + #[cfg(feature = "sentry_telemetry")] + if config.sentry { + let _guard = sentry::init(( + "https://fe2eb4536aa04949e28eff3128d64757@o4506996327251968.ingest.us.sentry.io/4506996334657536", + sentry::ClientOptions { + release: sentry::release_name!(), + server_name: if config.sentry_send_server_name { + Some(config.server_name.to_string().into()) + } else { + None + }, + ..Default::default() + }, + )); + } + if config.allow_jaeger { #[cfg(feature = "perf_measurements")] { @@ -131,26 +149,36 @@ fn main() { }, }; - let subscriber = registry.with(filter_layer).with(fmt_layer); + #[cfg(feature = "sentry_telemetry")] + let sentry_layer = sentry_tracing::layer().event_filter(|md| match md.level() { + &Level::ERROR => EventFilter::Event, + _ => EventFilter::Ignore, + }); + + let subscriber; + + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental + #[cfg(feature = "sentry_telemetry")] + { + subscriber = registry + .with(filter_layer) + .with(fmt_layer) + .with(sentry_layer); + }; + + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental + #[cfg(not(feature = "sentry_telemetry"))] + { + subscriber = registry.with(filter_layer).with(fmt_layer); + }; + tracing::subscriber::set_global_default(subscriber).unwrap(); } - #[cfg(feature = "sentry")] + #[cfg(feature = "sentry_telemetry")] if config.sentry { - info!("Sentry.io crash reporting and telemetry is enabled, initialising guard"); - - let _guard = sentry::init(( - "https://fe2eb4536aa04949e28eff3128d64757@o4506996327251968.ingest.us.sentry.io/4506996334657536", - sentry::ClientOptions { - release: sentry::release_name!(), - server_name: if config.sentry_send_server_name { - Some(config.server_name.to_string().into()) - } else { - None - }, - ..Default::default() - }, - )); + // just notifying the user + info!("Sentry.io crash reporting and telemetry is enabled"); } if let Err(e) = check_config(&config) { @@ -169,7 +197,10 @@ fn main() { maximize_fd_limit().expect("Unable to increase maximum soft and hard file descriptor limit"); tokio::runtime::Builder::new_multi_thread() - .enable_all() + .enable_io() + .enable_time() + .thread_name("conduwuit:worker") + .worker_threads(num_cpus::get_physical()) .build() .unwrap() .block_on(async {