From cec150cc80d892e001d30a7d0bb9971d493380d7 Mon Sep 17 00:00:00 2001 From: Einar Rasmussen Date: Tue, 9 Dec 2025 20:05:57 +0100 Subject: [PATCH] feat(node/metrics): total sequenced transactions --- crates/node/service/src/actors/sequencer/actor.rs | 5 +++++ .../node/service/src/actors/sequencer/metrics.rs | 7 +++++++ crates/node/service/src/metrics/mod.rs | 14 ++++++++++++++ crates/protocol/protocol/src/attributes.rs | 5 +++++ 4 files changed, 31 insertions(+) diff --git a/crates/node/service/src/actors/sequencer/actor.rs b/crates/node/service/src/actors/sequencer/actor.rs index fb922c657d..59b4b8efd7 100644 --- a/crates/node/service/src/actors/sequencer/actor.rs +++ b/crates/node/service/src/actors/sequencer/actor.rs @@ -11,6 +11,7 @@ use crate::{ metrics::{ update_attributes_build_duration_metrics, update_block_build_duration_metrics, update_conductor_commitment_duration_metrics, update_seal_duration_metrics, + update_total_transactions_sequenced, }, origin_selector::OriginSelector, }, @@ -151,6 +152,10 @@ where update_seal_duration_metrics(seal_request_start.elapsed()); + let payload_transaction_count = + unsealed_payload_handle.attributes_with_parent.count_transactions(); + update_total_transactions_sequenced(payload_transaction_count); + // If the conductor is available, commit the payload to it. if let Some(conductor) = &self.conductor { let _conductor_commitment_start = Instant::now(); diff --git a/crates/node/service/src/actors/sequencer/metrics.rs b/crates/node/service/src/actors/sequencer/metrics.rs index 9b3fd6e410..49fc0db02d 100644 --- a/crates/node/service/src/actors/sequencer/metrics.rs +++ b/crates/node/service/src/actors/sequencer/metrics.rs @@ -68,3 +68,10 @@ pub(super) fn update_seal_duration_metrics(duration: Duration) { // Log the block building seal task duration, if metrics are enabled. kona_macros::set!(gauge, crate::Metrics::SEQUENCER_BLOCK_BUILDING_SEAL_TASK_DURATION, duration); } + +#[inline] +pub(super) fn update_total_transactions_sequenced(transaction_count: u64) { + #[cfg(feature = "metrics")] + metrics::counter!(crate::Metrics::SEQUENCER_TOTAL_TRANSACTIONS_SEQUENCED) + .increment(transaction_count); +} diff --git a/crates/node/service/src/metrics/mod.rs b/crates/node/service/src/metrics/mod.rs index 02b84b3b07..2e1c786c98 100644 --- a/crates/node/service/src/metrics/mod.rs +++ b/crates/node/service/src/metrics/mod.rs @@ -33,6 +33,10 @@ impl Metrics { pub const SEQUENCER_CONDUCTOR_COMMITMENT_DURATION: &str = "kona_node_sequencer_conductor_commitment_duration"; + /// Total number of transactions of sequenced by sequencer. + pub const SEQUENCER_TOTAL_TRANSACTIONS_SEQUENCED: &str = + "kona_node_sequencer_total_transactions_sequenced"; + /// Initializes metrics for the node service. /// /// This does two things: @@ -85,6 +89,13 @@ impl Metrics { Self::SEQUENCER_CONDUCTOR_COMMITMENT_DURATION, "Duration of the sequencer conductor commitment" ); + + // Sequencer total transactions sequenced + metrics::describe_counter!( + Self::SEQUENCER_TOTAL_TRANSACTIONS_SEQUENCED, + metrics::Unit::Count, + "Total count of sequenced transactions" + ); } /// Initializes metrics to `0` so they can be queried immediately by consumers of prometheus @@ -96,5 +107,8 @@ impl Metrics { // Derivation critical error kona_macros::set!(counter, Self::DERIVATION_CRITICAL_ERROR, 0); + + // Sequencer: reset total transactions sequenced + kona_macros::set!(counter, Self::SEQUENCER_TOTAL_TRANSACTIONS_SEQUENCED, 0); } } diff --git a/crates/protocol/protocol/src/attributes.rs b/crates/protocol/protocol/src/attributes.rs index 165d6c0221..c2ecdb6a0c 100644 --- a/crates/protocol/protocol/src/attributes.rs +++ b/crates/protocol/protocol/src/attributes.rs @@ -84,6 +84,11 @@ impl OpAttributesWithParent { is_last_in_span: self.is_last_in_span, } } + + /// Returns the number of transactions in the attributes. + pub fn count_transactions(&self) -> u64 { + self.attributes().decoded_transactions().count().try_into().unwrap() + } } #[cfg(test)]