add metrics for engine_getBlobsV1 (#14621)

This commit is contained in:
Harrish Bansal
2025-02-21 01:32:52 +05:30
committed by GitHub
parent 066482d81b
commit 81cff4a90b
2 changed files with 30 additions and 2 deletions

View File

@ -1006,15 +1006,30 @@ where
versioned_hashes: Vec<B256>, versioned_hashes: Vec<B256>,
) -> RpcResult<Vec<Option<BlobAndProofV1>>> { ) -> RpcResult<Vec<Option<BlobAndProofV1>>> {
trace!(target: "rpc::engine", "Serving engine_getBlobsV1"); trace!(target: "rpc::engine", "Serving engine_getBlobsV1");
let start = Instant::now();
if versioned_hashes.len() > MAX_BLOB_LIMIT { if versioned_hashes.len() > MAX_BLOB_LIMIT {
return Err(EngineApiError::BlobRequestTooLarge { len: versioned_hashes.len() }.into()) return Err(EngineApiError::BlobRequestTooLarge { len: versioned_hashes.len() }.into())
} }
Ok(self let res = self
.inner .inner
.tx_pool .tx_pool
.get_blobs_for_versioned_hashes(&versioned_hashes) .get_blobs_for_versioned_hashes(&versioned_hashes)
.map_err(|err| EngineApiError::Internal(Box::new(err)))?) .map_err(|err| EngineApiError::Internal(Box::new(err)).into());
let elapsed = start.elapsed();
self.inner.metrics.latency.get_blobs_v1.record(elapsed);
if let Ok(blobs) = &res {
let blobs_found = blobs.iter().flatten().count();
let blobs_missed = versioned_hashes.len() - blobs_found;
self.inner.metrics.blob_metrics.blob_count.increment(blobs_found as u64);
self.inner.metrics.blob_metrics.blob_misses.increment(blobs_missed as u64);
}
res
} }
} }

View File

@ -14,6 +14,8 @@ pub(crate) struct EngineApiMetrics {
pub(crate) fcu_response: ForkchoiceUpdatedResponseMetrics, pub(crate) fcu_response: ForkchoiceUpdatedResponseMetrics,
/// Engine API newPayload response type metrics /// Engine API newPayload response type metrics
pub(crate) new_payload_response: NewPayloadStatusResponseMetrics, pub(crate) new_payload_response: NewPayloadStatusResponseMetrics,
/// Blob-related metrics
pub(crate) blob_metrics: BlobMetrics,
} }
/// Beacon consensus engine latency metrics. /// Beacon consensus engine latency metrics.
@ -50,6 +52,8 @@ pub(crate) struct EngineApiLatencyMetrics {
pub(crate) get_payload_bodies_by_hash_v1: Histogram, pub(crate) get_payload_bodies_by_hash_v1: Histogram,
/// Latency for `engine_exchangeTransitionConfigurationV1` /// Latency for `engine_exchangeTransitionConfigurationV1`
pub(crate) exchange_transition_configuration: Histogram, pub(crate) exchange_transition_configuration: Histogram,
/// Latency for `engine_getBlobsV1`
pub(crate) get_blobs_v1: Histogram,
} }
/// Metrics for engine API forkchoiceUpdated responses. /// Metrics for engine API forkchoiceUpdated responses.
@ -104,6 +108,15 @@ pub(crate) struct NewPayloadStatusResponseMetrics {
pub(crate) new_payload_last: Gauge, pub(crate) new_payload_last: Gauge,
} }
#[derive(Metrics)]
#[metrics(scope = "engine.rpc.blobs")]
pub(crate) struct BlobMetrics {
/// Count of blobs successfully retrieved
pub(crate) blob_count: Counter,
/// Count of blob misses
pub(crate) blob_misses: Counter,
}
impl NewPayloadStatusResponseMetrics { impl NewPayloadStatusResponseMetrics {
/// Increment the newPayload counter based on the given rpc result /// Increment the newPayload counter based on the given rpc result
pub(crate) fn update_response_metrics( pub(crate) fn update_response_metrics(