iota_core/checkpoints/checkpoint_executor/
metrics.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use std::sync::Arc;
6
7use prometheus::{
8    Histogram, IntCounter, IntGauge, Registry, register_histogram_with_registry,
9    register_int_counter_with_registry, register_int_gauge_with_registry,
10};
11
12pub struct CheckpointExecutorMetrics {
13    pub checkpoint_exec_sync_tps: IntGauge,
14    pub last_executed_checkpoint: IntGauge,
15    pub last_executed_checkpoint_timestamp_ms: IntGauge,
16    pub checkpoint_exec_errors: IntCounter,
17    pub checkpoint_exec_epoch: IntGauge,
18    pub checkpoint_exec_inflight: IntGauge,
19    pub checkpoint_exec_latency: Histogram,
20    pub checkpoint_prepare_latency: Histogram,
21    pub checkpoint_transaction_count: Histogram,
22    pub checkpoint_contents_age: Histogram,
23    pub last_executed_checkpoint_age: Histogram,
24}
25
26impl CheckpointExecutorMetrics {
27    pub fn new(registry: &Registry) -> Arc<Self> {
28        let this = Self {
29            checkpoint_exec_sync_tps: register_int_gauge_with_registry!(
30                "checkpoint_exec_sync_tps",
31                "Checkpoint sync estimated transactions per second",
32                registry
33            )
34            .unwrap(),
35            last_executed_checkpoint: register_int_gauge_with_registry!(
36                "last_executed_checkpoint",
37                "Last executed checkpoint",
38                registry
39            )
40            .unwrap(),
41            last_executed_checkpoint_timestamp_ms: register_int_gauge_with_registry!(
42                "last_executed_checkpoint_timestamp_ms",
43                "Last executed checkpoint timestamp ms",
44                registry
45            )
46            .unwrap(),
47            checkpoint_exec_errors: register_int_counter_with_registry!(
48                "checkpoint_exec_errors",
49                "Checkpoint execution errors count",
50                registry
51            )
52            .unwrap(),
53            checkpoint_exec_epoch: register_int_gauge_with_registry!(
54                "checkpoint_exec_epoch",
55                "Current epoch number in the checkpoint executor",
56                registry
57            )
58            .unwrap(),
59            checkpoint_exec_inflight: register_int_gauge_with_registry!(
60                "checkpoint_exec_inflight",
61                "Current number of inflight checkpoints being executed",
62                registry
63            )
64            .unwrap(),
65            checkpoint_exec_latency: register_histogram_with_registry!(
66                "checkpoint_exec_latency",
67                "Latency of executing a checkpoint from enqueue to all effects available",
68                iota_metrics::SUBSECOND_LATENCY_SEC_BUCKETS.to_vec(),
69                registry,
70            )
71            .unwrap(),
72            checkpoint_prepare_latency: register_histogram_with_registry!(
73                "checkpoint_prepare_latency",
74                "Latency of preparing a checkpoint to enqueue for execution",
75                iota_metrics::SUBSECOND_LATENCY_SEC_BUCKETS.to_vec(),
76                registry,
77            )
78            .unwrap(),
79            checkpoint_transaction_count: register_histogram_with_registry!(
80                "checkpoint_transaction_count",
81                "Number of transactions in the checkpoint",
82                iota_metrics::COUNT_BUCKETS.to_vec(),
83                registry,
84            )
85            .unwrap(),
86            checkpoint_contents_age: register_histogram_with_registry!(
87                "checkpoint_contents_age",
88                "Age of checkpoints when they arrive for execution",
89                iota_metrics::LATENCY_SEC_BUCKETS.to_vec(),
90                registry,
91            )
92            .unwrap(),
93            last_executed_checkpoint_age: register_histogram_with_registry!(
94                "last_executed_checkpoint_age",
95                "Age of the last executed checkpoint",
96                iota_metrics::LATENCY_SEC_BUCKETS.to_vec(),
97                registry
98            )
99            .unwrap(),
100        };
101        Arc::new(this)
102    }
103
104    pub fn new_for_tests() -> Arc<Self> {
105        Self::new(&Registry::new())
106    }
107}