iota_network/state_sync/
metrics.rs1use std::sync::Arc;
6
7use iota_metrics::histogram::Histogram;
8use iota_types::messages_checkpoint::CheckpointSequenceNumber;
9use prometheus::{IntGauge, Registry, register_int_gauge_with_registry};
10use tap::Pipe;
11
12#[derive(Clone)]
13pub(super) struct Metrics(Option<Arc<Inner>>);
14
15impl std::fmt::Debug for Metrics {
16 fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result {
17 fmt.debug_struct("Metrics").finish()
18 }
19}
20
21impl Metrics {
22 pub fn enabled(registry: &Registry) -> Self {
23 Metrics(Some(Inner::new(registry)))
24 }
25
26 pub fn disabled() -> Self {
27 Metrics(None)
28 }
29
30 pub fn set_highest_known_checkpoint(&self, sequence_number: CheckpointSequenceNumber) {
31 if let Some(inner) = &self.0 {
32 inner.highest_known_checkpoint.set(sequence_number as i64);
33 }
34 }
35
36 pub fn set_highest_verified_checkpoint(&self, sequence_number: CheckpointSequenceNumber) {
37 if let Some(inner) = &self.0 {
38 inner
39 .highest_verified_checkpoint
40 .set(sequence_number as i64);
41 }
42 }
43
44 pub fn set_highest_synced_checkpoint(&self, sequence_number: CheckpointSequenceNumber) {
45 if let Some(inner) = &self.0 {
46 inner.highest_synced_checkpoint.set(sequence_number as i64);
47 }
48 }
49
50 pub fn checkpoint_summary_age_metric(&self) -> Option<&Histogram> {
51 if let Some(inner) = &self.0 {
52 return Some(&inner.checkpoint_summary_age_ms);
53 }
54 None
55 }
56}
57
58struct Inner {
59 highest_known_checkpoint: IntGauge,
60 highest_verified_checkpoint: IntGauge,
61 highest_synced_checkpoint: IntGauge,
62 checkpoint_summary_age_ms: Histogram,
63}
64
65impl Inner {
66 pub fn new(registry: &Registry) -> Arc<Self> {
67 Self {
68 highest_known_checkpoint: register_int_gauge_with_registry!(
69 "highest_known_checkpoint",
70 "Highest known checkpoint",
71 registry
72 )
73 .unwrap(),
74
75 highest_verified_checkpoint: register_int_gauge_with_registry!(
76 "highest_verified_checkpoint",
77 "Highest verified checkpoint",
78 registry
79 )
80 .unwrap(),
81
82 highest_synced_checkpoint: register_int_gauge_with_registry!(
83 "highest_synced_checkpoint",
84 "Highest synced checkpoint",
85 registry
86 )
87 .unwrap(),
88
89 checkpoint_summary_age_ms: Histogram::new_in_registry(
90 "checkpoint_summary_age_ms",
91 "Age of checkpoints summaries when they arrive and are verified.",
92 registry,
93 ),
94 }
95 .pipe(Arc::new)
96 }
97}