From ee4112525e9de8d9442b3fcd76543f5ccd1b76e4 Mon Sep 17 00:00:00 2001 From: Mengran Lan Date: Fri, 23 Aug 2024 00:10:17 +0800 Subject: [PATCH] prover get sentry endpoint from coordinator --- prover/src/config.rs | 7 --- prover/src/coordinator_client.rs | 9 +++- prover/src/coordinator_client/errors.rs | 2 +- prover/src/main.rs | 55 ++++++++++++----------- prover/src/prover.rs | 2 +- prover/src/types.rs | 2 +- prover/src/utils.rs | 56 ++++++++++++------------ prover/src/version.rs | 2 +- prover/src/zk_circuits_handler/curie.rs | 2 +- prover/src/zk_circuits_handler/darwin.rs | 2 +- 10 files changed, 70 insertions(+), 69 deletions(-) diff --git a/prover/src/config.rs b/prover/src/config.rs index bf3150a9c..f47be301e 100644 --- a/prover/src/config.rs +++ b/prover/src/config.rs @@ -25,12 +25,6 @@ pub struct L2GethConfig { pub endpoint: String, } -#[derive(Debug, Serialize, Deserialize)] -pub struct SentryConfig { - pub dsn: String, - pub enabled: bool, -} - #[derive(Debug, Deserialize)] pub struct Config { pub prover_name: String, @@ -42,7 +36,6 @@ pub struct Config { pub high_version_circuit: CircuitConfig, pub coordinator: CoordinatorConfig, pub l2geth: Option, - pub sentry: Option, } impl Config { diff --git a/prover/src/coordinator_client.rs b/prover/src/coordinator_client.rs index 6aad516a9..366daf316 100644 --- a/prover/src/coordinator_client.rs +++ b/prover/src/coordinator_client.rs @@ -4,7 +4,7 @@ pub mod listener; pub mod types; use anyhow::{bail, Context, Ok, Result}; -use std::rc::Rc; +use std::{cell::OnceCell, rc::Rc}; use api::Api; use errors::*; @@ -19,6 +19,7 @@ pub use errors::{GetEmptyTaskError, ProofStatusNotOKError}; pub struct CoordinatorClient<'a> { api: Api, token: Option, + sentry_endpoint: OnceCell>, config: &'a Config, key_signer: Rc, rt: Runtime, @@ -46,6 +47,7 @@ impl<'a> CoordinatorClient<'a> { let mut client = Self { api, token: None, + sentry_endpoint: OnceCell::new(), config, key_signer, rt, @@ -90,6 +92,7 @@ impl<'a> CoordinatorClient<'a> { } if let Some(r) = login_response.data { token = r.token; + let _ = self.sentry_endpoint.set(r.sentry_endpoint); } else { bail!("login failed: got empty token") } @@ -139,4 +142,8 @@ impl<'a> CoordinatorClient<'a> { ) -> Result> { self.action_with_re_login(req, |s, req| s.do_submit_proof(req)) } + + pub fn get_sentry_dsn(&self) -> Option { + self.sentry_endpoint.get().and_then(|v| v.clone()) + } } diff --git a/prover/src/coordinator_client/errors.rs b/prover/src/coordinator_client/errors.rs index 587dbbf18..55f0e37f0 100644 --- a/prover/src/coordinator_client/errors.rs +++ b/prover/src/coordinator_client/errors.rs @@ -82,7 +82,7 @@ mod tests { #[ctor::ctor] fn init() { - crate::utils::log_init(None, false); + crate::utils::log_init(None); log::info!("logger initialized"); } diff --git a/prover/src/main.rs b/prover/src/main.rs index 19981faef..918c41d93 100644 --- a/prover/src/main.rs +++ b/prover/src/main.rs @@ -48,32 +48,7 @@ fn start() -> Result<()> { let config: Config = Config::from_file(args.config_file)?; - let _guard = config.sentry.as_ref().and_then(|conf| { - if conf.enabled { - Some(sentry::init(( - conf.dsn.clone(), - sentry::ClientOptions { - release: Some(version::get_version_cow()), - environment: Some(utils::get_environment()), - ..Default::default() - }, - ))) - } else { - None - } - }); - - _guard.iter().for_each(|_| { - sentry::configure_scope(|scope| { - scope.set_tag("prover_type", config.prover_type); - scope.set_tag("partner_name", config.partner_name()); - scope.set_tag("prover_name", config.prover_name.clone()); - }); - - sentry::capture_message("test message on start", sentry::Level::Info); - }); - - utils::log_init(args.log_file, _guard.is_some()); + utils::log_init(args.log_file.clone()); if let Err(e) = AssetsDirEnvConfig::init() { log::error!("AssetsDirEnvConfig init failed: {:#}", e); @@ -88,6 +63,34 @@ fn start() -> Result<()> { let prover = Prover::new(&config, coordinator_listener)?; + let _guard = prover + .coordinator_client + .borrow() + .get_sentry_dsn() + .map(|dsn| { + log::info!("successfully get dsn from coordinator"); + let gurad = Some(sentry::init(( + dsn, + sentry::ClientOptions { + release: Some(version::get_version_cow()), + environment: Some(utils::get_environment()), + ..Default::default() + }, + ))); + utils::set_logger_with_sentry(args.log_file); + gurad + }); + + _guard.iter().for_each(|_| { + sentry::configure_scope(|scope| { + scope.set_tag("prover_type", config.prover_type); + scope.set_tag("partner_name", config.partner_name()); + scope.set_tag("prover_name", config.prover_name.clone()); + }); + + sentry::capture_message("test message on start", sentry::Level::Info); + }); + _guard.iter().for_each(|_| { sentry::configure_scope(|scope| { let public_key = sentry::protocol::Value::from(prover.get_public_key()); diff --git a/prover/src/prover.rs b/prover/src/prover.rs index 7de83906e..963d9bd47 100644 --- a/prover/src/prover.rs +++ b/prover/src/prover.rs @@ -19,7 +19,7 @@ pub struct Prover<'a> { config: &'a Config, key_signer: Rc, circuits_handler_provider: RefCell>, - coordinator_client: RefCell>, + pub coordinator_client: RefCell>, geth_client: Option>>, } diff --git a/prover/src/types.rs b/prover/src/types.rs index 771e308a2..ea4677c72 100644 --- a/prover/src/types.rs +++ b/prover/src/types.rs @@ -262,7 +262,7 @@ mod tests { #[ctor::ctor] fn init() { - crate::utils::log_init(None, false); + crate::utils::log_init(None); log::info!("logger initialized"); } diff --git a/prover/src/utils.rs b/prover/src/utils.rs index c7f97d715..b6db76fa9 100644 --- a/prover/src/utils.rs +++ b/prover/src/utils.rs @@ -1,38 +1,36 @@ use env_logger::Env; -use std::{borrow::Cow, fs::OpenOptions, sync::Once}; +use std::{borrow::Cow, fs::OpenOptions}; use crate::types::{ProverType, TaskType}; -static LOG_INIT: Once = Once::new(); +pub fn build_logger(log_file: Option) -> env_logger::Logger { + let mut builder = env_logger::Builder::from_env(Env::default().default_filter_or("info")); + if let Some(file_path) = log_file { + let target = Box::new( + OpenOptions::new() + .write(true) + .create(true) + .truncate(false) + .open(file_path) + .expect("Can't create log file"), + ); + builder.target(env_logger::Target::Pipe(target)); + } + builder.build() +} -/// Initialize log -pub fn log_init(log_file: Option, sentry_enabled: bool) { - LOG_INIT.call_once(|| { - let mut builder = env_logger::Builder::from_env(Env::default().default_filter_or("info")); - if let Some(file_path) = log_file { - let target = Box::new( - OpenOptions::new() - .write(true) - .create(true) - .truncate(false) - .open(file_path) - .expect("Can't create log file"), - ); - builder.target(env_logger::Target::Pipe(target)); - } - let logger = builder.build(); - let max_level = logger.filter(); +pub fn log_init(log_file: Option) { + let logger = build_logger(log_file); + let max_level = logger.filter(); + let boxed_logger = Box::new(logger); + alterable_logger::configure(max_level, boxed_logger); +} - let boxed_logger: Box = if sentry_enabled { - Box::new(sentry_log::SentryLogger::with_dest(logger)) - } else { - Box::new(logger) - }; - - log::set_boxed_logger(boxed_logger) - .map(|()| log::set_max_level(max_level)) - .unwrap(); - }); +pub fn set_logger_with_sentry(log_file: Option) { + let logger = build_logger(log_file); + let max_level = logger.filter(); + let boxed_logger = Box::new(sentry_log::SentryLogger::with_dest(logger)); + alterable_logger::configure(max_level, boxed_logger); } pub fn get_task_types(prover_type: ProverType) -> Vec { diff --git a/prover/src/version.rs b/prover/src/version.rs index fbf72bffc..11de9d59c 100644 --- a/prover/src/version.rs +++ b/prover/src/version.rs @@ -21,7 +21,7 @@ mod tests { #[ctor::ctor] fn init() { - crate::utils::log_init(None, false); + crate::utils::log_init(None); log::info!("logger initialized"); } diff --git a/prover/src/zk_circuits_handler/curie.rs b/prover/src/zk_circuits_handler/curie.rs index 6d7a22683..c3b3a1966 100644 --- a/prover/src/zk_circuits_handler/curie.rs +++ b/prover/src/zk_circuits_handler/curie.rs @@ -226,7 +226,7 @@ mod tests { #[ctor::ctor] fn init() { - crate::utils::log_init(None, false); + crate::utils::log_init(None); log::info!("logger initialized"); } diff --git a/prover/src/zk_circuits_handler/darwin.rs b/prover/src/zk_circuits_handler/darwin.rs index b55b6de6d..bbbd0251f 100644 --- a/prover/src/zk_circuits_handler/darwin.rs +++ b/prover/src/zk_circuits_handler/darwin.rs @@ -247,7 +247,7 @@ mod tests { #[ctor::ctor] fn init() { - crate::utils::log_init(None, false); + crate::utils::log_init(None); log::info!("logger initialized"); }