Skip to content

Commit ee625e3

Browse files
apollo_infra: extract MetricsConfig from MonitoringEndpointConfig
1 parent da2c34a commit ee625e3

File tree

5 files changed

+44
-28
lines changed

5 files changed

+44
-28
lines changed

crates/apollo_infra/src/metrics.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,28 @@ use apollo_metrics::metrics::{
44
MetricGauge,
55
MetricHistogram,
66
};
7+
use serde::{Deserialize, Serialize};
78

89
use crate::requests::LABEL_NAME_REQUEST_VARIANT;
910

11+
/// Configuration for metrics collection.
12+
/// This controls whether metrics are collected across the entire application.
13+
#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq)]
14+
pub struct MetricsConfig {
15+
/// Whether to collect metrics at all.
16+
pub collect_metrics: bool,
17+
/// Whether to collect profiling metrics (more detailed metrics that may have performance
18+
/// impact).
19+
pub collect_profiling_metrics: bool,
20+
}
21+
22+
impl MetricsConfig {
23+
/// Returns a config with all metrics collection enabled.
24+
pub const fn enabled() -> Self {
25+
Self { collect_metrics: true, collect_profiling_metrics: true }
26+
}
27+
}
28+
1029
/// Metrics of a local client.
1130
#[derive(Clone)]
1231
pub struct LocalClientMetrics {

crates/apollo_monitoring_endpoint/src/monitoring_endpoint.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::net::SocketAddr;
22

33
use apollo_infra::component_definitions::ComponentStarter;
4+
use apollo_infra::metrics::MetricsConfig;
45
use apollo_infra::tokio_metrics::setup_tokio_metrics;
56
use apollo_infra::trace_util::{configure_tracing, get_log_directives, set_log_level};
67
use apollo_infra_utils::type_name::short_type_name;
@@ -50,15 +51,16 @@ impl MonitoringEndpoint {
5051
pub fn new(
5152
config: MonitoringEndpointConfig,
5253
version: &'static str,
54+
metrics_config: MetricsConfig,
5355
mempool_client: Option<SharedMempoolClient>,
5456
l1_provider_client: Option<SharedL1ProviderClient>,
5557
) -> Self {
5658
// TODO(Tsabary): consider error handling
57-
let prometheus_handle = if config.collect_metrics {
59+
let prometheus_handle = if metrics_config.collect_metrics {
5860
// TODO(Lev): add tests that show the metrics are collected / not collected based on the
5961
// config value.
6062
COLLECT_SEQUENCER_PROFILING_METRICS
61-
.set(config.collect_profiling_metrics)
63+
.set(metrics_config.collect_profiling_metrics)
6264
.expect("Should be able to set profiling metrics collection.");
6365

6466
Some(
@@ -144,10 +146,17 @@ impl MonitoringEndpoint {
144146
pub fn create_monitoring_endpoint(
145147
config: MonitoringEndpointConfig,
146148
version: &'static str,
149+
metrics_config: MetricsConfig,
147150
mempool_client: Option<SharedMempoolClient>,
148151
l1_provider_client: Option<SharedL1ProviderClient>,
149152
) -> MonitoringEndpoint {
150-
let result = MonitoringEndpoint::new(config, version, mempool_client, l1_provider_client);
153+
let result = MonitoringEndpoint::new(
154+
config,
155+
version,
156+
metrics_config,
157+
mempool_client,
158+
l1_provider_client,
159+
);
151160
setup_tokio_metrics();
152161
result
153162
}

crates/apollo_monitoring_endpoint/src/monitoring_endpoint_test.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::collections::HashMap;
22
use std::net::IpAddr;
33
use std::sync::Arc;
44

5+
use apollo_infra::metrics::MetricsConfig;
56
use apollo_infra::tokio_metrics::{
67
TOKIO_GLOBAL_QUEUE_DEPTH,
78
TOKIO_MAX_BUSY_DURATION_MICROS,
@@ -59,13 +60,14 @@ const TEST_VERSION: &str = "1.2.3-dev";
5960
const CONFIG_WITHOUT_METRICS: MonitoringEndpointConfig = MonitoringEndpointConfig {
6061
ip: MONITORING_ENDPOINT_DEFAULT_IP,
6162
port: MONITORING_ENDPOINT_DEFAULT_PORT,
62-
collect_metrics: false,
63-
collect_profiling_metrics: false,
6463
};
6564

65+
const METRICS_CONFIG_DISABLED: MetricsConfig =
66+
MetricsConfig { collect_metrics: false, collect_profiling_metrics: false };
67+
6668
fn setup_monitoring_endpoint(config: Option<MonitoringEndpointConfig>) -> MonitoringEndpoint {
6769
let config = config.unwrap_or(CONFIG_WITHOUT_METRICS);
68-
create_monitoring_endpoint(config, TEST_VERSION, None, None)
70+
create_monitoring_endpoint(config, TEST_VERSION, METRICS_CONFIG_DISABLED, None, None)
6971
}
7072

7173
async fn request_app(app: Router, method: &str) -> Response {
@@ -119,8 +121,9 @@ async fn set_log_level_invalid_level() {
119121

120122
#[tokio::test]
121123
async fn with_metrics() {
122-
let config = MonitoringEndpointConfig { collect_metrics: true, ..Default::default() };
123-
let app = setup_monitoring_endpoint(Some(config)).app();
124+
let config = MonitoringEndpointConfig::default();
125+
let metrics_config = MetricsConfig { collect_metrics: true, collect_profiling_metrics: false };
126+
let app = create_monitoring_endpoint(config, TEST_VERSION, metrics_config, None, None).app();
124127

125128
// Register a metric.
126129
let metric_name = "metric_name";
@@ -173,6 +176,7 @@ fn setup_monitoring_endpoint_with_mempool_client() -> MonitoringEndpoint {
173176
create_monitoring_endpoint(
174177
CONFIG_WITHOUT_METRICS,
175178
TEST_VERSION,
179+
METRICS_CONFIG_DISABLED,
176180
Some(shared_mock_mempool_client),
177181
None,
178182
)
@@ -235,6 +239,7 @@ fn setup_monitoring_endpoint_with_l1_provider_client() -> MonitoringEndpoint {
235239
create_monitoring_endpoint(
236240
CONFIG_WITHOUT_METRICS,
237241
TEST_VERSION,
242+
METRICS_CONFIG_DISABLED,
238243
None,
239244
Some(shared_mock_l1_provider_client),
240245
)

crates/apollo_monitoring_endpoint_config/src/config.rs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,11 @@ pub const MONITORING_ENDPOINT_DEFAULT_PORT: u16 = 8082;
1414
pub struct MonitoringEndpointConfig {
1515
pub ip: IpAddr,
1616
pub port: u16,
17-
pub collect_metrics: bool,
18-
pub collect_profiling_metrics: bool,
1917
}
2018

2119
impl MonitoringEndpointConfig {
2220
pub fn deployment() -> Self {
23-
Self {
24-
ip: MONITORING_ENDPOINT_DEFAULT_IP,
25-
port: MONITORING_ENDPOINT_DEFAULT_PORT,
26-
collect_metrics: true,
27-
collect_profiling_metrics: true,
28-
}
21+
Self { ip: MONITORING_ENDPOINT_DEFAULT_IP, port: MONITORING_ENDPOINT_DEFAULT_PORT }
2922
}
3023
}
3124

@@ -50,18 +43,6 @@ impl SerializeConfig for MonitoringEndpointConfig {
5043
"The monitoring endpoint port.",
5144
ParamPrivacyInput::Public,
5245
),
53-
ser_param(
54-
"collect_metrics",
55-
&self.collect_metrics,
56-
"If true, collect and return metrics in the monitoring endpoint.",
57-
ParamPrivacyInput::Public,
58-
),
59-
ser_param(
60-
"collect_profiling_metrics",
61-
&self.collect_profiling_metrics,
62-
"If true, collect and return profiling metrics in the monitoring endpoint.",
63-
ParamPrivacyInput::Public,
64-
),
6546
])
6647
}
6748
}

crates/apollo_node/src/components.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use apollo_config_manager::config_manager_runner::ConfigManagerRunner;
1010
use apollo_consensus_manager::consensus_manager::{ConsensusManager, ConsensusManagerArgs};
1111
use apollo_gateway::gateway::{create_gateway, Gateway};
1212
use apollo_http_server::http_server::{create_http_server, HttpServer};
13+
use apollo_infra::metrics::MetricsConfig;
1314
use apollo_l1_endpoint_monitor::monitor::L1EndpointMonitor;
1415
use apollo_l1_gas_price::l1_gas_price_provider::L1GasPriceProvider;
1516
use apollo_l1_gas_price::l1_gas_price_scraper::L1GasPriceScraper;
@@ -324,6 +325,7 @@ pub async fn create_node_components(
324325
Some(create_monitoring_endpoint(
325326
monitoring_endpoint_config.clone(),
326327
VERSION_FULL,
328+
MetricsConfig::enabled(),
327329
mempool_client,
328330
l1_provider_client,
329331
))

0 commit comments

Comments
 (0)