From 370e5fcb589d660cbf4464f9bfd5b1b7605567ac Mon Sep 17 00:00:00 2001 From: Tree Xie Date: Sat, 12 Oct 2024 10:01:07 +0800 Subject: [PATCH] Sentry (#44) * refactor: set sentry as optional * refactor: set sentry as optional --- .github/workflows/test.yml | 2 ++ Cargo.lock | 37 ++++++++++++++++++++----------------- Cargo.toml | 6 ++++-- Makefile | 4 ++++ src/main.rs | 14 +++++++------- src/plugin/mod.rs | 2 +- src/sentry/mod.rs | 25 +++++++++++++++++++++++++ 7 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 src/sentry/mod.rs diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 04233dc..7725562 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,6 +55,8 @@ jobs: run: | make release ldd target/release/pingap + make release-sentry + ldd target/release/pingap docker: runs-on: ubuntu-latest timeout-minutes: 3600 diff --git a/Cargo.lock b/Cargo.lock index 02d030e..08f4b88 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1190,6 +1190,9 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] [[package]] name = "hashbrown" @@ -2538,7 +2541,7 @@ dependencies = [ [[package]] name = "pingora" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "pingora-cache", "pingora-core", @@ -2551,7 +2554,7 @@ dependencies = [ [[package]] name = "pingora-cache" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "ahash 0.8.11", "async-trait", @@ -2585,7 +2588,7 @@ dependencies = [ [[package]] name = "pingora-core" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "ahash 0.8.11", "async-trait", @@ -2612,7 +2615,7 @@ dependencies = [ "pingora-http", "pingora-openssl", "pingora-pool", - "pingora-runtime 0.3.0 (git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999)", + "pingora-runtime 0.3.0 (git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441)", "pingora-timeout", "prometheus", "rand", @@ -2635,12 +2638,12 @@ dependencies = [ [[package]] name = "pingora-error" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" [[package]] name = "pingora-header-serde" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "bytes", "http 1.1.0", @@ -2655,7 +2658,7 @@ dependencies = [ [[package]] name = "pingora-http" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "bytes", "http 1.1.0", @@ -2665,7 +2668,7 @@ dependencies = [ [[package]] name = "pingora-ketama" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "crc32fast", ] @@ -2682,7 +2685,7 @@ dependencies = [ [[package]] name = "pingora-load-balancing" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "arc-swap", "async-trait", @@ -2695,7 +2698,7 @@ dependencies = [ "pingora-error", "pingora-http", "pingora-ketama", - "pingora-runtime 0.3.0 (git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999)", + "pingora-runtime 0.3.0 (git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441)", "rand", "tokio", ] @@ -2703,10 +2706,10 @@ dependencies = [ [[package]] name = "pingora-lru" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "arrayvec", - "hashbrown 0.14.5", + "hashbrown 0.12.3", "parking_lot", "rand", ] @@ -2714,7 +2717,7 @@ dependencies = [ [[package]] name = "pingora-openssl" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "foreign-types", "libc", @@ -2727,7 +2730,7 @@ dependencies = [ [[package]] name = "pingora-pool" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "crossbeam-queue", "log", @@ -2741,7 +2744,7 @@ dependencies = [ [[package]] name = "pingora-proxy" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "async-trait", "bytes", @@ -2775,7 +2778,7 @@ dependencies = [ [[package]] name = "pingora-runtime" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "once_cell", "rand", @@ -2786,7 +2789,7 @@ dependencies = [ [[package]] name = "pingora-timeout" version = "0.3.0" -source = "git+https://github.com/cloudflare/pingora?rev=0df7b0de1652e5a2639a6e0fd330516bf28d5999#0df7b0de1652e5a2639a6e0fd330516bf28d5999" +source = "git+https://github.com/cloudflare/pingora?rev=9921fe422274ced5ef14eb582d63529859fed441#9921fe422274ced5ef14eb582d63529859fed441" dependencies = [ "once_cell", "parking_lot", diff --git a/Cargo.toml b/Cargo.toml index 9c5bef5..b32a5e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,7 +74,7 @@ opentelemetry_sdk = { version = "0.24.1", features = [ "rt-tokio", ], default-features = false } path-absolutize = "3.1.1" -pingora = { git = "https://github.com/cloudflare/pingora", rev = "0df7b0de1652e5a2639a6e0fd330516bf28d5999", default-features = false, features = [ +pingora = { git = "https://github.com/cloudflare/pingora", rev = "9921fe422274ced5ef14eb582d63529859fed441", default-features = false, features = [ # pingora = { version = "0.3.0", default-features = false, features = [ "lb", "openssl", @@ -97,7 +97,7 @@ rust-embed = { version = "8.5.0", features = [ ], default-features = false } rustc_version_runtime = "0.3.0" scopeguard = "1.2.0" -sentry = { version = "0.26", default-features = false } +sentry = { version = "0.26", default-features = false, optional = true } serde = "1.0.210" serde_json = "1.0.128" sha2 = { version = "0.10.8", default-features = false } @@ -122,6 +122,7 @@ url = "2.5.2" urlencoding = "2.1.3" uuid = { version = "1.10.0", features = [ "v7", + "std", "fast-rng", ], default-features = false } x509-parser = "0.16.0" @@ -129,6 +130,7 @@ x509-parser = "0.16.0" [features] pyro = ["pyroscope", "pyroscope_pprofrs"] perf = ["pyro", "dhat"] +tracking = ["sentry", "pingora/sentry"] [dev-dependencies] diff --git a/Makefile b/Makefile index a505290..1b93075 100644 --- a/Makefile +++ b/Makefile @@ -49,6 +49,10 @@ release: cargo build --release ls -lh target/release +release-sentry: + cargo build --release --features=tracking + ls -lh target/release + perf: cargo build --profile=release-perf --features=perf ls -lh target/release-perf diff --git a/src/main.rs b/src/main.rs index 67b984e..66621ca 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,6 @@ use state::{get_admin_addr, get_start_time, set_admin_addr}; use std::collections::HashMap; use std::error::Error; use std::path::Path; -use std::str::FromStr; use std::sync::Arc; use std::time::Duration; use tracing::{error, info}; @@ -44,6 +43,8 @@ mod plugin; mod proxy; #[cfg(feature = "pyro")] mod pyro; +#[cfg(feature = "tracking")] +mod sentry; mod service; mod state; mod util; @@ -380,13 +381,12 @@ fn run() -> Result<(), Box> { }; let mut my_server = server::Server::new(Some(opt))?; my_server.configuration = Arc::new(new_server_conf(&args, &conf)); + #[cfg(feature = "tracking")] if let Some(dsn) = &basic_conf.sentry { - match sentry::types::Dsn::from_str(dsn) { - Ok(dsn) => { - my_server.sentry = Some(sentry::ClientOptions { - dsn: Some(dsn), - ..Default::default() - }); + match sentry::new_sentry_options(dsn) { + Ok(_opts) => { + // TODO enable pingora sentry + // my_server.sentry = Some(opts); }, Err(e) => { error!(error = e.to_string(), "sentry init fail"); diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs index 356e950..bc2c654 100644 --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -50,7 +50,7 @@ mod response_headers; mod stats; pub static ADMIN_SERVER_PLUGIN: Lazy = - Lazy::new(|| uuid::Uuid::new_v4().to_string()); + Lazy::new(|| uuid::Uuid::now_v7().to_string()); pub fn parse_admin_plugin(addr: &str) -> (ServerConf, String, PluginConf) { let arr: Vec<&str> = addr.split('@').collect(); diff --git a/src/sentry/mod.rs b/src/sentry/mod.rs new file mode 100644 index 0000000..2cda8ad --- /dev/null +++ b/src/sentry/mod.rs @@ -0,0 +1,25 @@ +// Copyright 2024 Tree xie. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use sentry::types::{Dsn, ParseDsnError}; +use sentry::ClientOptions; +use std::str::FromStr; + +pub fn new_sentry_options(dsn: &str) -> Result { + let dsn = Dsn::from_str(dsn)?; + Ok(ClientOptions { + dsn: Some(dsn), + ..Default::default() + }) +}