diff --git a/Cargo.lock b/Cargo.lock index fd65ffba9..8a523c7f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,6 +156,15 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + [[package]] name = "blake2b_simd" version = "0.5.10" @@ -606,6 +615,16 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "debugid" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91cf5a8c2f2097e2a32627123508635d47ce10563d999ec1a95addf08b502ba" +dependencies = [ + "serde", + "uuid", +] + [[package]] name = "derive_more" version = "0.99.7" @@ -709,6 +728,7 @@ dependencies = [ "schemamama", "schemamama_postgres", "semver", + "sentry", "serde", "serde_json", "slug", @@ -1197,6 +1217,17 @@ dependencies = [ "winapi 0.3.8", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi 0.3.8", +] + [[package]] name = "html5ever" version = "0.25.1" @@ -1238,6 +1269,12 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +[[package]] +name = "httpdate" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" + [[package]] name = "humansize" version = "1.1.0" @@ -1349,6 +1386,20 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "im" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111c1983f3c5bb72732df25cddacee9b546d08325fb584b5ebd38148be7b0246" +dependencies = [ + "bitmaps", + "rand_core 0.5.1", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check 0.9.1", +] + [[package]] name = "indexmap" version = "1.6.0" @@ -1394,6 +1445,12 @@ dependencies = [ "libc", ] +[[package]] +name = "ipnet" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135" + [[package]] name = "iron" version = "0.6.1" @@ -1630,6 +1687,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 = "matches" version = "0.1.8" @@ -2602,6 +2665,15 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rand_xoshiro" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rayon" version = "1.3.0" @@ -2690,9 +2762,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b82c9238b305f26f53443e3a4bc8528d64b8d0bee408ec949eb7bf5635ec680" +checksum = "e9eaa17ac5d7b838b7503d118fa16ad88f440498bf9ffe5424e621f93190d61e" dependencies = [ "base64 0.12.1", "bytes", @@ -2703,6 +2775,7 @@ dependencies = [ "http-body", "hyper 0.13.6", "hyper-tls", + "ipnet", "js-sys", "lazy_static", "log 0.4.8", @@ -3065,6 +3138,111 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "sentry" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144e85b28d129f056ef91664fe2b985eade906d2838752c2f61c9f233cd98e4a" +dependencies = [ + "httpdate", + "reqwest", + "sentry-backtrace", + "sentry-contexts", + "sentry-core", + "sentry-failure", + "sentry-log", + "sentry-panic", +] + +[[package]] +name = "sentry-backtrace" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92dabd890482f152fb6d261fe2034a193facc2c99c0c571bbf7687c356fcb2e8" +dependencies = [ + "backtrace", + "lazy_static", + "regex", + "sentry-core", +] + +[[package]] +name = "sentry-contexts" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039ac50d2d740d51c5d376c2e9e93725eea662fa3acdcbcfe1b8b93a3b30c478" +dependencies = [ + "hostname", + "lazy_static", + "libc", + "regex", + "rustc_version", + "sentry-core", + "uname", +] + +[[package]] +name = "sentry-core" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe4fe890b12416701f838c702898a9c5e574c333cfbbee9fb7855a14e6490a3" +dependencies = [ + "im", + "lazy_static", + "rand 0.7.3", + "sentry-types", + "serde", + "serde_json", +] + +[[package]] +name = "sentry-failure" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ead35e7019f77a79ed0345b3f3c28427139100f87f318c1c3e2788db2cdea8b7" +dependencies = [ + "failure", + "sentry-backtrace", + "sentry-core", +] + +[[package]] +name = "sentry-log" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ecacbaff50702c1028124ac834a25040bf13b6fbd720156fb817eafaea2c0e9" +dependencies = [ + "env_logger", + "log 0.4.8", + "sentry-backtrace", + "sentry-core", +] + +[[package]] +name = "sentry-panic" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8a3ac989339a76efd6155f9d02675ce4b04419cd8083ca58d083c222554147" +dependencies = [ + "sentry-backtrace", + "sentry-core", +] + +[[package]] +name = "sentry-types" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8124f0e9bc1113ecbcc8c3746e0e590943cf23e7d09c70a088c116869bb12e3" +dependencies = [ + "chrono", + "debugid", + "serde", + "serde_json", + "thiserror", + "url 2.1.1", + "uuid", +] + [[package]] name = "serde" version = "1.0.110" @@ -3187,6 +3365,16 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" +[[package]] +name = "sized-chunks" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec31ceca5644fa6d444cc77548b88b67f46db6f7c71683b0f9336e671830d2f" +dependencies = [ + "bitmaps", + "typenum", +] + [[package]] name = "slab" version = "0.4.2" @@ -3767,6 +3955,15 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "uname" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" +dependencies = [ + "libc", +] + [[package]] name = "unchecked-index" version = "0.2.2" @@ -3927,6 +4124,16 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" +[[package]] +name = "uuid" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" +dependencies = [ + "rand 0.7.3", + "serde", +] + [[package]] name = "vcpkg" version = "0.2.8" diff --git a/Cargo.toml b/Cargo.toml index c867f190d..9156ebcea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ exclude = [ ] [dependencies] +sentry = { version = "0.20", features = ["env_logger", "log"] } log = "0.4" regex = "1" structopt = "0.3" diff --git a/src/bin/cratesfyi.rs b/src/bin/cratesfyi.rs index 3f9c55de7..1ef001c5e 100644 --- a/src/bin/cratesfyi.rs +++ b/src/bin/cratesfyi.rs @@ -11,14 +11,28 @@ use docs_rs::{ }; use failure::{err_msg, Error, ResultExt}; use once_cell::sync::OnceCell; +use sentry::integrations::failure::capture_error; +use sentry::integrations::log::LogIntegration; use structopt::StructOpt; use strum::VariantNames; pub fn main() { let _ = dotenv::dotenv(); - logger_init(); + //rustwide::logging::init_with(logger_init()); + let sentry_log = LogIntegration::default().with_env_logger_dest(Some(logger_init())); + let _guard = sentry::init(( + "TODO: fill this in with the secret from https://sentry.io/organizations/rust-lang/", + sentry::ClientOptions { + release: Some(docs_rs::BUILD_VERSION.into()), + ..Default::default() + } + .add_integration(sentry_log), + )); + log::info!("this is a log from the main thread"); + log::error!("this is an error from the main thread"); if let Err(err) = CommandLine::from_args().handle_args() { + capture_error(&err); let mut msg = format!("Error: {}", err); for cause in err.iter_causes() { write!(msg, "\n\nCaused by:\n {}", cause).unwrap(); @@ -31,11 +45,12 @@ pub fn main() { } } -fn logger_init() { +// NOTE: this function should be idempotent +fn logger_init() -> env_logger::Logger { use std::io::Write; let env = env_logger::Env::default().filter_or("DOCSRS_LOG", "docs_rs=info"); - let logger = env_logger::from_env(env) + env_logger::from_env(env) .format(|buf, record| { writeln!( buf, @@ -46,9 +61,7 @@ fn logger_init() { record.args() ) }) - .build(); - - rustwide::logging::init_with(logger); + .build() } #[derive(Debug, Clone, Copy, PartialEq, Eq, strum::EnumString, strum::EnumVariantNames)]