btcnode_metrics/
service.rs1use 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}