|
422 | 422 | //! For example, the HTTP tracker would send an event like the following when it handles an `announce` request received from a peer using IP version 4. |
423 | 423 | //! |
424 | 424 | //! ```text |
425 | | -//! tracker.send_stats_event(statistics::event::Event::Tcp4Announce).await |
| 425 | +//! stats_event_sender.send_stats_event(statistics::event::Event::Tcp4Announce).await |
426 | 426 | //! ``` |
427 | 427 | //! |
428 | 428 | //! Refer to [`statistics`] module for more information about statistics. |
@@ -458,7 +458,6 @@ use std::time::Duration; |
458 | 458 | use auth::PeerKey; |
459 | 459 | use bittorrent_primitives::info_hash::InfoHash; |
460 | 460 | use error::PeerKeyError; |
461 | | -use tokio::sync::mpsc::error::SendError; |
462 | 461 | use torrust_tracker_clock::clock::Time; |
463 | 462 | use torrust_tracker_configuration::{AnnouncePolicy, Core, TORRENT_PEERS_LIMIT}; |
464 | 463 | use torrust_tracker_located_error::Located; |
@@ -502,12 +501,6 @@ pub struct Tracker { |
502 | 501 |
|
503 | 502 | /// The in-memory torrents repository. |
504 | 503 | torrents: Arc<Torrents>, |
505 | | - |
506 | | - /// Service to send stats events. |
507 | | - stats_event_sender: Arc<Option<Box<dyn statistics::event::sender::Sender>>>, |
508 | | - |
509 | | - /// The in-memory stats repo. |
510 | | - stats_repository: Arc<statistics::repository::Repository>, |
511 | 504 | } |
512 | 505 |
|
513 | 506 | /// How many peers the peer announcing wants in the announce response. |
@@ -576,17 +569,13 @@ impl Tracker { |
576 | 569 | config: &Core, |
577 | 570 | database: &Arc<Box<dyn Database>>, |
578 | 571 | whitelist_manager: &Arc<WhiteListManager>, |
579 | | - stats_event_sender: &Arc<Option<Box<dyn statistics::event::sender::Sender>>>, |
580 | | - stats_repository: &Arc<statistics::repository::Repository>, |
581 | 572 | ) -> Result<Tracker, databases::error::Error> { |
582 | 573 | Ok(Tracker { |
583 | 574 | config: config.clone(), |
584 | 575 | database: database.clone(), |
585 | 576 | keys: tokio::sync::RwLock::new(std::collections::HashMap::new()), |
586 | 577 | whitelist_manager: whitelist_manager.clone(), |
587 | 578 | torrents: Arc::default(), |
588 | | - stats_event_sender: stats_event_sender.clone(), |
589 | | - stats_repository: stats_repository.clone(), |
590 | 579 | }) |
591 | 580 | } |
592 | 581 |
|
@@ -1054,26 +1043,6 @@ impl Tracker { |
1054 | 1043 | }) |
1055 | 1044 | } |
1056 | 1045 |
|
1057 | | - /// It return the `Tracker` [`statistics::metrics::Metrics`]. |
1058 | | - /// |
1059 | | - /// # Context: Statistics |
1060 | | - pub async fn get_stats(&self) -> tokio::sync::RwLockReadGuard<'_, statistics::metrics::Metrics> { |
1061 | | - self.stats_repository.get_stats().await |
1062 | | - } |
1063 | | - |
1064 | | - /// It allows to send a statistic events which eventually will be used to update [`statistics::metrics::Metrics`]. |
1065 | | - /// |
1066 | | - /// # Context: Statistics |
1067 | | - pub async fn send_stats_event( |
1068 | | - &self, |
1069 | | - event: statistics::event::Event, |
1070 | | - ) -> Option<Result<(), SendError<statistics::event::Event>>> { |
1071 | | - match &*self.stats_event_sender { |
1072 | | - None => None, |
1073 | | - Some(stats_event_sender) => stats_event_sender.send_event(event).await, |
1074 | | - } |
1075 | | - } |
1076 | | - |
1077 | 1046 | /// It drops the database tables. |
1078 | 1047 | /// |
1079 | 1048 | /// # Errors |
@@ -1113,35 +1082,47 @@ mod tests { |
1113 | 1082 |
|
1114 | 1083 | use crate::bootstrap::app::initialize_tracker_dependencies; |
1115 | 1084 | use crate::core::peer::Peer; |
1116 | | - use crate::core::services::tracker_factory; |
| 1085 | + use crate::core::services::{statistics, tracker_factory}; |
1117 | 1086 | use crate::core::whitelist::WhiteListManager; |
1118 | 1087 | use crate::core::{TorrentsMetrics, Tracker}; |
1119 | 1088 |
|
1120 | 1089 | fn public_tracker() -> Tracker { |
1121 | 1090 | let config = configuration::ephemeral_public(); |
1122 | | - let (database, whitelist_manager, stats_event_sender, stats_repository) = initialize_tracker_dependencies(&config); |
1123 | | - tracker_factory(&config, &database, &whitelist_manager, &stats_event_sender, &stats_repository) |
| 1091 | + let (database, whitelist_manager) = initialize_tracker_dependencies(&config); |
| 1092 | + let (stats_event_sender, stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); |
| 1093 | + let _stats_event_sender = Arc::new(stats_event_sender); |
| 1094 | + let _stats_repository = Arc::new(stats_repository); |
| 1095 | + tracker_factory(&config, &database, &whitelist_manager) |
1124 | 1096 | } |
1125 | 1097 |
|
1126 | 1098 | fn private_tracker() -> Tracker { |
1127 | 1099 | let config = configuration::ephemeral_private(); |
1128 | | - let (database, whitelist_manager, stats_event_sender, stats_repository) = initialize_tracker_dependencies(&config); |
1129 | | - tracker_factory(&config, &database, &whitelist_manager, &stats_event_sender, &stats_repository) |
| 1100 | + let (database, whitelist_manager) = initialize_tracker_dependencies(&config); |
| 1101 | + let (stats_event_sender, stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); |
| 1102 | + let _stats_event_sender = Arc::new(stats_event_sender); |
| 1103 | + let _stats_repository = Arc::new(stats_repository); |
| 1104 | + tracker_factory(&config, &database, &whitelist_manager) |
1130 | 1105 | } |
1131 | 1106 |
|
1132 | 1107 | fn whitelisted_tracker() -> (Tracker, Arc<WhiteListManager>) { |
1133 | 1108 | let config = configuration::ephemeral_listed(); |
1134 | | - let (database, whitelist_manager, stats_event_sender, stats_repository) = initialize_tracker_dependencies(&config); |
1135 | | - let tracker = tracker_factory(&config, &database, &whitelist_manager, &stats_event_sender, &stats_repository); |
| 1109 | + let (database, whitelist_manager) = initialize_tracker_dependencies(&config); |
| 1110 | + let (stats_event_sender, stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); |
| 1111 | + let _stats_event_sender = Arc::new(stats_event_sender); |
| 1112 | + let _stats_repository = Arc::new(stats_repository); |
| 1113 | + let tracker = tracker_factory(&config, &database, &whitelist_manager); |
1136 | 1114 |
|
1137 | 1115 | (tracker, whitelist_manager) |
1138 | 1116 | } |
1139 | 1117 |
|
1140 | 1118 | pub fn tracker_persisting_torrents_in_database() -> Tracker { |
1141 | 1119 | let mut config = configuration::ephemeral_listed(); |
1142 | 1120 | config.core.tracker_policy.persistent_torrent_completed_stat = true; |
1143 | | - let (database, whitelist_manager, stats_event_sender, stats_repository) = initialize_tracker_dependencies(&config); |
1144 | | - tracker_factory(&config, &database, &whitelist_manager, &stats_event_sender, &stats_repository) |
| 1121 | + let (database, whitelist_manager) = initialize_tracker_dependencies(&config); |
| 1122 | + let (stats_event_sender, stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); |
| 1123 | + let _stats_event_sender = Arc::new(stats_event_sender); |
| 1124 | + let _stats_repository = Arc::new(stats_repository); |
| 1125 | + tracker_factory(&config, &database, &whitelist_manager) |
1145 | 1126 | } |
1146 | 1127 |
|
1147 | 1128 | fn sample_info_hash() -> InfoHash { |
|
0 commit comments