@@ -29,9 +29,12 @@ pub mod ohttp_relay;
2929use crate :: metrics:: MetricsService ;
3030use crate :: middleware:: { track_connections, track_metrics} ;
3131
32+ type DirectoryService =
33+ crate :: directory:: Service < crate :: db:: MetricsDb < crate :: db:: DbServiceAdapter > > ;
34+
3235#[ derive( Clone ) ]
3336struct Services {
34- directory : crate :: directory :: Service < crate :: db :: DbServiceAdapter > ,
37+ directory : DirectoryService ,
3538 relay : crate :: ohttp_relay:: Service ,
3639 metrics : MetricsService ,
3740 #[ cfg( feature = "access-control" ) ]
@@ -40,16 +43,17 @@ struct Services {
4043
4144pub async fn serve ( config : Config , meter_provider : Option < SdkMeterProvider > ) -> anyhow:: Result < ( ) > {
4245 let sentinel_tag = generate_sentinel_tag ( ) ;
46+ let metrics = MetricsService :: new ( meter_provider) ;
4347
4448 #[ cfg( feature = "access-control" ) ]
4549 let geoip = init_geoip ( & config) . await ?;
4650
47- let directory = init_directory ( & config, sentinel_tag) . await ?;
51+ let directory = init_directory ( & config, sentinel_tag, & metrics ) . await ?;
4852
4953 let services = Services {
5054 directory,
5155 relay : crate :: ohttp_relay:: Service :: new ( sentinel_tag) . await ,
52- metrics : MetricsService :: new ( meter_provider ) ,
56+ metrics,
5357 #[ cfg( feature = "access-control" ) ]
5458 geoip,
5559 } ;
@@ -84,11 +88,12 @@ pub async fn serve_manual_tls(
8488 use std:: net:: SocketAddr ;
8589
8690 let sentinel_tag = generate_sentinel_tag ( ) ;
91+ let metrics = MetricsService :: new ( None ) ;
8792
8893 #[ cfg( feature = "access-control" ) ]
8994 let geoip = init_geoip ( & config) . await ?;
9095
91- let directory = init_directory ( & config, sentinel_tag) . await ?;
96+ let directory = init_directory ( & config, sentinel_tag, & metrics ) . await ?;
9297
9398 let services = Services {
9499 directory,
@@ -98,7 +103,7 @@ pub async fn serve_manual_tls(
98103 default_gateway,
99104 )
100105 . await ,
101- metrics : MetricsService :: new ( None ) ,
106+ metrics,
102107 #[ cfg( feature = "access-control" ) ]
103108 geoip,
104109 } ;
@@ -153,16 +158,17 @@ pub async fn serve_acme(
153158 . ok_or_else ( || anyhow:: anyhow!( "ACME configuration is required for serve_acme" ) ) ?;
154159
155160 let sentinel_tag = generate_sentinel_tag ( ) ;
161+ let metrics = MetricsService :: new ( meter_provider) ;
156162
157163 #[ cfg( feature = "access-control" ) ]
158164 let geoip = init_geoip ( & config) . await ?;
159165
160- let directory = init_directory ( & config, sentinel_tag) . await ?;
166+ let directory = init_directory ( & config, sentinel_tag, & metrics ) . await ?;
161167
162168 let services = Services {
163169 directory,
164170 relay : crate :: ohttp_relay:: Service :: new ( sentinel_tag) . await ,
165- metrics : MetricsService :: new ( meter_provider ) ,
171+ metrics,
166172 #[ cfg( feature = "access-control" ) ]
167173 geoip,
168174 } ;
@@ -220,10 +226,11 @@ impl Connected<IncomingStream<'_, Listener>> for middleware::MaybePeerIp {
220226async fn init_directory (
221227 config : & Config ,
222228 sentinel_tag : SentinelTag ,
223- ) -> anyhow:: Result < crate :: directory:: Service < crate :: db:: DbServiceAdapter > > {
229+ metrics : & MetricsService ,
230+ ) -> anyhow:: Result < DirectoryService > {
224231 let files_db = crate :: db:: FilesDb :: init ( config. timeout , config. storage_dir . clone ( ) ) . await ?;
225232 files_db. spawn_background_prune ( ) . await ;
226- let db = crate :: db:: DbServiceAdapter :: new ( files_db) ;
233+ let db = crate :: db:: MetricsDb :: new ( crate :: db :: DbServiceAdapter :: new ( files_db) , metrics . clone ( ) ) ;
227234
228235 let ohttp_keys_dir = config. storage_dir . join ( "ohttp-keys" ) ;
229236 let ohttp_config = init_ohttp_config ( & ohttp_keys_dir) ?;
@@ -538,10 +545,11 @@ mod tests {
538545 ) ;
539546
540547 let sentinel_tag = generate_sentinel_tag ( ) ;
548+ let metrics = MetricsService :: new ( Some ( provider. clone ( ) ) ) ;
541549 let services = Services {
542- directory : init_directory ( & config, sentinel_tag) . await . unwrap ( ) ,
550+ directory : init_directory ( & config, sentinel_tag, & metrics ) . await . unwrap ( ) ,
543551 relay : crate :: ohttp_relay:: Service :: new ( sentinel_tag) . await ,
544- metrics : MetricsService :: new ( Some ( provider . clone ( ) ) ) ,
552+ metrics,
545553 #[ cfg( feature = "access-control" ) ]
546554 geoip : None ,
547555 } ;
0 commit comments