1use metrics::{counter, gauge, histogram, Label};
2use std::sync::Arc;
34/// Represents a type that can report metrics, used mainly with the database. The `report_metrics`
5/// method can be used as a prometheus hook.
6pub trait DatabaseMetrics {
7/// Reports metrics for the database.
8fn report_metrics(&self) {
9for (name, value, labels) in self.gauge_metrics() {
10gauge!(name, labels).set(value);
11 }
1213for (name, value, labels) in self.counter_metrics() {
14counter!(name, labels).increment(value);
15 }
1617for (name, value, labels) in self.histogram_metrics() {
18histogram!(name, labels).record(value);
19 }
20 }
2122/// Returns a list of [Gauge](metrics::Gauge) metrics for the database.
23fn gauge_metrics(&self) -> Vec<(&'static str, f64, Vec<Label>)> {
24vec![]
25 }
2627/// Returns a list of [Counter](metrics::Counter) metrics for the database.
28fn counter_metrics(&self) -> Vec<(&'static str, u64, Vec<Label>)> {
29vec![]
30 }
3132/// Returns a list of [Histogram](metrics::Histogram) metrics for the database.
33fn histogram_metrics(&self) -> Vec<(&'static str, f64, Vec<Label>)> {
34vec![]
35 }
36}
3738impl<DB: DatabaseMetrics> DatabaseMetricsfor Arc<DB> {
39fn report_metrics(&self) {
40 <DB as DatabaseMetrics>::report_metrics(self)
41 }
42}