Skip to main content

btcnode_metrics/
service.rs

1use crate::{MetricsCollector, NodeClient};
2use prometheus::Encoder;
3use prometheus::TextEncoder;
4
5pub struct MetricsService<N: NodeClient> {
6    collector: MetricsCollector<N>,
7}
8
9impl<N: NodeClient> MetricsService<N> {
10    pub fn new(collector: MetricsCollector<N>) -> Self {
11        Self { collector }
12    }
13
14    pub fn scrape(&self) -> String {
15        self.collector.collect();
16
17        let encoder = TextEncoder::new();
18        let metric_families = self.collector.metrics().registry.gather();
19        let mut buffer = Vec::new();
20        encoder.encode(&metric_families, &mut buffer).expect("encoding metrics should not fail");
21        String::from_utf8(buffer).expect("prometheus text format is valid UTF-8")
22    }
23}