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 iota_metrics::histogram::Histogram;
8use prometheus::{
9    IntCounter, IntGauge, Registry, register_int_counter_with_registry,
10    register_int_gauge_with_registry,
11};
12
13pub struct CheckpointExecutorMetrics {
14    pub checkpoint_exec_sync_tps: IntGauge,
15    pub last_executed_checkpoint: IntGauge,
16    pub last_executed_checkpoint_timestamp_ms: IntGauge,
17    pub checkpoint_exec_errors: IntCounter,
18    pub checkpoint_exec_epoch: IntGauge,
19    pub checkpoint_exec_inflight: IntGauge,
20    pub checkpoint_exec_latency_us: Histogram,
21    pub checkpoint_prepare_latency_us: Histogram,
22    pub checkpoint_transaction_count: Histogram,
23    pub checkpoint_contents_age_ms: Histogram,
24    pub last_executed_checkpoint_age_ms: Histogram,
25}
26
27impl CheckpointExecutorMetrics {
28    pub fn new(registry: &Registry) -> Arc<Self> {
29        let this = Self {
30            checkpoint_exec_sync_tps: register_int_gauge_with_registry!(
31                "checkpoint_exec_sync_tps",
32                "Checkpoint sync estimated transactions per second",
33                registry
34            )
35            .unwrap(),
36            last_executed_checkpoint: register_int_gauge_with_registry!(
37                "last_executed_checkpoint",
38                "Last executed checkpoint",
39                registry
40            )
41            .unwrap(),
42            last_executed_checkpoint_timestamp_ms: register_int_gauge_with_registry!(
43                "last_executed_checkpoint_timestamp_ms",
44                "Last executed checkpoint timestamp ms",
45                registry
46            )
47            .unwrap(),
48            checkpoint_exec_errors: register_int_counter_with_registry!(
49                "checkpoint_exec_errors",
50                "Checkpoint execution errors count",
51                registry
52            )
53            .unwrap(),
54            checkpoint_exec_epoch: register_int_gauge_with_registry!(
55                "checkpoint_exec_epoch",
56                "Current epoch number in the checkpoint executor",
57                registry
58            )
59            .unwrap(),
60            checkpoint_exec_inflight: register_int_gauge_with_registry!(
61                "checkpoint_exec_inflight",
62                "Current number of inflight checkpoints being executed",
63                registry
64            )
65            .unwrap(),
66            checkpoint_exec_latency_us: Histogram::new_in_registry(
67                "checkpoint_exec_latency_us",
68                "Latency of executing a checkpoint from enqueue to all effects available, in microseconds",
69                registry,
70            ),
71            checkpoint_prepare_latency_us: Histogram::new_in_registry(
72                "checkpoint_prepare_latency_us",
73                "Latency of preparing a checkpoint to enqueue for execution, in microseconds",
74                registry,
75            ),
76            checkpoint_transaction_count: Histogram::new_in_registry(
77                "checkpoint_transaction_count",
78                "Number of transactions in the checkpoint",
79                registry,
80            ),
81            checkpoint_contents_age_ms: Histogram::new_in_registry(
82                "checkpoint_contents_age_ms",
83                "Age of checkpoints when they arrive for execution",
84                registry,
85            ),
86            last_executed_checkpoint_age_ms: Histogram::new_in_registry(
87                "last_executed_checkpoint_age_ms",
88                "Age of the last executed checkpoint",
89                registry,
90            ),
91        };
92        Arc::new(this)
93    }
94
95    pub fn new_for_tests() -> Arc<Self> {
96        Self::new(&Registry::new())
97    }
98}