Skip to content

Commit 5b73d80

Browse files
committed
refactor: removed unused code and extract fn
- The StatsTracker does not need anymore the channel sender. - A setup function for statistics was extracted.
1 parent 720a584 commit 5b73d80

File tree

4 files changed

+41
-58
lines changed

4 files changed

+41
-58
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub mod jobs;
1414
pub mod logging;
1515
pub mod protocol;
1616
pub mod setup;
17+
pub mod stats;
1718
pub mod tracker;
1819
pub mod udp;
1920

src/main.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::sync::Arc;
22

33
use log::info;
4-
use torrust_tracker::tracker::statistics::StatsTracker;
4+
use torrust_tracker::stats::setup_statistics;
55
use torrust_tracker::tracker::tracker::TorrentTracker;
66
use torrust_tracker::{ephemeral_instance_keys, logging, setup, static_time, Configuration};
77

@@ -23,14 +23,8 @@ async fn main() {
2323
}
2424
};
2525

26-
// Initialize stats tracker
27-
let mut stats_tracker = StatsTracker::new_inactive_instance();
28-
29-
let mut stats_event_sender = None;
30-
31-
if config.tracker_usage_statistics {
32-
stats_event_sender = Some(stats_tracker.run_worker());
33-
}
26+
// Initialize statistics:wq
27+
let (stats_tracker, stats_event_sender) = setup_statistics(config.tracker_usage_statistics);
3428

3529
// Initialize Torrust tracker
3630
let tracker = match TorrentTracker::new(config.clone(), Box::new(stats_tracker), stats_event_sender) {

src/stats.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use crate::statistics::{StatsTracker, TrackerStatisticsEventSender};
2+
3+
pub fn setup_statistics(tracker_usage_statistics: bool) -> (StatsTracker, Option<Box<dyn TrackerStatisticsEventSender>>) {
4+
let mut stats_tracker = StatsTracker::new_inactive_instance();
5+
6+
let mut stats_event_sender = None;
7+
8+
if tracker_usage_statistics {
9+
stats_event_sender = Some(stats_tracker.run_worker());
10+
}
11+
12+
(stats_tracker, stats_event_sender)
13+
}
14+
15+
#[cfg(test)]
16+
mod test {
17+
use crate::stats::setup_statistics;
18+
19+
#[tokio::test]
20+
async fn should_not_send_any_event_when_statistics_are_disabled() {
21+
let tracker_usage_statistics = false;
22+
23+
let (_stats_tracker, stats_event_sender) = setup_statistics(tracker_usage_statistics);
24+
25+
assert!(stats_event_sender.is_none());
26+
}
27+
28+
#[tokio::test]
29+
async fn should_send_events_when_statistics_are_enabled() {
30+
let tracker_usage_statistics = true;
31+
32+
let (_stats_tracker, stats_event_sender) = setup_statistics(tracker_usage_statistics);
33+
34+
assert!(stats_event_sender.is_some());
35+
}
36+
}

src/tracker/statistics.rs

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,12 @@ impl TrackerStatistics {
5757
}
5858

5959
pub struct StatsTracker {
60-
channel_sender: Option<Sender<TrackerStatisticsEvent>>,
6160
pub stats: Arc<RwLock<TrackerStatistics>>,
6261
}
6362

6463
impl StatsTracker {
6564
pub fn new_active_instance() -> (Self, Box<dyn TrackerStatisticsEventSender>) {
6665
let mut stats_tracker = Self {
67-
channel_sender: None,
6866
stats: Arc::new(RwLock::new(TrackerStatistics::new())),
6967
};
7068

@@ -75,7 +73,6 @@ impl StatsTracker {
7573

7674
pub fn new_inactive_instance() -> Self {
7775
Self {
78-
channel_sender: None,
7976
stats: Arc::new(RwLock::new(TrackerStatistics::new())),
8077
}
8178
}
@@ -92,17 +89,13 @@ impl StatsTracker {
9289

9390
pub fn new() -> Self {
9491
Self {
95-
channel_sender: None,
9692
stats: Arc::new(RwLock::new(TrackerStatistics::new())),
9793
}
9894
}
9995

10096
pub fn run_worker(&mut self) -> Box<dyn TrackerStatisticsEventSender> {
10197
let (tx, mut rx) = mpsc::channel::<TrackerStatisticsEvent>(CHANNEL_BUFFER_SIZE);
10298

103-
// set send channel on stats_tracker
104-
self.channel_sender = Some(tx.clone());
105-
10699
let stats = self.stats.clone();
107100

108101
tokio::spawn(async move {
@@ -159,17 +152,6 @@ pub trait TrackerStatisticsEventSender: Sync + Send {
159152
async fn send_event(&self, event: TrackerStatisticsEvent) -> Option<Result<(), SendError<TrackerStatisticsEvent>>>;
160153
}
161154

162-
#[async_trait]
163-
impl TrackerStatisticsEventSender for StatsTracker {
164-
async fn send_event(&self, event: TrackerStatisticsEvent) -> Option<Result<(), SendError<TrackerStatisticsEvent>>> {
165-
if let Some(tx) = &self.channel_sender {
166-
Some(tx.send(event).await)
167-
} else {
168-
None
169-
}
170-
}
171-
}
172-
173155
pub struct StatsEventSender {
174156
sender: Sender<TrackerStatisticsEvent>,
175157
}
@@ -193,36 +175,6 @@ impl TrackerStatisticsRepository for StatsTracker {
193175
}
194176
}
195177

196-
pub trait TrackerStatsService: TrackerStatisticsEventSender + TrackerStatisticsRepository {}
178+
pub trait TrackerStatsService: TrackerStatisticsRepository {}
197179

198180
impl TrackerStatsService for StatsTracker {}
199-
200-
#[cfg(test)]
201-
mod test {
202-
203-
mod event_sender {
204-
use crate::statistics::{StatsTracker, TrackerStatisticsEvent, TrackerStatisticsEventSender};
205-
206-
#[tokio::test]
207-
async fn should_not_send_any_event_when_statistics_are_disabled() {
208-
let tracker_usage_statistics = false;
209-
210-
let inactive_stats_tracker = StatsTracker::new_instance(tracker_usage_statistics);
211-
212-
let result = inactive_stats_tracker.send_event(TrackerStatisticsEvent::Tcp4Announce).await;
213-
214-
assert!(result.is_none());
215-
}
216-
217-
#[tokio::test]
218-
async fn should_send_events_when_statistics_are_enabled() {
219-
let tracker_usage_statistics = true;
220-
221-
let active_stats_tracker = StatsTracker::new_instance(tracker_usage_statistics);
222-
223-
let result = active_stats_tracker.send_event(TrackerStatisticsEvent::Tcp4Announce).await;
224-
225-
assert!(result.is_some());
226-
}
227-
}
228-
}

0 commit comments

Comments
 (0)