finality_relay/
sync_loop_metrics.rs1use relay_utils::{
20 metrics::{metric_name, register, IntGauge, Metric, PrometheusError, Registry},
21 UniqueSaturatedInto,
22};
23
24#[derive(Clone)]
26pub struct SyncLoopMetrics {
27 best_source_block_number: IntGauge,
29 best_target_block_number: IntGauge,
31 using_different_forks: IntGauge,
34}
35
36impl SyncLoopMetrics {
37 pub fn new(
39 prefix: Option<&str>,
40 at_source_chain_label: &str,
41 at_target_chain_label: &str,
42 ) -> Result<Self, PrometheusError> {
43 Ok(SyncLoopMetrics {
44 best_source_block_number: IntGauge::new(
45 metric_name(prefix, &format!("best_{at_source_chain_label}_block_number")),
46 format!("Best block number at the {at_source_chain_label}"),
47 )?,
48 best_target_block_number: IntGauge::new(
49 metric_name(prefix, &format!("best_{at_target_chain_label}_block_number")),
50 format!("Best block number at the {at_target_chain_label}"),
51 )?,
52 using_different_forks: IntGauge::new(
53 metric_name(prefix, &format!("is_{at_source_chain_label}_and_{at_target_chain_label}_using_different_forks")),
54 "Whether the best finalized source block at target node is different (value 1) from the \
55 corresponding block at the source node",
56 )?,
57 })
58 }
59
60 #[cfg(test)]
62 pub(crate) fn is_using_same_fork(&self) -> bool {
63 self.using_different_forks.get() == 0
64 }
65
66 pub fn update_best_block_at_source<Number: UniqueSaturatedInto<u64>>(
68 &self,
69 source_best_number: Number,
70 ) {
71 self.best_source_block_number.set(source_best_number.unique_saturated_into());
72 }
73
74 pub fn update_best_block_at_target<Number: UniqueSaturatedInto<u64>>(
76 &self,
77 target_best_number: Number,
78 ) {
79 self.best_target_block_number.set(target_best_number.unique_saturated_into());
80 }
81
82 pub fn update_using_same_fork(&self, using_same_fork: bool) {
84 self.using_different_forks.set((!using_same_fork).into())
85 }
86}
87
88impl Metric for SyncLoopMetrics {
89 fn register(&self, registry: &Registry) -> Result<(), PrometheusError> {
90 register(self.best_source_block_number.clone(), registry)?;
91 register(self.best_target_block_number.clone(), registry)?;
92 register(self.using_different_forks.clone(), registry)?;
93 Ok(())
94 }
95}