Skip to content

Commit ef1bf32

Browse files
committed
Merge #1406: Refactor containers
c785d54 refactor: encapsule field TrackerCoreContainer in TrackerHttpApiCoreContainer (Jose Celano) 239f352 refactor: encapsule field TrackerCoreContainer in UdpTrackerCoreContainer (Jose Celano) 0d42586 refactor: encapsule field TrackerCoreContainer in HttpTrackerCoreContainer (Jose Celano) 9cee15e refactor: encapsule fiel in AppContainer for TrackerCoreContainer (Jose Celano) c7297c1 chore: add a second HTTP and UDP tracker in dev env (Jose Celano) 82bacf0 chore: enable seggregate stats for dev env by default (Jose Celano) Pull request description: Relates to: #1403 Minor changes that will make it easier to implement the issue #1403. It simplifies the `AppContainer` and other containers. ACKs for top commit: josecelano: ACK c785d54 Tree-SHA512: 1b22b2e4b8e37a036394ce16b17b05acf78f3b9858d2650fd4243004d98b8966b70b3d468790d7e8f907a9d38a6ad8940dfa5b38400deb91091307397f59a121
2 parents 734393d + c785d54 commit ef1bf32

File tree

11 files changed

+57
-164
lines changed

11 files changed

+57
-164
lines changed

packages/axum-http-tracker-server/src/server.rs

+10-41
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,7 @@ mod tests {
241241
use bittorrent_http_tracker_core::container::HttpTrackerCoreContainer;
242242
use bittorrent_http_tracker_core::services::announce::AnnounceService;
243243
use bittorrent_http_tracker_core::services::scrape::ScrapeService;
244-
use bittorrent_tracker_core::announce_handler::AnnounceHandler;
245-
use bittorrent_tracker_core::authentication::key::repository::in_memory::InMemoryKeyRepository;
246-
use bittorrent_tracker_core::authentication::service;
247-
use bittorrent_tracker_core::databases::setup::initialize_database;
248-
use bittorrent_tracker_core::scrape_handler::ScrapeHandler;
249-
use bittorrent_tracker_core::torrent::repository::in_memory::InMemoryTorrentRepository;
250-
use bittorrent_tracker_core::torrent::repository::persisted::DatabasePersistentTorrentRepository;
251-
use bittorrent_tracker_core::whitelist::authorization::WhitelistAuthorization;
252-
use bittorrent_tracker_core::whitelist::repository::in_memory::InMemoryWhitelist;
244+
use bittorrent_tracker_core::container::TrackerCoreContainer;
253245
use torrust_axum_server::tsl::make_rust_tls;
254246
use torrust_server_lib::registar::Registar;
255247
use torrust_tracker_configuration::{logging, Configuration};
@@ -275,48 +267,25 @@ mod tests {
275267
let http_stats_event_sender = Arc::new(http_stats_event_sender);
276268
let http_stats_repository = Arc::new(http_stats_repository);
277269

278-
let database = initialize_database(&configuration.core);
279-
let in_memory_whitelist = Arc::new(InMemoryWhitelist::default());
280-
let whitelist_authorization = Arc::new(WhitelistAuthorization::new(&configuration.core, &in_memory_whitelist.clone()));
281-
let in_memory_key_repository = Arc::new(InMemoryKeyRepository::default());
282-
let authentication_service = Arc::new(service::AuthenticationService::new(
283-
&configuration.core,
284-
&in_memory_key_repository,
285-
));
286-
let in_memory_torrent_repository = Arc::new(InMemoryTorrentRepository::default());
287-
let db_torrent_repository = Arc::new(DatabasePersistentTorrentRepository::new(&database));
288-
289-
let announce_handler = Arc::new(AnnounceHandler::new(
290-
&configuration.core,
291-
&whitelist_authorization,
292-
&in_memory_torrent_repository,
293-
&db_torrent_repository,
294-
));
295-
296-
let scrape_handler = Arc::new(ScrapeHandler::new(&whitelist_authorization, &in_memory_torrent_repository));
270+
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
297271

298272
let announce_service = Arc::new(AnnounceService::new(
299-
core_config.clone(),
300-
announce_handler.clone(),
301-
authentication_service.clone(),
302-
whitelist_authorization.clone(),
273+
tracker_core_container.core_config.clone(),
274+
tracker_core_container.announce_handler.clone(),
275+
tracker_core_container.authentication_service.clone(),
276+
tracker_core_container.whitelist_authorization.clone(),
303277
http_stats_event_sender.clone(),
304278
));
305279

306280
let scrape_service = Arc::new(ScrapeService::new(
307-
core_config.clone(),
308-
scrape_handler.clone(),
309-
authentication_service.clone(),
281+
tracker_core_container.core_config.clone(),
282+
tracker_core_container.scrape_handler.clone(),
283+
tracker_core_container.authentication_service.clone(),
310284
http_stats_event_sender.clone(),
311285
));
312286

313287
HttpTrackerCoreContainer {
314-
core_config,
315-
announce_handler,
316-
scrape_handler,
317-
whitelist_authorization,
318-
authentication_service,
319-
288+
tracker_core_container,
320289
http_tracker_config,
321290
http_stats_event_sender,
322291
http_stats_repository,

packages/axum-rest-tracker-api-server/src/v1/context/stats/routes.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub fn add(prefix: &str, router: Router, http_api_container: &Arc<TrackerHttpApi
1616
router.route(
1717
&format!("{prefix}/stats"),
1818
get(get_stats_handler).with_state((
19-
http_api_container.in_memory_torrent_repository.clone(),
19+
http_api_container.tracker_core_container.in_memory_torrent_repository.clone(),
2020
http_api_container.ban_service.clone(),
2121
http_api_container.http_stats_repository.clone(),
2222
http_api_container.udp_server_stats_repository.clone(),

packages/axum-rest-tracker-api-server/src/v1/routes.rs

+15-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,21 @@ use super::context::{auth_key, stats, torrent, whitelist};
1010
pub fn add(prefix: &str, router: Router, http_api_container: &Arc<TrackerHttpApiCoreContainer>) -> Router {
1111
let v1_prefix = format!("{prefix}/v1");
1212

13-
let router = auth_key::routes::add(&v1_prefix, router, &http_api_container.keys_handler.clone());
13+
let router = auth_key::routes::add(
14+
&v1_prefix,
15+
router,
16+
&http_api_container.tracker_core_container.keys_handler.clone(),
17+
);
1418
let router = stats::routes::add(&v1_prefix, router, http_api_container);
15-
let router = whitelist::routes::add(&v1_prefix, router, &http_api_container.whitelist_manager);
19+
let router = whitelist::routes::add(
20+
&v1_prefix,
21+
router,
22+
&http_api_container.tracker_core_container.whitelist_manager,
23+
);
1624

17-
torrent::routes::add(&v1_prefix, router, &http_api_container.in_memory_torrent_repository.clone())
25+
torrent::routes::add(
26+
&v1_prefix,
27+
router,
28+
&http_api_container.tracker_core_container.in_memory_torrent_repository.clone(),
29+
)
1830
}

packages/http-tracker-core/src/container.rs

+2-17
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
use std::sync::Arc;
22

3-
use bittorrent_tracker_core::announce_handler::AnnounceHandler;
4-
use bittorrent_tracker_core::authentication::service::AuthenticationService;
53
use bittorrent_tracker_core::container::TrackerCoreContainer;
6-
use bittorrent_tracker_core::scrape_handler::ScrapeHandler;
7-
use bittorrent_tracker_core::whitelist;
84
use torrust_tracker_configuration::{Core, HttpTracker};
95

106
use crate::services::announce::AnnounceService;
117
use crate::services::scrape::ScrapeService;
128
use crate::{event, statistics};
139

1410
pub struct HttpTrackerCoreContainer {
15-
// todo: replace with TrackerCoreContainer
16-
pub core_config: Arc<Core>,
17-
pub announce_handler: Arc<AnnounceHandler>,
18-
pub scrape_handler: Arc<ScrapeHandler>,
19-
pub whitelist_authorization: Arc<whitelist::authorization::WhitelistAuthorization>,
20-
pub authentication_service: Arc<AuthenticationService>,
21-
11+
pub tracker_core_container: Arc<TrackerCoreContainer>,
2212
pub http_tracker_config: Arc<HttpTracker>,
2313
pub http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
2414
pub http_stats_repository: Arc<statistics::repository::Repository>,
@@ -59,12 +49,7 @@ impl HttpTrackerCoreContainer {
5949
));
6050

6151
Arc::new(Self {
62-
core_config: tracker_core_container.core_config.clone(),
63-
announce_handler: tracker_core_container.announce_handler.clone(),
64-
scrape_handler: tracker_core_container.scrape_handler.clone(),
65-
whitelist_authorization: tracker_core_container.whitelist_authorization.clone(),
66-
authentication_service: tracker_core_container.authentication_service.clone(),
67-
52+
tracker_core_container: tracker_core_container.clone(),
6853
http_tracker_config: http_tracker_config.clone(),
6954
http_stats_event_sender: http_stats_event_sender.clone(),
7055
http_stats_repository: http_stats_repository.clone(),

packages/rest-tracker-api-core/src/container.rs

+2-19
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
use std::sync::Arc;
22

33
use bittorrent_http_tracker_core::container::HttpTrackerCoreContainer;
4-
use bittorrent_tracker_core::authentication::handler::KeysHandler;
54
use bittorrent_tracker_core::container::TrackerCoreContainer;
6-
use bittorrent_tracker_core::torrent::repository::in_memory::InMemoryTorrentRepository;
7-
use bittorrent_tracker_core::whitelist::manager::WhitelistManager;
85
use bittorrent_udp_tracker_core::container::UdpTrackerCoreContainer;
96
use bittorrent_udp_tracker_core::services::banning::BanService;
107
use bittorrent_udp_tracker_core::{self};
@@ -13,22 +10,11 @@ use torrust_tracker_configuration::{Core, HttpApi, HttpTracker, UdpTracker};
1310
use torrust_udp_tracker_server::container::UdpTrackerServerContainer;
1411

1512
pub struct TrackerHttpApiCoreContainer {
16-
// todo: replace with TrackerCoreContainer
17-
pub core_config: Arc<Core>,
18-
pub in_memory_torrent_repository: Arc<InMemoryTorrentRepository>,
19-
pub keys_handler: Arc<KeysHandler>,
20-
pub whitelist_manager: Arc<WhitelistManager>,
21-
22-
// todo: replace with HttpTrackerCoreContainer
13+
pub tracker_core_container: Arc<TrackerCoreContainer>,
2314
pub http_stats_repository: Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
24-
25-
// todo: replace with UdpTrackerCoreContainer
2615
pub ban_service: Arc<RwLock<BanService>>,
2716
pub udp_core_stats_repository: Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
28-
29-
// todo: replace with UdpTrackerServerContainer
3017
pub udp_server_stats_repository: Arc<torrust_udp_tracker_server::statistics::repository::Repository>,
31-
3218
pub http_api_config: Arc<HttpApi>,
3319
}
3420

@@ -63,10 +49,7 @@ impl TrackerHttpApiCoreContainer {
6349
http_api_config: &Arc<HttpApi>,
6450
) -> Arc<TrackerHttpApiCoreContainer> {
6551
Arc::new(TrackerHttpApiCoreContainer {
66-
core_config: tracker_core_container.core_config.clone(),
67-
in_memory_torrent_repository: tracker_core_container.in_memory_torrent_repository.clone(),
68-
keys_handler: tracker_core_container.keys_handler.clone(),
69-
whitelist_manager: tracker_core_container.whitelist_manager.clone(),
52+
tracker_core_container: tracker_core_container.clone(),
7053

7154
http_stats_repository: http_tracker_core_container.http_stats_repository.clone(),
7255

packages/udp-tracker-core/src/container.rs

+2-14
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
use std::sync::Arc;
22

3-
use bittorrent_tracker_core::announce_handler::AnnounceHandler;
43
use bittorrent_tracker_core::container::TrackerCoreContainer;
5-
use bittorrent_tracker_core::scrape_handler::ScrapeHandler;
6-
use bittorrent_tracker_core::whitelist;
74
use tokio::sync::RwLock;
85
use torrust_tracker_configuration::{Core, UdpTracker};
96

@@ -14,12 +11,7 @@ use crate::services::scrape::ScrapeService;
1411
use crate::{event, statistics, MAX_CONNECTION_ID_ERRORS_PER_IP};
1512

1613
pub struct UdpTrackerCoreContainer {
17-
// todo: replace with TrackerCoreContainer
18-
pub core_config: Arc<Core>,
19-
pub announce_handler: Arc<AnnounceHandler>,
20-
pub scrape_handler: Arc<ScrapeHandler>,
21-
pub whitelist_authorization: Arc<whitelist::authorization::WhitelistAuthorization>,
22-
14+
pub tracker_core_container: Arc<TrackerCoreContainer>,
2315
pub udp_tracker_config: Arc<UdpTracker>,
2416
pub udp_core_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
2517
pub udp_core_stats_repository: Arc<statistics::repository::Repository>,
@@ -58,11 +50,7 @@ impl UdpTrackerCoreContainer {
5850
));
5951

6052
Arc::new(UdpTrackerCoreContainer {
61-
core_config: tracker_core_container.core_config.clone(),
62-
announce_handler: tracker_core_container.announce_handler.clone(),
63-
scrape_handler: tracker_core_container.scrape_handler.clone(),
64-
whitelist_authorization: tracker_core_container.whitelist_authorization.clone(),
65-
53+
tracker_core_container: tracker_core_container.clone(),
6654
udp_tracker_config: udp_tracker_config.clone(),
6755
udp_core_stats_event_sender: udp_core_stats_event_sender.clone(),
6856
udp_core_stats_repository: udp_core_stats_repository.clone(),

packages/udp-tracker-server/src/handlers/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ pub async fn handle_request(
172172
client_socket_addr,
173173
server_socket_addr,
174174
&announce_request,
175-
&udp_tracker_core_container.core_config,
175+
&udp_tracker_core_container.tracker_core_container.core_config,
176176
&udp_tracker_server_container.udp_server_stats_event_sender,
177177
cookie_time_values.valid_range,
178178
)

packages/udp-tracker-server/src/server/launcher.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl Launcher {
4747
) {
4848
tracing::info!(target: UDP_TRACKER_LOG_TARGET, "Starting on: {bind_to}");
4949

50-
if udp_tracker_core_container.core_config.private {
50+
if udp_tracker_core_container.tracker_core_container.core_config.private {
5151
tracing::error!("udp services cannot be used for private trackers");
5252
panic!("it should not use udp if using authentication");
5353
}

share/default/config/tracker.development.sqlite3.toml

+10
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,21 @@ threshold = "info"
1010
listed = false
1111
private = false
1212

13+
[[udp_trackers]]
14+
bind_address = "0.0.0.0:6868"
15+
tracker_usage_statistics = true
16+
1317
[[udp_trackers]]
1418
bind_address = "0.0.0.0:6969"
19+
tracker_usage_statistics = true
1520

1621
[[http_trackers]]
1722
bind_address = "0.0.0.0:7070"
23+
tracker_usage_statistics = true
24+
25+
[[http_trackers]]
26+
bind_address = "0.0.0.0:7171"
27+
tracker_usage_statistics = true
1828

1929
[http_api]
2030
bind_address = "0.0.0.0:1212"

src/app.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub async fn start(config: &Configuration, app_container: &Arc<AppContainer>) ->
5353
// Load peer keys
5454
if config.core.private {
5555
app_container
56+
.tracker_core_container
5657
.keys_handler
5758
.load_peer_keys_from_database()
5859
.await
@@ -62,6 +63,7 @@ pub async fn start(config: &Configuration, app_container: &Arc<AppContainer>) ->
6263
// Load whitelisted torrents
6364
if config.core.listed {
6465
app_container
66+
.tracker_core_container
6567
.whitelist_manager
6668
.load_whitelist_from_database()
6769
.await
@@ -130,7 +132,10 @@ pub async fn start(config: &Configuration, app_container: &Arc<AppContainer>) ->
130132

131133
// Start runners to remove torrents without peers, every interval
132134
if config.core.inactive_peer_cleanup_interval > 0 {
133-
jobs.push(torrent_cleanup::start_job(&config.core, &app_container.torrents_manager));
135+
jobs.push(torrent_cleanup::start_job(
136+
&config.core,
137+
&app_container.tracker_core_container.torrents_manager,
138+
));
134139
}
135140

136141
// Start Health Check API

0 commit comments

Comments
 (0)