Skip to content

Commit

Permalink
Merge #102: Make tracker statistics optional again
Browse files Browse the repository at this point in the history
e12d8e6 test: [#97] add test for optional statistics (Jose Celano)
adee3b5 fix: [#97] make tracker statistics optional again (Jose Celano)

Pull request description:

  Commit 7abe0f5 introduced an unwanted change. Thread for statistics is always created regardless configuration.

  This commit reverts that change. The config option:

  config.tracker_usage_statistics

  defines wether the statistics should be enabled or not.

ACKs for top commit:
  da2ce7:
    ACK e12d8e6

Tree-SHA512: 8c1e5ef18060adf9df80bdb416a860146a242f3d6cca3d53bd7eb7378a95cc70b514bde36fbded38e52c0fb3d9270df76758a4ec70831718edd4ad6670a2a164
  • Loading branch information
josecelano committed Oct 21, 2022
2 parents a3320be + e12d8e6 commit 97d3d8b
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ async fn main() {
};

// Initialize stats tracker
let stats_tracker = StatsTracker::new_running_instance();
let stats_tracker = StatsTracker::new_instance(config.tracker_usage_statistics);

// Initialize Torrust tracker
let tracker = match TorrentTracker::new(config.clone(), Box::new(stats_tracker)) {
Expand Down
51 changes: 48 additions & 3 deletions src/tracker/statistics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,24 @@ pub struct StatsTracker {
}

impl StatsTracker {
pub fn new_running_instance() -> Self {
let mut stats_tracker = Self::new();
stats_tracker.run_worker();
pub fn new_active_instance() -> Self {
Self::new_instance(true)
}

pub fn new_inactive_instance() -> Self {
Self::new_instance(false)
}

pub fn new_instance(active: bool) -> Self {
let mut stats_tracker = Self {
channel_sender: None,
stats: Arc::new(RwLock::new(TrackerStatistics::new())),
};

if active {
stats_tracker.run_worker();
}

stats_tracker
}

Expand Down Expand Up @@ -161,3 +176,33 @@ impl TrackerStatisticsRepository for StatsTracker {
pub trait TrackerStatsService: TrackerStatisticsEventSender + TrackerStatisticsRepository {}

impl TrackerStatsService for StatsTracker {}

#[cfg(test)]
mod test {

mod event_sender {
use crate::statistics::{StatsTracker, TrackerStatisticsEvent, TrackerStatisticsEventSender};

#[tokio::test]
async fn should_not_send_any_event_when_statistics_are_disabled() {
let tracker_usage_statistics = false;

let inactive_stats_tracker = StatsTracker::new_instance(tracker_usage_statistics);

let result = inactive_stats_tracker.send_event(TrackerStatisticsEvent::Tcp4Announce).await;

assert!(result.is_none());
}

#[tokio::test]
async fn should_send_events_when_statistics_are_enabled() {
let tracker_usage_statistics = true;

let active_stats_tracker = StatsTracker::new_instance(tracker_usage_statistics);

let result = active_stats_tracker.send_event(TrackerStatisticsEvent::Tcp4Announce).await;

assert!(result.is_some());
}
}
}
8 changes: 4 additions & 4 deletions src/udp/handlers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,17 +271,17 @@ mod tests {

fn initialized_public_tracker() -> Arc<TorrentTracker> {
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Public).into());
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_running_instance())).unwrap())
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap())
}

fn initialized_private_tracker() -> Arc<TorrentTracker> {
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Private).into());
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_running_instance())).unwrap())
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap())
}

fn initialized_whitelisted_tracker() -> Arc<TorrentTracker> {
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Listed).into());
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_running_instance())).unwrap())
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap())
}

fn sample_ipv4_remote_addr() -> SocketAddr {
Expand Down Expand Up @@ -970,7 +970,7 @@ mod tests {
async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration() {
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_external_ip("::126.0.0.1").into());
let tracker =
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_running_instance())).unwrap());
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap());

let loopback_ipv4 = Ipv4Addr::new(127, 0, 0, 1);
let loopback_ipv6 = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
Expand Down

0 comments on commit 97d3d8b

Please sign in to comment.