1
1
use super :: common:: { default_metrics_server_hostname, default_metrics_server_port} ;
2
- use poem:: http:: StatusCode ;
3
- use poem:: { get, handler, listener:: TcpListener , IntoResponse , Route , Server } ;
4
- use prometheus:: { gather, Encoder , TextEncoder } ;
5
2
use serde:: { Deserialize , Serialize } ;
6
- use tokio:: task:: JoinHandle ;
7
3
8
4
#[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
9
5
pub struct MetricsConfig {
@@ -21,44 +17,3 @@ impl Default for MetricsConfig {
21
17
}
22
18
}
23
19
}
24
-
25
- impl MetricsConfig {
26
- pub async fn start_metrics_server ( & self ) -> Result < JoinHandle < ( ) > , anyhow:: Error > {
27
- let bind_address = format ! ( "{}:{}" , self . listen_hostname, self . listen_port) ;
28
-
29
- let metrics_route = Route :: new ( ) . at ( "/metrics" , get ( metrics_handler) ) ;
30
-
31
- let server_handle = tokio:: spawn ( async move {
32
- let listener = TcpListener :: bind ( & bind_address) ;
33
- tracing:: info!( "Starting Prometheus metrics server on http://{}/metrics" , bind_address) ;
34
-
35
- if let Err ( e) = Server :: new ( listener) . run ( metrics_route) . await {
36
- tracing:: error!( "Metrics server error: {}" , e) ;
37
- }
38
- } ) ;
39
-
40
- Ok ( server_handle)
41
- }
42
- }
43
-
44
- #[ handler]
45
- async fn metrics_handler ( ) -> impl IntoResponse {
46
- let metrics = gather ( ) ;
47
- let encoder = TextEncoder :: new ( ) ;
48
- let mut buffer = vec ! [ ] ;
49
-
50
- match encoder. encode ( & metrics, & mut buffer) {
51
- Ok ( _) => match String :: from_utf8 ( buffer) {
52
- Ok ( metrics_text) => poem:: Response :: builder ( )
53
- . status ( StatusCode :: OK )
54
- . header ( "content-type" , "text/plain" )
55
- . body ( metrics_text) ,
56
- Err ( _) => poem:: Response :: builder ( )
57
- . status ( StatusCode :: INTERNAL_SERVER_ERROR )
58
- . body ( "Error encoding metrics" ) ,
59
- } ,
60
- Err ( _) => poem:: Response :: builder ( )
61
- . status ( StatusCode :: INTERNAL_SERVER_ERROR )
62
- . body ( "Error gathering metrics" ) ,
63
- }
64
- }
0 commit comments