diff --git a/lez/sequencer/core/src/config.rs b/lez/sequencer/core/src/config.rs index 42cd4945..35f790dc 100644 --- a/lez/sequencer/core/src/config.rs +++ b/lez/sequencer/core/src/config.rs @@ -66,7 +66,7 @@ pub struct SequencerConfig { pub cross_zone: Option, /// Address the Prometheus metrics exporter binds to. #[serde(default = "default_metrics_address")] - pub metrics_address: SocketAddr, + pub metrics_address: Option, } #[derive(Clone, Serialize, Deserialize)] @@ -97,6 +97,7 @@ const fn default_max_block_size() -> ByteSize { ByteSize::mib(1) } -const fn default_metrics_address() -> SocketAddr { - SequencerConfig::DEFAULT_METRICS_ADDRESS +#[expect(clippy::unnecessary_wraps, reason = "Required by serde")] +const fn default_metrics_address() -> Option { + Some(SequencerConfig::DEFAULT_METRICS_ADDRESS) } diff --git a/lez/sequencer/core/src/tests.rs b/lez/sequencer/core/src/tests.rs index 10b398e0..00f78c4d 100644 --- a/lez/sequencer/core/src/tests.rs +++ b/lez/sequencer/core/src/tests.rs @@ -90,7 +90,7 @@ fn setup_sequencer_config() -> SequencerConfig { retry_pending_blocks_timeout: Duration::from_mins(4), genesis: vec![], cross_zone: None, - metrics_address: SequencerConfig::DEFAULT_METRICS_ADDRESS, + metrics_address: None, } } diff --git a/lez/sequencer/service/src/main.rs b/lez/sequencer/service/src/main.rs index 09df20f9..b3d5bf71 100644 --- a/lez/sequencer/service/src/main.rs +++ b/lez/sequencer/service/src/main.rs @@ -39,27 +39,18 @@ struct Args { async fn main() -> Result<()> { env_logger::init(); - let Args { - config_path, - port, - listen_address, - home, - metrics_address, - } = Args::parse(); + let args = Args::parse(); let cancellation_token = listen_for_shutdown_signal(); - let mut config = sequencer_service::SequencerConfig::from_path(&config_path)?; - if let Some(home) = home { - config.home = home; - } - if let Some(metrics_address) = metrics_address { - config.metrics_address = metrics_address; - } + let mut config = sequencer_service::SequencerConfig::from_path(&args.config_path)?; + apply_config_overrides(&args, &mut config); - install_prometheus_recorder(config.metrics_address)?; + if let Some(metrics_address) = config.metrics_address { + install_prometheus_recorder(metrics_address)?; + } let mut sequencer_handle = - sequencer_service::run(config, SocketAddr::new(listen_address, port)).await?; + sequencer_service::run(config, SocketAddr::new(args.listen_address, args.port)).await?; tokio::select! { () = cancellation_token.cancelled() => { @@ -82,6 +73,23 @@ async fn main() -> Result<()> { Ok(()) } +fn apply_config_overrides(args: &Args, config: &mut sequencer_service::SequencerConfig) { + let Args { + home, + metrics_address, + config_path: _, + port: _, + listen_address: _, + } = args; + + if let Some(home) = home { + config.home.clone_from(home); + } + if let Some(metrics_address) = metrics_address { + config.metrics_address = Some(*metrics_address); + } +} + /// Installs the recorder on `metrics_address`. fn install_prometheus_recorder(metrics_address: SocketAddr) -> Result<()> { /// Ladder for `*_seconds` histograms, densest across the 1–100 ms band where diff --git a/test_fixtures/src/config.rs b/test_fixtures/src/config.rs index 4de7f511..9a8bf53f 100644 --- a/test_fixtures/src/config.rs +++ b/test_fixtures/src/config.rs @@ -110,7 +110,7 @@ pub fn sequencer_config( auth: None, }, cross_zone, - metrics_address: SequencerConfig::DEFAULT_METRICS_ADDRESS, + metrics_address: Some(SequencerConfig::DEFAULT_METRICS_ADDRESS), }) }