|
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