@@ -40,6 +40,12 @@ pub struct TrackerStatistics {
4040 pub udp6_scrapes_handled : u64 ,
4141}
4242
43+ impl Default for TrackerStatistics {
44+ fn default ( ) -> Self {
45+ Self :: new ( )
46+ }
47+ }
48+
4349impl TrackerStatistics {
4450 pub fn new ( ) -> Self {
4551 Self {
@@ -60,56 +66,44 @@ impl TrackerStatistics {
6066}
6167
6268pub struct StatsTracker {
63- pub stats : Arc < RwLock < TrackerStatistics > > ,
69+ pub stats_repository : StatsRepository ,
6470}
6571
66- impl StatsTracker {
67- pub fn new_active_instance ( ) -> ( Self , Box < dyn TrackerStatisticsEventSender > ) {
68- let mut stats_tracker = Self {
69- stats : Arc :: new ( RwLock :: new ( TrackerStatistics :: new ( ) ) ) ,
70- } ;
71-
72- let stats_event_sender = stats_tracker. run_worker ( ) ;
73-
74- ( stats_tracker, stats_event_sender)
75- }
76-
77- pub fn new_inactive_instance ( ) -> Self {
78- Self {
79- stats : Arc :: new ( RwLock :: new ( TrackerStatistics :: new ( ) ) ) ,
80- }
72+ impl Default for StatsTracker {
73+ fn default ( ) -> Self {
74+ Self :: new ( )
8175 }
76+ }
8277
83- pub fn new_instance ( active : bool ) -> Self {
84- if !active {
85- return Self :: new_inactive_instance ( ) ;
86- }
78+ impl StatsTracker {
79+ pub fn new_active_instance ( ) -> ( Box < dyn TrackerStatisticsEventSender > , StatsRepository ) {
80+ let mut stats_tracker = Self :: new ( ) ;
8781
88- let ( stats_tracker , _stats_event_sender ) = Self :: new_active_instance ( ) ;
82+ let stats_event_sender = stats_tracker . run_event_listener ( ) ;
8983
90- stats_tracker
84+ ( stats_event_sender , stats_tracker. stats_repository )
9185 }
9286
9387 pub fn new ( ) -> Self {
9488 Self {
95- stats : Arc :: new ( RwLock :: new ( TrackerStatistics :: new ( ) ) ) ,
89+ stats_repository : StatsRepository :: new ( ) ,
9690 }
9791 }
9892
99- pub fn run_worker ( & mut self ) -> Box < dyn TrackerStatisticsEventSender > {
100- let ( tx , rx ) = mpsc:: channel :: < TrackerStatisticsEvent > ( CHANNEL_BUFFER_SIZE ) ;
93+ pub fn run_event_listener ( & mut self ) -> Box < dyn TrackerStatisticsEventSender > {
94+ let ( sender , receiver ) = mpsc:: channel :: < TrackerStatisticsEvent > ( CHANNEL_BUFFER_SIZE ) ;
10195
102- let stats = self . stats . clone ( ) ;
96+ let stats_repository = self . stats_repository . clone ( ) ;
10397
104- tokio:: spawn ( async move { event_listener ( rx , stats ) . await } ) ;
98+ tokio:: spawn ( async move { event_listener ( receiver , stats_repository ) . await } ) ;
10599
106- Box :: new ( StatsEventSender { sender : tx } )
100+ Box :: new ( StatsEventSender { sender } )
107101 }
108102}
109103
110- async fn event_listener ( mut rx : Receiver < TrackerStatisticsEvent > , stats : Arc < RwLock < TrackerStatistics > > ) {
111- while let Some ( event) = rx . recv ( ) . await {
112- let mut stats_lock = stats. write ( ) . await ;
104+ async fn event_listener ( mut receiver : Receiver < TrackerStatisticsEvent > , stats_repository : StatsRepository ) {
105+ while let Some ( event) = receiver . recv ( ) . await {
106+ let mut stats_lock = stats_repository . stats . write ( ) . await ;
113107
114108 match event {
115109 TrackerStatisticsEvent :: Tcp4Announce => {
@@ -171,18 +165,25 @@ impl TrackerStatisticsEventSender for StatsEventSender {
171165 }
172166}
173167
174- #[ async_trait ]
175- pub trait TrackerStatisticsRepository : Sync + Send {
176- async fn get_stats ( & self ) -> RwLockReadGuard < ' _ , TrackerStatistics > ;
168+ #[ derive ( Clone ) ]
169+ pub struct StatsRepository {
170+ pub stats : Arc < RwLock < TrackerStatistics > > ,
177171}
178172
179- #[ async_trait]
180- impl TrackerStatisticsRepository for StatsTracker {
181- async fn get_stats ( & self ) -> RwLockReadGuard < ' _ , TrackerStatistics > {
182- self . stats . read ( ) . await
173+ impl Default for StatsRepository {
174+ fn default ( ) -> Self {
175+ Self :: new ( )
183176 }
184177}
185178
186- pub trait TrackerStatsService : TrackerStatisticsRepository { }
179+ impl StatsRepository {
180+ pub fn new ( ) -> Self {
181+ Self {
182+ stats : Arc :: new ( RwLock :: new ( TrackerStatistics :: new ( ) ) ) ,
183+ }
184+ }
187185
188- impl TrackerStatsService for StatsTracker { }
186+ pub async fn get_stats ( & self ) -> RwLockReadGuard < ' _ , TrackerStatistics > {
187+ self . stats . read ( ) . await
188+ }
189+ }
0 commit comments