fuel_metrics/
core_metrics.rs1use 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 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}