Add metrics for EE PayloadStatus
returns (#3486)
## Issue Addressed NA ## Proposed Changes Adds some metrics so we can track payload status responses from the EE. I think this will be useful for troubleshooting and alerting. I also bumped the `BecaonChain::per_slot_task` to `debug` since it doesn't seem too noisy and would have helped us with some things we were debugging in the past. ## Additional Info NA
This commit is contained in:
parent
043fa2153e
commit
df358b864d
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -2083,6 +2083,7 @@ dependencies = [
|
|||||||
"slot_clock",
|
"slot_clock",
|
||||||
"ssz-rs",
|
"ssz-rs",
|
||||||
"state_processing",
|
"state_processing",
|
||||||
|
"strum",
|
||||||
"task_executor",
|
"task_executor",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
@ -4274,8 +4274,13 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
/// it contains a call to `fork_choice` which may eventually call
|
/// it contains a call to `fork_choice` which may eventually call
|
||||||
/// `tokio::runtime::block_on` in certain cases.
|
/// `tokio::runtime::block_on` in certain cases.
|
||||||
pub async fn per_slot_task(self: &Arc<Self>) {
|
pub async fn per_slot_task(self: &Arc<Self>) {
|
||||||
trace!(self.log, "Running beacon chain per slot tasks");
|
|
||||||
if let Some(slot) = self.slot_clock.now() {
|
if let Some(slot) = self.slot_clock.now() {
|
||||||
|
debug!(
|
||||||
|
self.log,
|
||||||
|
"Running beacon chain per slot tasks";
|
||||||
|
"slot" => ?slot
|
||||||
|
);
|
||||||
|
|
||||||
// Always run the light-weight pruning tasks (these structures should be empty during
|
// Always run the light-weight pruning tasks (these structures should be empty during
|
||||||
// sync anyway).
|
// sync anyway).
|
||||||
self.naive_aggregation_pool.write().prune(slot);
|
self.naive_aggregation_pool.write().prune(slot);
|
||||||
|
@ -43,4 +43,4 @@ fork_choice = { path = "../../consensus/fork_choice" }
|
|||||||
mev-build-rs = {git = "https://github.com/ralexstokes/mev-rs", tag = "v0.2.0"}
|
mev-build-rs = {git = "https://github.com/ralexstokes/mev-rs", tag = "v0.2.0"}
|
||||||
ethereum-consensus = {git = "https://github.com/ralexstokes/ethereum-consensus"}
|
ethereum-consensus = {git = "https://github.com/ralexstokes/ethereum-consensus"}
|
||||||
ssz-rs = {git = "https://github.com/ralexstokes/ssz-rs"}
|
ssz-rs = {git = "https://github.com/ralexstokes/ssz-rs"}
|
||||||
|
strum = "0.24.0"
|
||||||
|
@ -4,6 +4,7 @@ use http::deposit_methods::RpcError;
|
|||||||
pub use json_structures::TransitionConfigurationV1;
|
pub use json_structures::TransitionConfigurationV1;
|
||||||
use reqwest::StatusCode;
|
use reqwest::StatusCode;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use strum::IntoStaticStr;
|
||||||
pub use types::{
|
pub use types::{
|
||||||
Address, EthSpec, ExecutionBlockHash, ExecutionPayload, ExecutionPayloadHeader, FixedVector,
|
Address, EthSpec, ExecutionBlockHash, ExecutionPayload, ExecutionPayloadHeader, FixedVector,
|
||||||
Hash256, Uint256, VariableList,
|
Hash256, Uint256, VariableList,
|
||||||
@ -71,7 +72,8 @@ impl From<builder_client::Error> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
#[derive(Clone, Copy, Debug, PartialEq, IntoStaticStr)]
|
||||||
|
#[strum(serialize_all = "snake_case")]
|
||||||
pub enum PayloadStatusV1Status {
|
pub enum PayloadStatusV1Status {
|
||||||
Valid,
|
Valid,
|
||||||
Invalid,
|
Invalid,
|
||||||
|
@ -893,6 +893,13 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
.request(|engine| engine.api.new_payload_v1(execution_payload.clone()))
|
.request(|engine| engine.api.new_payload_v1(execution_payload.clone()))
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
if let Ok(status) = &result {
|
||||||
|
metrics::inc_counter_vec(
|
||||||
|
&metrics::EXECUTION_LAYER_PAYLOAD_STATUS,
|
||||||
|
&["new_payload", status.status.into()],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
process_payload_status(execution_payload.block_hash, result, self.log())
|
process_payload_status(execution_payload.block_hash, result, self.log())
|
||||||
.map_err(Box::new)
|
.map_err(Box::new)
|
||||||
.map_err(Error::EngineError)
|
.map_err(Error::EngineError)
|
||||||
@ -1032,6 +1039,13 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
if let Ok(status) = &result {
|
||||||
|
metrics::inc_counter_vec(
|
||||||
|
&metrics::EXECUTION_LAYER_PAYLOAD_STATUS,
|
||||||
|
&["forkchoice_updated", status.payload_status.status.into()],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
process_payload_status(
|
process_payload_status(
|
||||||
head_block_hash,
|
head_block_hash,
|
||||||
result.map(|response| response.payload_status),
|
result.map(|response| response.payload_status),
|
||||||
|
@ -36,4 +36,9 @@ lazy_static::lazy_static! {
|
|||||||
"execution_layer_get_payload_by_block_hash_time",
|
"execution_layer_get_payload_by_block_hash_time",
|
||||||
"Time to reconstruct a payload from the EE using eth_getBlockByHash"
|
"Time to reconstruct a payload from the EE using eth_getBlockByHash"
|
||||||
);
|
);
|
||||||
|
pub static ref EXECUTION_LAYER_PAYLOAD_STATUS: Result<IntCounterVec> = try_create_int_counter_vec(
|
||||||
|
"execution_layer_payload_status",
|
||||||
|
"Indicates the payload status returned for a particular method",
|
||||||
|
&["method", "status"]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user