sui_analytics_indexer/
analytics_metrics.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3#![allow(dead_code)]
4use prometheus::{
5    HistogramOpts, HistogramVec, IntCounterVec, IntGaugeVec, Registry,
6    register_histogram_vec_with_registry, register_int_counter_vec_with_registry,
7    register_int_gauge_vec_with_registry,
8};
9
10#[derive(Clone)]
11pub struct AnalyticsMetrics {
12    pub total_received: IntCounterVec,
13    pub last_uploaded_checkpoint: IntGaugeVec,
14    pub max_checkpoint_on_store: IntGaugeVec,
15    pub total_too_large_to_deserialize: IntCounterVec,
16    pub file_size_bytes: HistogramVec,
17}
18
19impl AnalyticsMetrics {
20    pub fn new(registry: &Registry) -> Self {
21        Self {
22            total_received: register_int_counter_vec_with_registry!(
23                "total_received",
24                "Number of checkpoints received",
25                &["data_type"],
26                registry
27            )
28            .unwrap(),
29            last_uploaded_checkpoint: register_int_gauge_vec_with_registry!(
30                "last_uploaded_checkpoint",
31                "Number of uploaded checkpoints.",
32                &["data_type"],
33                registry,
34            )
35            .unwrap(),
36            max_checkpoint_on_store: register_int_gauge_vec_with_registry!(
37                "max_checkpoint_on_store",
38                "Max checkpoint on the db table.",
39                &["data_type"],
40                registry,
41            )
42            .unwrap(),
43            total_too_large_to_deserialize: register_int_counter_vec_with_registry!(
44                "total_too_large_to_deserialize",
45                "Total number of rows skipped due to size.",
46                &["data_type"],
47                registry,
48            )
49            .unwrap(),
50            file_size_bytes: register_histogram_vec_with_registry!(
51                HistogramOpts::new("file_size_bytes", "Size of generated files in bytes.",)
52                    .buckets(vec![
53                        1_000.0,         // 1 KB
54                        10_000.0,        // 10 KB
55                        100_000.0,       // 100 KB
56                        1_000_000.0,     // 1 MB
57                        10_000_000.0,    // 10 MB
58                        50_000_000.0,    // 50 MB
59                        100_000_000.0,   // 100 MB
60                        250_000_000.0,   // 250 MB
61                        500_000_000.0,   // 500 MB
62                        1_000_000_000.0, // 1 GB
63                        2_000_000_000.0, // 2 GB
64                    ]),
65                &["source"],
66                registry,
67            )
68            .unwrap(),
69        }
70    }
71}