Skip to content

Commit 4cae3c2

Browse files
committed
Add the telemetry feature to the op-rbuilder
1 parent 3e471ed commit 4cae3c2

File tree

5 files changed

+232
-57
lines changed

5 files changed

+232
-57
lines changed

Cargo.lock

+116-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/op-rbuilder/Cargo.toml

+13
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ tokio-tungstenite = "0.26.2"
8888
rand = "0.9.0"
8989
tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] }
9090

91+
# OpenTelemetry dependencies
92+
opentelemetry = { version = "0.29.1", optional = true }
93+
opentelemetry_sdk = { version = "0.29", optional = true }
94+
opentelemetry-otlp = { version = "0.29.0", optional = true, features = ["grpc-tonic"] }
95+
tracing-opentelemetry = { version = "0.30.0", optional = true }
96+
9197
# `flashblocks` branch
9298
rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "60885346d4cf7f241de82790478195747433d472" }
9399

@@ -118,6 +124,13 @@ min-trace-logs = ["tracing/release_max_level_trace"]
118124
integration = []
119125
flashblocks = []
120126

127+
telemetry = [
128+
"opentelemetry",
129+
"opentelemetry_sdk",
130+
"opentelemetry-otlp",
131+
"tracing-opentelemetry",
132+
]
133+
121134
[[bin]]
122135
name = "op-rbuilder"
123136
path = "src/main.rs"

crates/op-rbuilder/src/args.rs

+8
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,12 @@ pub struct OpRbuilderArgs {
4141
/// Signals whether to log pool transaction events
4242
#[arg(long = "builder.log-pool-transactions", default_value = "false")]
4343
pub log_pool_transactions: bool,
44+
/// OpenTelemetry endpoint for metrics
45+
#[cfg(feature = "telemetry")]
46+
#[arg(long, value_name = "TRACING")]
47+
pub tracing: bool,
48+
/// OpenTelemetry endpoint for metrics
49+
#[cfg(feature = "telemetry")]
50+
#[arg(long, value_name = "TRACING_ENDPOINT")]
51+
pub tracing_endpoint: String,
4452
}

crates/op-rbuilder/src/main.rs

+55-41
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use clap::Parser;
2+
use eyre::Result;
23
use monitoring::Monitoring;
34
use reth::providers::CanonStateSubscriptions;
45
use reth_optimism_cli::{chainspec::OpChainSpecParser, Cli};
@@ -24,59 +25,72 @@ pub mod payload_builder;
2425
#[cfg(not(feature = "flashblocks"))]
2526
mod payload_builder_vanilla;
2627
mod primitives;
28+
#[cfg(feature = "telemetry")]
29+
mod telemetry;
2730
#[cfg(test)]
2831
mod tester;
2932
mod tx_signer;
3033
use monitor_tx_pool::monitor_tx_pool;
3134

32-
fn main() {
33-
Cli::<OpChainSpecParser, args::OpRbuilderArgs>::parse()
34-
.run(|builder, builder_args| async move {
35-
let rollup_args = builder_args.rollup_args;
35+
fn main() -> Result<()> {
36+
let cli = Cli::<OpChainSpecParser, args::OpRbuilderArgs>::parse();
37+
cli.run(|builder, builder_args| async move {
38+
#[cfg(feature = "telemetry")]
39+
let mut provider = telemetry::TelemetryControl::init(&builder_args)?;
3640

37-
let op_node = OpNode::new(rollup_args.clone());
38-
let handle = builder
39-
.with_types::<OpNode>()
40-
.with_components(op_node.components().payload(CustomOpPayloadBuilder::new(
41-
builder_args.builder_signer,
42-
builder_args.flashblocks_ws_url,
43-
builder_args.chain_block_time,
44-
builder_args.flashblock_block_time,
45-
)))
46-
.with_add_ons(
47-
OpAddOnsBuilder::default()
48-
.with_sequencer(rollup_args.sequencer.clone())
49-
.with_enable_tx_conditional(rollup_args.enable_tx_conditional)
50-
.build(),
51-
)
52-
.on_node_started(move |ctx| {
53-
let new_canonical_blocks = ctx.provider().canonical_state_stream();
54-
let builder_signer = builder_args.builder_signer;
41+
// Wrap the main execution in a span
42+
let span = tracing::info_span!("op-rbuilder");
43+
let _enter = span.enter();
5544

56-
if builder_args.log_pool_transactions {
57-
tracing::info!("Logging pool transactions");
58-
ctx.task_executor.spawn_critical(
59-
"txlogging",
60-
Box::pin(async move {
61-
monitor_tx_pool(ctx.pool.all_transactions_event_listener()).await;
62-
}),
63-
);
64-
}
45+
let rollup_args = builder_args.rollup_args;
6546

47+
let op_node = OpNode::new(rollup_args.clone());
48+
let handle = builder
49+
.with_types::<OpNode>()
50+
.with_components(op_node.components().payload(CustomOpPayloadBuilder::new(
51+
builder_args.builder_signer,
52+
builder_args.flashblocks_ws_url,
53+
builder_args.chain_block_time,
54+
builder_args.flashblock_block_time,
55+
)))
56+
.with_add_ons(
57+
OpAddOnsBuilder::default()
58+
.with_sequencer(rollup_args.sequencer.clone())
59+
.with_enable_tx_conditional(rollup_args.enable_tx_conditional)
60+
.build(),
61+
)
62+
.on_node_started(move |ctx| {
63+
let new_canonical_blocks = ctx.provider().canonical_state_stream();
64+
let builder_signer = builder_args.builder_signer;
65+
66+
if builder_args.log_pool_transactions {
67+
tracing::info!("Logging pool transactions");
6668
ctx.task_executor.spawn_critical(
67-
"monitoring",
69+
"txlogging",
6870
Box::pin(async move {
69-
let monitoring = Monitoring::new(builder_signer);
70-
let _ = monitoring.run_with_stream(new_canonical_blocks).await;
71+
monitor_tx_pool(ctx.pool.all_transactions_event_listener()).await;
7172
}),
7273
);
74+
}
75+
76+
ctx.task_executor.spawn_critical(
77+
"monitoring",
78+
Box::pin(async move {
79+
let monitoring = Monitoring::new(builder_signer);
80+
let _ = monitoring.run_with_stream(new_canonical_blocks).await;
81+
}),
82+
);
83+
84+
Ok(())
85+
})
86+
.launch()
87+
.await?;
7388

74-
Ok(())
75-
})
76-
.launch()
77-
.await?;
89+
handle.node_exit_future.await?;
90+
#[cfg(feature = "telemetry")]
91+
provider.shutdown()?;
92+
Ok(())
93+
})?;
7894

79-
handle.node_exit_future.await
80-
})
81-
.unwrap();
95+
Ok(())
8296
}

0 commit comments

Comments
 (0)