11use std:: sync:: Arc ;
22
3- use tokio:: task :: JoinHandle ;
3+ use tokio:: sync :: broadcast :: Receiver ;
44
5- use super :: event:: listener:: dispatch_events;
6- use super :: repository:: Repository ;
75use crate :: event:: sender:: { self , Broadcaster } ;
8- use crate :: HTTP_TRACKER_LOG_TARGET ;
6+ use crate :: event :: Event ;
97
10- /// The service responsible for keeping tracker metrics (listening to statistics events and handle them).
11- ///
12- /// It actively listen to new statistics events. When it receives a new event
13- /// it accordingly increases the counters.
148pub struct Keeper {
159 pub enable_sender : bool ,
1610 pub broadcaster : Broadcaster ,
17- pub repository : Arc < Repository > ,
1811}
1912
2013impl Default for Keeper {
2114 fn default ( ) -> Self {
2215 let enable_sender = true ;
2316 let broadcaster = Broadcaster :: default ( ) ;
24- let repository = Arc :: new ( Repository :: new ( ) ) ;
2517
26- Self :: new ( enable_sender, broadcaster, repository )
18+ Self :: new ( enable_sender, broadcaster)
2719 }
2820}
2921
3022impl Keeper {
31- /// Creates a new instance of [`Keeper`].
3223 #[ must_use]
33- pub fn new ( enable_sender : bool , broadcaster : Broadcaster , repository : Arc < Repository > ) -> Self {
24+ pub fn new ( enable_sender : bool , broadcaster : Broadcaster ) -> Self {
3425 Self {
3526 enable_sender,
3627 broadcaster,
37- repository,
3828 }
3929 }
4030
@@ -48,37 +38,7 @@ impl Keeper {
4838 }
4939
5040 #[ must_use]
51- pub fn repository ( & self ) -> Arc < Repository > {
52- self . repository . clone ( )
53- }
54-
55- #[ must_use]
56- pub fn run_event_listener ( & self ) -> JoinHandle < ( ) > {
57- let stats_repository = self . repository . clone ( ) ;
58- let receiver = self . broadcaster . subscribe ( ) ;
59-
60- tracing:: info!( target: HTTP_TRACKER_LOG_TARGET , "Starting HTTP tracker core event listener" ) ;
61-
62- tokio:: spawn ( async move {
63- dispatch_events ( receiver, stats_repository) . await ;
64-
65- tracing:: info!( target: HTTP_TRACKER_LOG_TARGET , "HTTP tracker core event listener finished" ) ;
66- } )
67- }
68- }
69-
70- #[ cfg( test) ]
71- mod tests {
72-
73- use crate :: statistics:: keeper:: Keeper ;
74- use crate :: statistics:: metrics:: Metrics ;
75-
76- #[ tokio:: test]
77- async fn should_contain_the_tracker_statistics ( ) {
78- let stats_tracker = Keeper :: default ( ) ;
79-
80- let stats = stats_tracker. repository . get_stats ( ) . await ;
81-
82- assert_eq ! ( stats. tcp4_announces_handled, Metrics :: default ( ) . tcp4_announces_handled) ;
41+ pub fn receiver ( & self ) -> Receiver < Event > {
42+ self . broadcaster . subscribe ( )
8343 }
8444}
0 commit comments