Skip to content

Commit b4cadc5

Browse files
committed
Add BuilderMetrics.
Tracks number of submitter tasks and block number to submit.
1 parent 08b1018 commit b4cadc5

File tree

4 files changed

+39
-7
lines changed

4 files changed

+39
-7
lines changed

timeboost-builder/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
mod certifier;
22
mod config;
3+
mod metrics;
34
mod submit;
45

56
pub use robusta;

timeboost-builder/src/metrics.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use metrics::{Gauge, Metrics, NoMetrics};
2+
3+
#[derive(Debug)]
4+
#[non_exhaustive]
5+
pub struct BuilderMetrics {
6+
pub block_submit: Box<dyn Gauge>,
7+
pub submit_tasks: Box<dyn Gauge>,
8+
}
9+
10+
impl Default for BuilderMetrics {
11+
fn default() -> Self {
12+
Self::new(&NoMetrics)
13+
}
14+
}
15+
16+
impl BuilderMetrics {
17+
pub fn new<M: Metrics>(m: &M) -> Self {
18+
Self {
19+
block_submit: m.create_gauge("block_submit", None),
20+
submit_tasks: m.create_gauge("submit_tasks", None),
21+
}
22+
}
23+
}

timeboost-builder/src/submit.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use tokio::{
1717
use tokio_util::task::TaskTracker;
1818
use tracing::{debug, warn};
1919

20-
use crate::config::SubmitterConfig;
20+
use crate::{config::SubmitterConfig, metrics::BuilderMetrics};
2121

2222
const CACHE_SIZE: usize = 15_000;
2323
const MAX_TASKS: usize = 1000;
@@ -29,6 +29,7 @@ pub struct Submitter {
2929
handler: Handler,
3030
committees: Arc<AsyncMutex<CommitteeVec<2>>>,
3131
task_permits: Arc<Semaphore>,
32+
metrics: BuilderMetrics,
3233
}
3334

3435
impl Drop for Submitter {
@@ -38,7 +39,10 @@ impl Drop for Submitter {
3839
}
3940

4041
impl Submitter {
41-
pub async fn create(cfg: SubmitterConfig) -> Self {
42+
pub fn new<M>(cfg: SubmitterConfig, metrics: &M) -> Self
43+
where
44+
M: ::metrics::Metrics,
45+
{
4246
let client = robusta::Client::new(cfg.robusta.clone());
4347
let verified = Arc::new(Mutex::new(BTreeSet::new()));
4448
let committees = Arc::new(AsyncMutex::new(CommitteeVec::new(cfg.committee.clone())));
@@ -62,6 +66,7 @@ impl Submitter {
6266
submitters: TaskTracker::new(),
6367
committees,
6468
task_permits: Arc::new(Semaphore::new(MAX_TASKS)),
69+
metrics: BuilderMetrics::new(metrics),
6570
}
6671
}
6772

@@ -77,14 +82,17 @@ impl Submitter {
7782
let Ok(permit) = Semaphore::acquire_owned(self.task_permits.clone()).await else {
7883
return;
7984
};
85+
let num = cb.cert().data().num();
8086
debug!(
8187
node = %self.public_key(),
82-
num = %cb.cert().data().num(),
88+
num = %num,
8389
tasks = %self.submitters.len(),
8490
"creating block handler"
8591
);
8692
self.submitters
8793
.spawn(self.handler.clone().handle(permit, cb));
94+
self.metrics.block_submit.set(*num as usize);
95+
self.metrics.submit_tasks.set(self.submitters.len());
8896
}
8997

9098
pub async fn join(self) {
@@ -222,6 +230,7 @@ impl Handler {
222230
#[cfg(test)]
223231
mod tests {
224232
use bytes::Bytes;
233+
use metrics::NoMetrics;
225234
use multisig::{Committee, Keypair, PublicKey, Signed, VoteAccumulator};
226235
use timeboost_types::{Block, BlockInfo, BlockNumber, sailfish::Round};
227236
use tokio::task::JoinSet;
@@ -296,7 +305,7 @@ mod tests {
296305
.committee(committee.clone())
297306
.build();
298307

299-
let mut s = Submitter::create(scfg).await;
308+
let mut s = Submitter::new(scfg, &NoMetrics);
300309

301310
tasks.spawn(async move {
302311
for _ in 0..NODES {

timeboost/src/lib.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ impl Timeboost {
6161
let met = Arc::new(TimeboostMetrics::new(&*pro));
6262
let seq = Sequencer::new(cfg.sequencer_config(), &*pro).await?;
6363
let blk = Certifier::new(cfg.certifier_config(), &*pro).await?;
64+
let sub = Submitter::new(cfg.submitter_config(), &*pro);
6465

6566
// TODO: Once we have e2e listener this check wont be needed
6667
let nitro_forwarder = if let Some(nitro_addr) = cfg.nitro_addr.clone() {
@@ -79,8 +80,6 @@ impl Timeboost {
7980
.serve(addr)
8081
};
8182

82-
let submitter = Submitter::create(cfg.submitter_config()).await;
83-
8483
Ok(Self {
8584
metrics_task: spawn(metrics_api(pro.clone(), cfg.metrics_port)),
8685
label: cfg.sign_keypair.public_key(),
@@ -90,7 +89,7 @@ impl Timeboost {
9089
_metrics: met,
9190
nitro_forwarder,
9291
internal_api: spawn(internal_api),
93-
submitter,
92+
submitter: sub,
9493
})
9594
}
9695

0 commit comments

Comments
 (0)