reth_engine_tree/tree/
metrics.rs1use reth_evm::metrics::ExecutorMetrics;
2use reth_metrics::{
3 metrics::{Counter, Gauge, Histogram},
4 Metrics,
5};
6use reth_trie::updates::TrieUpdates;
7
8#[derive(Debug, Default)]
10pub(crate) struct EngineApiMetrics {
11 pub(crate) engine: EngineMetrics,
13 pub(crate) executor: ExecutorMetrics,
15 pub(crate) block_validation: BlockValidationMetrics,
17 pub(crate) tree: TreeMetrics,
19}
20
21#[derive(Metrics)]
23#[metrics(scope = "blockchain_tree")]
24pub(super) struct TreeMetrics {
25 pub canonical_chain_height: Gauge,
27 pub reorgs: Counter,
29 pub latest_reorg_depth: Gauge,
31}
32
33#[derive(Metrics)]
35#[metrics(scope = "consensus.engine.beacon")]
36pub(crate) struct EngineMetrics {
37 pub(crate) executed_blocks: Gauge,
39 pub(crate) inserted_already_executed_blocks: Counter,
41 pub(crate) pipeline_runs: Counter,
43 pub(crate) forkchoice_updated_messages: Counter,
45 pub(crate) new_payload_messages: Counter,
47 pub(crate) persistence_duration: Histogram,
49 pub(crate) failed_new_payload_response_deliveries: Counter,
55 pub(crate) failed_forkchoice_updated_response_deliveries: Counter,
57 }
59
60#[derive(Metrics)]
62#[metrics(scope = "sync.block_validation")]
63pub(crate) struct BlockValidationMetrics {
64 pub(crate) state_root_storage_tries_updated_total: Counter,
66 pub(crate) state_root_parallel_fallback_total: Counter,
68 pub(crate) state_root_histogram: Histogram,
70 pub(crate) state_root_duration: Gauge,
72 pub(crate) trie_input_duration: Histogram,
74}
75
76impl BlockValidationMetrics {
77 pub(crate) fn record_state_root(&self, trie_output: &TrieUpdates, elapsed_as_secs: f64) {
79 self.state_root_storage_tries_updated_total
80 .increment(trie_output.storage_tries_ref().len() as u64);
81 self.state_root_duration.set(elapsed_as_secs);
82 self.state_root_histogram.record(elapsed_as_secs);
83 }
84}
85
86#[derive(Metrics)]
88#[metrics(scope = "blockchain_tree.block_buffer")]
89pub(crate) struct BlockBufferMetrics {
90 pub blocks: Gauge,
92}