Introduce total gas and gas per second metrics on new payload (#8398)

This commit is contained in:
Qiwei Yang
2024-05-31 05:49:17 +08:00
committed by GitHub
parent 0774d16ce8
commit 38fcae51f3
2 changed files with 33 additions and 10 deletions

View File

@ -565,9 +565,11 @@ where
async fn new_payload_v1(&self, payload: ExecutionPayloadV1) -> RpcResult<PayloadStatus> {
trace!(target: "rpc::engine", "Serving engine_newPayloadV1");
let start = Instant::now();
let gas_used = payload.gas_used;
let res = Self::new_payload_v1(self, payload).await;
self.inner.metrics.latency.new_payload_v1.record(start.elapsed());
self.inner.metrics.new_payload_response.update_response_metrics(&res);
let elapsed = start.elapsed();
self.inner.metrics.latency.new_payload_v1.record(elapsed);
self.inner.metrics.new_payload_response.update_response_metrics(&res, gas_used, elapsed);
Ok(res?)
}
@ -576,9 +578,11 @@ where
async fn new_payload_v2(&self, payload: ExecutionPayloadInputV2) -> RpcResult<PayloadStatus> {
trace!(target: "rpc::engine", "Serving engine_newPayloadV2");
let start = Instant::now();
let gas_used = payload.execution_payload.gas_used;
let res = Self::new_payload_v2(self, payload).await;
self.inner.metrics.latency.new_payload_v2.record(start.elapsed());
self.inner.metrics.new_payload_response.update_response_metrics(&res);
let elapsed = start.elapsed();
self.inner.metrics.latency.new_payload_v2.record(elapsed);
self.inner.metrics.new_payload_response.update_response_metrics(&res, gas_used, elapsed);
Ok(res?)
}
@ -592,10 +596,12 @@ where
) -> RpcResult<PayloadStatus> {
trace!(target: "rpc::engine", "Serving engine_newPayloadV3");
let start = Instant::now();
let gas_used = payload.payload_inner.payload_inner.gas_used;
let res =
Self::new_payload_v3(self, payload, versioned_hashes, parent_beacon_block_root).await;
self.inner.metrics.latency.new_payload_v3.record(start.elapsed());
self.inner.metrics.new_payload_response.update_response_metrics(&res);
let elapsed = start.elapsed();
self.inner.metrics.latency.new_payload_v3.record(elapsed);
self.inner.metrics.new_payload_response.update_response_metrics(&res, gas_used, elapsed);
Ok(res?)
}
@ -607,10 +613,12 @@ where
) -> RpcResult<PayloadStatus> {
trace!(target: "rpc::engine", "Serving engine_newPayloadV4");
let start = Instant::now();
let gas_used = payload.payload_inner.payload_inner.payload_inner.gas_used;
let res =
Self::new_payload_v4(self, payload, versioned_hashes, parent_beacon_block_root).await;
self.inner.metrics.latency.new_payload_v4.record(start.elapsed());
self.inner.metrics.new_payload_response.update_response_metrics(&res);
let elapsed = start.elapsed();
self.inner.metrics.latency.new_payload_v4.record(elapsed);
self.inner.metrics.new_payload_response.update_response_metrics(&res, gas_used, elapsed);
Ok(res?)
}

View File

@ -1,3 +1,5 @@
use std::time::Duration;
use crate::EngineApiError;
use metrics::{Counter, Histogram};
use reth_metrics::Metrics;
@ -92,14 +94,27 @@ pub(crate) struct NewPayloadStatusResponseMetrics {
/// The total count of new payload messages that were unsuccessful, i.e. we responded with an
/// error type that is not a [PayloadStatusEnum].
pub(crate) new_payload_error: Counter,
/// The total gas of valid new payload messages received.
pub(crate) new_payload_total_gas: Histogram,
/// The gas per second of valid new payload messages received.
pub(crate) new_payload_gas_per_second: Histogram,
}
impl NewPayloadStatusResponseMetrics {
/// Increment the newPayload counter based on the given rpc result
pub(crate) fn update_response_metrics(&self, result: &Result<PayloadStatus, EngineApiError>) {
pub(crate) fn update_response_metrics(
&self,
result: &Result<PayloadStatus, EngineApiError>,
gas_used: u64,
time: Duration,
) {
match result {
Ok(status) => match status.status {
PayloadStatusEnum::Valid => self.new_payload_valid.increment(1),
PayloadStatusEnum::Valid => {
self.new_payload_valid.increment(1);
self.new_payload_total_gas.record(gas_used as f64);
self.new_payload_gas_per_second.record(gas_used as f64 / time.as_secs_f64());
}
PayloadStatusEnum::Syncing => self.new_payload_syncing.increment(1),
PayloadStatusEnum::Accepted => self.new_payload_accepted.increment(1),
PayloadStatusEnum::Invalid { .. } => self.new_payload_invalid.increment(1),