mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: add metrics for best and resolved payloads (#5469)
This commit is contained in:
@ -6,7 +6,7 @@ use reth_metrics::{
|
||||
};
|
||||
|
||||
/// Payload builder service metrics
|
||||
#[derive(Metrics)]
|
||||
#[derive(Metrics, Clone)]
|
||||
#[metrics(scope = "payloads")]
|
||||
pub(crate) struct PayloadBuilderServiceMetrics {
|
||||
/// Number of active jobs
|
||||
@ -15,6 +15,14 @@ pub(crate) struct PayloadBuilderServiceMetrics {
|
||||
pub(crate) initiated_jobs: Counter,
|
||||
/// Total number of failed jobs
|
||||
pub(crate) failed_jobs: Counter,
|
||||
/// Coinbase revenue for best payloads
|
||||
pub(crate) best_revenue: Gauge,
|
||||
/// Current block returned as the best payload
|
||||
pub(crate) best_block: Gauge,
|
||||
/// Coinbase revenue for resolved payloads
|
||||
pub(crate) resolved_revenue: Gauge,
|
||||
/// Current block returned as the resolved payload
|
||||
pub(crate) resolved_block: Gauge,
|
||||
}
|
||||
|
||||
impl PayloadBuilderServiceMetrics {
|
||||
@ -29,4 +37,14 @@ impl PayloadBuilderServiceMetrics {
|
||||
pub(crate) fn set_active_jobs(&self, value: usize) {
|
||||
self.active_jobs.set(value as f64)
|
||||
}
|
||||
|
||||
pub(crate) fn set_best_revenue(&self, block: u64, value: f64) {
|
||||
self.best_block.set(block as f64);
|
||||
self.best_revenue.set(value)
|
||||
}
|
||||
|
||||
pub(crate) fn set_resolved_revenue(&self, block: u64, value: f64) {
|
||||
self.resolved_block.set(block as f64);
|
||||
self.resolved_revenue.set(value)
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,7 +208,17 @@ where
|
||||
&self,
|
||||
id: PayloadId,
|
||||
) -> Option<Result<Arc<BuiltPayload>, PayloadBuilderError>> {
|
||||
self.payload_jobs.iter().find(|(_, job_id)| *job_id == id).map(|(j, _)| j.best_payload())
|
||||
let res = self
|
||||
.payload_jobs
|
||||
.iter()
|
||||
.find(|(_, job_id)| *job_id == id)
|
||||
.map(|(j, _)| j.best_payload());
|
||||
if let Some(Ok(ref best)) = res {
|
||||
// TODO: remove `to`
|
||||
self.metrics.set_best_revenue(best.block.number, best.fees().to::<u128>() as f64);
|
||||
}
|
||||
|
||||
res
|
||||
}
|
||||
|
||||
/// Returns the payload attributes for the given payload.
|
||||
@ -233,6 +243,19 @@ where
|
||||
trace!(%id, "terminated resolved job");
|
||||
}
|
||||
|
||||
// Since the fees will not be known until the payload future is resolved / awaited, we wrap
|
||||
// the future in a new future that will update the metrics.
|
||||
let resolved_metrics = self.metrics.clone();
|
||||
let fut = async move {
|
||||
let res = fut.await;
|
||||
if let Ok(ref payload) = res {
|
||||
// TODO: remove `to`
|
||||
resolved_metrics
|
||||
.set_resolved_revenue(payload.block.number, payload.fees().to::<u128>() as f64);
|
||||
}
|
||||
res
|
||||
};
|
||||
|
||||
Some(Box::pin(fut))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user