@@ -22,10 +22,10 @@ use ldk_server_protos::endpoints::{
2222 BOLT11_CLAIM_FOR_HASH_PATH , BOLT11_FAIL_FOR_HASH_PATH , BOLT11_RECEIVE_FOR_HASH_PATH ,
2323 BOLT11_RECEIVE_PATH , BOLT11_SEND_PATH , BOLT12_RECEIVE_PATH , BOLT12_SEND_PATH ,
2424 CLOSE_CHANNEL_PATH , CONNECT_PEER_PATH , DISCONNECT_PEER_PATH , EXPORT_PATHFINDING_SCORES_PATH ,
25- FORCE_CLOSE_CHANNEL_PATH , GET_BALANCES_PATH , GET_NODE_INFO_PATH , GET_PAYMENT_DETAILS_PATH ,
26- GRAPH_GET_CHANNEL_PATH , GRAPH_GET_NODE_PATH , GRAPH_LIST_CHANNELS_PATH , GRAPH_LIST_NODES_PATH ,
27- LIST_CHANNELS_PATH , LIST_FORWARDED_PAYMENTS_PATH , LIST_PAYMENTS_PATH ,
28- LIST_PEERS_PATH , ONCHAIN_RECEIVE_PATH ,
25+ FORCE_CLOSE_CHANNEL_PATH , GET_BALANCES_PATH , GET_METRICS_PATH , GET_NODE_INFO_PATH ,
26+ GET_PAYMENT_DETAILS_PATH , GRAPH_GET_CHANNEL_PATH , GRAPH_GET_NODE_PATH ,
27+ GRAPH_LIST_CHANNELS_PATH , GRAPH_LIST_NODES_PATH , LIST_CHANNELS_PATH ,
28+ LIST_FORWARDED_PAYMENTS_PATH , LIST_PAYMENTS_PATH , LIST_PEERS_PATH , ONCHAIN_RECEIVE_PATH ,
2929 ONCHAIN_SEND_PATH , OPEN_CHANNEL_PATH , SIGN_MESSAGE_PATH , SPLICE_IN_PATH , SPLICE_OUT_PATH ,
3030 SPONTANEOUS_SEND_PATH , UPDATE_CHANNEL_CONFIG_PATH , VERIFY_SIGNATURE_PATH ,
3131} ;
@@ -76,13 +76,13 @@ pub struct NodeService {
7676 node : Arc < Node > ,
7777 paginated_kv_store : Arc < dyn PaginatedKVStore > ,
7878 api_key : String ,
79- metrics : Arc < Metrics > ,
79+ metrics : Option < Arc < Metrics > > ,
8080}
8181
8282impl NodeService {
8383 pub ( crate ) fn new (
8484 node : Arc < Node > , paginated_kv_store : Arc < dyn PaginatedKVStore > , api_key : String ,
85- metrics : Arc < Metrics > ,
85+ metrics : Option < Arc < Metrics > > ,
8686 ) -> Self {
8787 Self { node, paginated_kv_store, api_key, metrics }
8888 }
@@ -169,14 +169,26 @@ impl Service<Request<Incoming>> for NodeService {
169169
170170 fn call ( & self , req : Request < Incoming > ) -> Self :: Future {
171171 // Handle metrics endpoint separately to bypass auth and return plain text
172- if req. uri ( ) . path ( ) . len ( ) > 1 && & req. uri ( ) . path ( ) [ 1 ..] == GET_METRICS_PATH {
173- let metrics = Arc :: clone ( & self . metrics ) ;
174- return Box :: pin ( async move {
175- Ok ( Response :: builder ( )
176- . header ( "Content-Type" , "text/plain" )
177- . body ( Full :: new ( Bytes :: from ( metrics. gather_metrics ( ) ) ) )
178- . unwrap ( ) )
179- } ) ;
172+ if req. method ( ) == hyper:: Method :: GET
173+ && req. uri ( ) . path ( ) . len ( ) > 1
174+ && & req. uri ( ) . path ( ) [ 1 ..] == GET_METRICS_PATH
175+ {
176+ if let Some ( metrics) = & self . metrics {
177+ let metrics = Arc :: clone ( metrics) ;
178+ return Box :: pin ( async move {
179+ Ok ( Response :: builder ( )
180+ . header ( "Content-Type" , "text/plain" )
181+ . body ( Full :: new ( Bytes :: from ( metrics. gather_metrics ( ) ) ) )
182+ . unwrap ( ) )
183+ } ) ;
184+ } else {
185+ return Box :: pin ( async move {
186+ Ok ( Response :: builder ( )
187+ . status ( StatusCode :: NOT_FOUND )
188+ . body ( Full :: new ( Bytes :: from ( "Not Found" ) ) )
189+ . unwrap ( ) )
190+ } ) ;
191+ }
180192 }
181193
182194 // Extract auth params from headers (validation happens after body is read)
0 commit comments