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:
Paul Hauner 2022-08-19 04:27:23 +00:00
parent 043fa2153e
commit df358b864d
6 changed files with 30 additions and 3 deletions

1
Cargo.lock generated
View File

@ -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",

View File

@ -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);

View File

@ -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"

View File

@ -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,

View File

@ -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),

View File

@ -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"]
);
} }