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