@@ -18,6 +18,7 @@ use reth_rpc_layer::AuthClientService;
18
18
use std:: sync:: Arc ;
19
19
use tracing:: { debug, error, info} ;
20
20
21
+ use crate :: metrics:: ServerMetrics ;
21
22
use crate :: selector:: { DefaultPayloadSelector , PayloadSelector } ;
22
23
23
24
#[ rpc( server, client, namespace = "engine" ) ]
@@ -55,18 +56,21 @@ pub struct EthEngineApi<S = AuthClientService<HttpBackend>> {
55
56
builder_clients : Vec < Arc < HttpClient < S > > > ,
56
57
payload_selector : Arc < dyn PayloadSelector + Send + Sync > ,
57
58
boost_sync : bool ,
59
+ metrics : ServerMetrics ,
58
60
}
59
61
60
62
impl < S > EthEngineApi < S > {
61
63
pub fn new (
62
64
l2_client : Arc < HttpClient < S > > ,
63
65
builder_clients : Vec < Arc < HttpClient < S > > > ,
64
66
boost_sync : bool ,
67
+ metrics : ServerMetrics ,
65
68
) -> Self {
66
69
Self {
67
70
l2_client,
68
71
builder_clients,
69
72
boost_sync,
73
+ metrics,
70
74
payload_selector : Arc :: new ( DefaultPayloadSelector ) ,
71
75
}
72
76
}
@@ -79,13 +83,16 @@ impl EthApiServer for EthEngineApi {
79
83
message = "received send_raw_transaction" ,
80
84
"bytes_len" = bytes. len( )
81
85
) ;
82
- let builder = self . builder_client . clone ( ) ;
83
- let tx_bytes = bytes. clone ( ) ;
84
- tokio:: spawn ( async move {
85
- builder. send_raw_transaction ( tx_bytes) . await . map_err ( |e| {
86
+ for builder in self . builder_clients . iter ( ) {
87
+ self . metrics . send_raw_tx_count . increment ( 1 ) ;
88
+ let builder = builder. clone ( ) ;
89
+ let tx_bytes = bytes. clone ( ) ;
90
+ tokio:: spawn ( async move {
91
+ builder. send_raw_transaction ( tx_bytes) . await . map_err ( |e| {
86
92
error ! ( message = "error calling send_raw_transaction for builder" , "error" = %e) ;
87
- } )
88
- } ) ;
93
+ } )
94
+ } ) ;
95
+ }
89
96
self . l2_client
90
97
. send_raw_transaction ( bytes)
91
98
. await
@@ -129,6 +136,7 @@ impl EngineApiServer for EthEngineApi {
129
136
if should_send_to_builder {
130
137
// async call to each builder to trigger payload building and sync
131
138
for builder in self . builder_clients . iter ( ) {
139
+ self . metrics . fcu_count . increment ( 1 ) ;
132
140
let builder = builder. clone ( ) ;
133
141
let attr = payload_attributes. clone ( ) ;
134
142
tokio:: spawn ( async move {
@@ -173,6 +181,7 @@ impl EngineApiServer for EthEngineApi {
173
181
let builder_client_futures = self . builder_clients . iter ( ) . map ( |builder| {
174
182
let builder = builder. clone ( ) ;
175
183
Box :: pin ( async move {
184
+ self . metrics . get_payload_count . increment ( 1 ) ;
176
185
let payload = builder. get_payload_v3 ( payload_id) . await . map_err ( |e| {
177
186
error ! ( message = "error calling get_payload_v3 from builder" , "error" = %e, "payload_id" = %payload_id) ;
178
187
e
@@ -231,6 +240,7 @@ impl EngineApiServer for EthEngineApi {
231
240
// async call to builder to sync the builder node
232
241
if self . boost_sync {
233
242
for builder in self . builder_clients . iter ( ) {
243
+ self . metrics . new_payload_count . increment ( 1 ) ;
234
244
let builder = builder. clone ( ) ;
235
245
let builder_payload = payload. clone ( ) ;
236
246
let builder_versioned_hashes = versioned_hashes. clone ( ) ;
0 commit comments