fuel_metrics/
core_metrics.rs

1use lazy_static::lazy_static;
2use prometheus_client::{
3    metrics::{
4        counter::Counter,
5        histogram::Histogram,
6    },
7    registry::Registry,
8};
9
10pub struct DatabaseMetrics {
11    pub registry: Registry,
12    // For descriptions of each Counter, see the `new` function where each Counter/Histogram is initialized
13    pub write_meter: Counter,
14    pub read_meter: Counter,
15    pub bytes_written: Histogram,
16    pub bytes_read: Histogram,
17}
18
19impl DatabaseMetrics {
20    fn new() -> Self {
21        let registry = Registry::default();
22
23        let write_meter: Counter = Counter::default();
24        let read_meter: Counter = Counter::default();
25
26        let bytes_written = Vec::new();
27        let bytes_written_histogram = Histogram::new(bytes_written.into_iter());
28
29        let bytes_read = Vec::new();
30        let bytes_read_histogram = Histogram::new(bytes_read.into_iter());
31
32        DatabaseMetrics {
33            registry,
34            write_meter,
35            read_meter,
36            bytes_read: bytes_read_histogram,
37            bytes_written: bytes_written_histogram,
38        }
39    }
40}
41
42pub fn init(mut metrics: DatabaseMetrics) -> DatabaseMetrics {
43    metrics.registry.register(
44        "Database_Writes",
45        "Number of database write operations",
46        Box::new(metrics.write_meter.clone()),
47    );
48    metrics.registry.register(
49        "Database_Reads",
50        "Number of database read operations",
51        Box::new(metrics.read_meter.clone()),
52    );
53    metrics.registry.register(
54        "Bytes_Read",
55        "Histogram containing values of amount of bytes read per operation",
56        Box::new(metrics.bytes_read.clone()),
57    );
58    metrics.registry.register(
59        "Bytes_Written",
60        "Histogram containing values of amount of bytes written per operation",
61        Box::new(metrics.bytes_written.clone()),
62    );
63
64    metrics
65}
66
67lazy_static! {
68    pub static ref DATABASE_METRICS: DatabaseMetrics = {
69        let registry = DatabaseMetrics::new();
70
71        init(registry)
72    };
73}