fuel_core_metrics/
core_metrics.rs1use crate::global_registry;
2use prometheus_client::metrics::counter::Counter;
3use std::collections::HashMap;
4
5#[derive(Debug)]
6pub struct DatabaseMetrics {
7 pub write_meter: Counter,
9 pub read_meter: Counter,
10 pub bytes_written: Counter,
11 pub bytes_read: Counter,
12 pub database_commit_time: Counter,
13 pub columns_read_statistic: HashMap<u32, Counter>,
14 pub columns_write_statistic: HashMap<u32, Counter>,
15}
16
17impl DatabaseMetrics {
18 pub fn new(name: &str, columns: &[(u32, String)]) -> Self {
19 let mut registry = global_registry().registry.lock();
20
21 let columns_read_statistic = columns
22 .iter()
23 .map(|(column_id, column_name)| {
24 let counter: Counter = Counter::default();
25 registry.register(
26 format!("{}_Column_{}_Reads", name, column_name),
27 format!(
28 "Number of {} read operations on column {}",
29 name, column_name
30 ),
31 counter.clone(),
32 );
33 (*column_id, counter)
34 })
35 .collect();
36
37 let columns_write_statistic = columns
38 .iter()
39 .map(|(column_id, column_name)| {
40 let counter: Counter = Counter::default();
41 registry.register(
42 format!("{}_Column_{}_Writes", name, column_name),
43 format!(
44 "Number of {} write operations on column {}",
45 name, column_name
46 ),
47 counter.clone(),
48 );
49 (*column_id, counter)
50 })
51 .collect();
52
53 let write_meter: Counter = Counter::default();
54 let read_meter: Counter = Counter::default();
55 let bytes_written = Counter::default();
56 let bytes_read = Counter::default();
57 let database_commit_time: Counter = Counter::default();
58
59 registry.register(
60 format!("{}_Database_Writes", name),
61 format!("Number of {} database write operations", name),
62 write_meter.clone(),
63 );
64 registry.register(
65 format!("{}_Database_Reads", name),
66 format!("Number of {} database read operations", name),
67 read_meter.clone(),
68 );
69 registry.register(
70 format!("{}_Bytes_Read", name),
71 format!("The total amount of read bytes from {}", name),
72 bytes_read.clone(),
73 );
74 registry.register(
75 format!("{}_Bytes_Written", name),
76 format!("The total amount of written bytes into {}", name),
77 bytes_written.clone(),
78 );
79 registry.register(
80 format!("{}_Database_Commit_Time", name),
81 format!(
82 "The total commit time of the {} database including all sub-databases",
83 name
84 ),
85 database_commit_time.clone(),
86 );
87
88 DatabaseMetrics {
89 write_meter,
90 read_meter,
91 bytes_read,
92 bytes_written,
93 database_commit_time,
94 columns_read_statistic,
95 columns_write_statistic,
96 }
97 }
98}