reth_db_api/
database_metrics.rs1use metrics::{counter, gauge, histogram, Label};
2use std::sync::Arc;
3
4pub trait DatabaseMetrics {
7 fn report_metrics(&self) {
9 for (name, value, labels) in self.gauge_metrics() {
10 gauge!(name, labels).set(value);
11 }
12
13 for (name, value, labels) in self.counter_metrics() {
14 counter!(name, labels).increment(value);
15 }
16
17 for (name, value, labels) in self.histogram_metrics() {
18 histogram!(name, labels).record(value);
19 }
20 }
21
22 fn gauge_metrics(&self) -> Vec<(&'static str, f64, Vec<Label>)> {
24 vec![]
25 }
26
27 fn counter_metrics(&self) -> Vec<(&'static str, u64, Vec<Label>)> {
29 vec![]
30 }
31
32 fn histogram_metrics(&self) -> Vec<(&'static str, f64, Vec<Label>)> {
34 vec![]
35 }
36}
37
38impl<DB: DatabaseMetrics> DatabaseMetrics for Arc<DB> {
39 fn report_metrics(&self) {
40 <DB as DatabaseMetrics>::report_metrics(self)
41 }
42}
43
44#[derive(Debug, Default)]
46pub struct DatabaseMetadataValue {
47 freelist_size: Option<usize>,
49}
50
51impl DatabaseMetadataValue {
52 pub const fn new(freelist_size: Option<usize>) -> Self {
54 Self { freelist_size }
55 }
56
57 pub const fn freelist_size(&self) -> Option<usize> {
59 self.freelist_size
60 }
61}
62
63pub trait DatabaseMetadata {
66 fn metadata(&self) -> DatabaseMetadataValue;
68}
69
70impl<DB: DatabaseMetadata> DatabaseMetadata for Arc<DB> {
71 fn metadata(&self) -> DatabaseMetadataValue {
72 <DB as DatabaseMetadata>::metadata(self)
73 }
74}