Skip to content

Commit

Permalink
refactor(katana): separate metrics address and port into 2 args (#2537)
Browse files Browse the repository at this point in the history
  • Loading branch information
kariy authored Oct 15, 2024
1 parent bc9c7e8 commit 9477620
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 17 deletions.
53 changes: 39 additions & 14 deletions bin/katana/src/cli/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,13 @@
//! for more info.
use std::collections::HashSet;
use std::net::{IpAddr, SocketAddr};
use std::net::IpAddr;
use std::path::PathBuf;

use alloy_primitives::U256;
use anyhow::{Context, Result};
use clap::{Args, Parser};
use console::Style;
use dojo_utils::parse::parse_socket_address;
use katana_core::backend::config::{Environment, StarknetConfig};
use katana_core::constants::{
DEFAULT_ETH_L1_GAS_PRICE, DEFAULT_INVOKE_MAX_STEPS, DEFAULT_SEQUENCER_ADDRESS,
Expand All @@ -27,7 +26,7 @@ use katana_core::constants::{
use katana_core::service::messaging::MessagingConfig;
use katana_node::config::db::DbConfig;
use katana_node::config::dev::DevConfig;
use katana_node::config::metrics::MetricsConfig;
use katana_node::config::metrics::{MetricsConfig, DEFAULT_METRICS_ADDR, DEFAULT_METRICS_PORT};
use katana_node::config::rpc::{
ApiKind, RpcConfig, DEFAULT_RPC_ADDR, DEFAULT_RPC_MAX_CONNECTIONS, DEFAULT_RPC_PORT,
};
Expand Down Expand Up @@ -83,12 +82,6 @@ pub struct NodeArgs {
#[arg(help = "Output logs in JSON format.")]
pub json_log: bool,

/// Enable Prometheus metrics.
///
/// The metrics will be served at the given interface and port.
#[arg(long, value_name = "SOCKET", value_parser = parse_socket_address, help_heading = "Metrics")]
pub metrics: Option<SocketAddr>,

#[arg(long)]
#[arg(requires = "rpc_url")]
#[arg(value_name = "BLOCK_NUMBER")]
Expand All @@ -105,20 +98,46 @@ pub struct NodeArgs {
pub messaging: Option<MessagingConfig>,

#[command(flatten)]
#[command(next_help_heading = "Server options")]
pub metrics: MetricsOptions,

#[command(flatten)]
pub server: ServerOptions,

#[command(flatten)]
#[command(next_help_heading = "Starknet options")]
pub starknet: StarknetOptions,

#[cfg(feature = "slot")]
#[command(flatten)]
#[command(next_help_heading = "Slot options")]
pub slot: SlotOptions,
}

#[derive(Debug, Args, Clone)]
#[command(next_help_heading = "Metrics options")]
pub struct MetricsOptions {
/// Whether to enable metrics.
///
/// For now, metrics will still be collected even if this flag is not set. This only
/// controls whether the metrics server is started or not.
#[arg(long)]
pub metrics: bool,

/// The metrics will be served at the given address.
#[arg(long = "metrics.addr")]
#[arg(value_name = "ADD")]
#[arg(requires = "metrics")]
#[arg(default_value_t = DEFAULT_METRICS_ADDR)]
pub metrics_addr: IpAddr,

/// The metrics will be served at the given port.
#[arg(long = "metrics.port")]
#[arg(value_name = "PORT")]
#[arg(requires = "metrics")]
#[arg(default_value_t = DEFAULT_METRICS_PORT)]
pub metrics_port: u16,
}

#[derive(Debug, Args, Clone)]
#[command(next_help_heading = "Server options")]
pub struct ServerOptions {
#[arg(short, long)]
#[arg(default_value_t = DEFAULT_RPC_PORT)]
Expand All @@ -142,6 +161,7 @@ pub struct ServerOptions {
}

#[derive(Debug, Args, Clone)]
#[command(next_help_heading = "Starknet options")]
pub struct StarknetOptions {
#[arg(long)]
#[arg(default_value = "0")]
Expand All @@ -163,7 +183,6 @@ pub struct StarknetOptions {
pub disable_validate: bool,

#[command(flatten)]
#[command(next_help_heading = "Environment options")]
pub environment: EnvironmentOptions,

#[arg(long)]
Expand All @@ -173,6 +192,7 @@ pub struct StarknetOptions {
}

#[derive(Debug, Args, Clone)]
#[command(next_help_heading = "Environment options")]
pub struct EnvironmentOptions {
#[arg(long)]
#[arg(help = "The chain ID.")]
Expand Down Expand Up @@ -208,6 +228,7 @@ pub struct EnvironmentOptions {

#[cfg(feature = "slot")]
#[derive(Debug, Args, Clone)]
#[command(next_help_heading = "Slot options")]
pub struct SlotOptions {
#[arg(hide = true)]
#[arg(long = "slot.controller")]
Expand Down Expand Up @@ -364,7 +385,11 @@ impl NodeArgs {
}

fn metrics_config(&self) -> Option<MetricsConfig> {
self.metrics.map(|addr| MetricsConfig { addr })
if self.metrics.metrics {
Some(MetricsConfig { addr: self.metrics.metrics_addr, port: self.metrics.metrics_port })
} else {
None
}
}
}

Expand Down
18 changes: 16 additions & 2 deletions crates/katana/node/src/config/metrics.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,22 @@
use std::net::SocketAddr;
use std::net::{IpAddr, Ipv4Addr, SocketAddr};

/// Metrics server default address.
pub const DEFAULT_METRICS_ADDR: IpAddr = IpAddr::V4(Ipv4Addr::LOCALHOST);
/// Metrics server default port.
pub const DEFAULT_METRICS_PORT: u16 = 9100;

/// Node metrics configurations.
#[derive(Debug, Clone)]
pub struct MetricsConfig {
/// The address to bind the metrics server to.
pub addr: SocketAddr,
pub addr: IpAddr,
/// The port to bind the metrics server to.
pub port: u16,
}

impl MetricsConfig {
/// Returns the [`SocketAddr`] for the metrics server.
pub fn socket_addr(&self) -> SocketAddr {
SocketAddr::new(self.addr, self.port)
}
}
2 changes: 1 addition & 1 deletion crates/katana/node/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl Node {
/// This method will start all the node process, running them until the node is stopped.
pub async fn launch(self) -> Result<LaunchedNode> {
if let Some(ref cfg) = self.metrics_config {
let addr = cfg.addr;
let addr = cfg.socket_addr();
let mut reports = Vec::new();

if let Some(ref db) = self.db {
Expand Down

0 comments on commit 9477620

Please sign in to comment.