From c914641ddd50433d3c4d3f8e596e80422f3fda35 Mon Sep 17 00:00:00 2001 From: Sebastian Rollen Date: Wed, 8 Dec 2021 10:47:56 -0500 Subject: [PATCH] feat: Add sentry integration --- Cargo.lock | 207 +++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 + src/main.rs | 20 ++-- src/settings.rs | 7 ++ tests/integration/setup.rs | 5 +- 5 files changed, 233 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 195180c..7189f08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aho-corasick" version = "0.7.18" @@ -85,6 +100,21 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "backtrace" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.13.0" @@ -224,6 +254,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "debugid" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91cf5a8c2f2097e2a32627123508635d47ce10563d999ec1a95addf08b502ba" +dependencies = [ + "serde 1.0.127", + "uuid", +] + [[package]] name = "derivative" version = "2.2.0" @@ -440,6 +480,12 @@ dependencies = [ "wasi 0.10.0+wasi-snapshot-preview1", ] +[[package]] +name = "gimli" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" + [[package]] name = "h2" version = "0.3.3" @@ -509,6 +555,17 @@ dependencies = [ "digest", ] +[[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 = "http" version = "0.2.4" @@ -729,6 +786,12 @@ dependencies = [ "cfg-if", ] +[[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.0.1" @@ -777,6 +840,16 @@ dependencies = [ "unicase", ] +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + [[package]] name = "mio" version = "0.7.13" @@ -940,6 +1013,15 @@ dependencies = [ "syn", ] +[[package]] +name = "object" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.8.0" @@ -1017,6 +1099,8 @@ dependencies = [ "reqwest", "risk-manager", "rust_decimal", + "sentry", + "sentry-tracing", "serde 1.0.127", "serde_json", "serde_plain", @@ -1561,6 +1645,21 @@ dependencies = [ "tokio-postgres", ] +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "rustls" version = "0.19.1" @@ -1662,6 +1761,104 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" + +[[package]] +name = "sentry" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "546b9b6f76c26c60ffbcf0b7136e15169fe13d43949b4aadb7c1edc1c3f3a26f" +dependencies = [ + "httpdate", + "reqwest", + "sentry-backtrace", + "sentry-contexts", + "sentry-core", + "sentry-panic", + "tokio", +] + +[[package]] +name = "sentry-backtrace" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd0cba2aff36ac98708f7a6e7abbdde82dbaf180d5870c41084dc1b473648b9" +dependencies = [ + "backtrace", + "lazy_static", + "regex", + "sentry-core", +] + +[[package]] +name = "sentry-contexts" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bacf1c62427c6c97b896640d0c4dd204bbd3b79dd192d7cb40891aa5ee11d58" +dependencies = [ + "hostname", + "lazy_static", + "libc", + "regex", + "rustc_version", + "sentry-core", + "uname", +] + +[[package]] +name = "sentry-core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a957270c9a430218f8031c866493061a27e35a70250e9527f093563a33ce6b" +dependencies = [ + "chrono", + "lazy_static", + "rand 0.8.4", + "sentry-types", + "serde 1.0.127", + "serde_json", +] + +[[package]] +name = "sentry-panic" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692bf989f0c99f025e33d7f58e62822c3771f56d189698c66dcc863122255d95" +dependencies = [ + "sentry-backtrace", + "sentry-core", +] + +[[package]] +name = "sentry-tracing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d291df287241b0ef97f5bf9e9a595691ef8dfb49bc6acfd55b9dc2ade681f1c9" +dependencies = [ + "sentry-core", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sentry-types" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4dd2266fee014a86e250e98e389191ecd23be546b5c42b6a2fb9af2972fadac" +dependencies = [ + "chrono", + "debugid", + "serde 1.0.127", + "serde_json", + "thiserror", + "url", + "uuid", +] + [[package]] name = "serde" version = "0.8.23" @@ -2216,6 +2413,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +[[package]] +name = "uname" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" +dependencies = [ + "libc", +] + [[package]] name = "unicase" version = "2.6.0" @@ -2262,6 +2468,7 @@ dependencies = [ "idna", "matches", "percent-encoding", + "serde 1.0.127", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 0c0bfb0..5b4321f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,8 @@ refinery = { version = "0.6", features = ["tokio-postgres"] } reqwest = "0.11.4" risk-manager = {git = "ssh://git@github.com/Overmuse/risk-manager.git", tag = "v0.4.1" } rust_decimal = { version = "1.17", features = ["tokio-pg"] } +sentry = "0.23.0" +sentry-tracing = "0.23.0" serde = "1.0" serde_json = "1.0" serde_plain = "0.3" diff --git a/src/main.rs b/src/main.rs index c46d783..397ca9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,23 @@ use anyhow::Result; use order_manager::run; use order_manager::Settings; -use tracing::subscriber::set_global_default; -use tracing_subscriber::EnvFilter; +use sentry::{ClientOptions, IntoDsn}; +use tracing_subscriber::prelude::*; #[tokio::main] async fn main() -> Result<()> { dotenv::dotenv().ok(); - let subscriber = tracing_subscriber::fmt() - .json() - .with_env_filter(EnvFilter::from_default_env()) - .finish(); - set_global_default(subscriber)?; let settings = Settings::new()?; + let _guard = sentry::init(ClientOptions { + dsn: settings.sentry.dsn.clone().into_dsn().unwrap(), + environment: Some(settings.sentry.environment.clone().into()), + release: sentry::release_name!(), + ..ClientOptions::default() + }); + + tracing_subscriber::registry() + .with(tracing_subscriber::fmt::layer().json()) + .with(sentry_tracing::layer()) + .init(); run(settings).await } diff --git a/src/settings.rs b/src/settings.rs index 51196c5..ec3163d 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -13,6 +13,12 @@ pub struct Database { pub name: String, } +#[derive(Debug, Deserialize)] +pub struct SentrySettings { + pub environment: String, + pub dsn: String, +} + #[derive(Debug, Deserialize)] pub struct DatastoreSettings { pub base_url: String, @@ -29,6 +35,7 @@ pub struct Settings { pub database: Database, pub kafka: KafkaSettings, pub datastore: DatastoreSettings, + pub sentry: SentrySettings, pub webserver: WebServerSettings, } diff --git a/tests/integration/setup.rs b/tests/integration/setup.rs index 19a15a5..d2589f2 100644 --- a/tests/integration/setup.rs +++ b/tests/integration/setup.rs @@ -91,7 +91,10 @@ pub async fn setup() -> ( std::env::set_var("KAFKA__SECURITY_PROTOCOL", "PLAINTEXT"); std::env::set_var("KAFKA__ACKS", "0"); std::env::set_var("KAFKA__RETRIES", "0"); - std::env::set_var("WEBSERVER__PORT", "0"); + std::env::set_var("KAFKA__RETRIES", "0"); + std::env::set_var("SENTRY__DSN", ""); + std::env::set_var("SENTRY__ENVIRONMENT", "test"); + std::env::set_var("WEBSERVER__PORT", "8127"); let settings = Settings::new(); tracing::debug!("{:?}", settings); let res = run(settings.unwrap()).await;