fuel_metrics/
service.rs

1use crate::{
2    p2p_metrics::P2P_METRICS,
3    txpool_metrics::TXPOOL_METRICS,
4};
5use axum::{
6    body::Body,
7    response::{
8        IntoResponse,
9        Response,
10    },
11};
12use prometheus_client::encoding::text::encode;
13use std::vec;
14
15pub fn encode_metrics_response() -> impl IntoResponse {
16    let mut encoded = vec![];
17
18    if let Option::Some(value) = P2P_METRICS.gossip_sub_registry.get() {
19        if encode(&mut encoded, value).is_err() {
20            return Response::builder()
21                .status(503)
22                .body(Body::from(""))
23                .unwrap()
24        }
25    }
26    if encode(&mut encoded, &P2P_METRICS.peer_metrics).is_err() {
27        return Response::builder()
28            .status(503)
29            .body(Body::from(""))
30            .unwrap()
31    }
32    if encode(&mut encoded, &TXPOOL_METRICS.registry).is_err() {
33        return Response::builder()
34            .status(503)
35            .body(Body::from(""))
36            .unwrap()
37    }
38
39    Response::builder()
40        .status(200)
41        .body(Body::from(encoded))
42        .unwrap()
43}