Skip to content

Commit fdf2055

Browse files
committed
refactor: [#1411] remove duplicate code for HttpTrackerCoreServices initialization
1 parent af80ada commit fdf2055

5 files changed

Lines changed: 59 additions & 59 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ impl EnvContainer {
115115
let http_tracker_config = Arc::new(http_tracker_config[0].clone());
116116

117117
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
118-
let http_tracker_container = HttpTrackerCoreContainer::initialize_from(&tracker_core_container, &http_tracker_config);
118+
let http_tracker_container =
119+
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &http_tracker_config);
119120

120121
Self {
121122
tracker_core_container,

packages/axum-rest-tracker-api-server/src/environment.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ impl EnvContainer {
174174

175175
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
176176
let http_tracker_core_container =
177-
HttpTrackerCoreContainer::initialize_from(&tracker_core_container, &http_tracker_config);
177+
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &http_tracker_config);
178178
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, &udp_tracker_config);
179179
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(&core_config);
180180

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

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ use torrust_tracker_configuration::{Core, HttpTracker};
55

66
use crate::services::announce::AnnounceService;
77
use crate::services::scrape::ScrapeService;
8-
use crate::{event, statistics};
8+
use crate::{event, services, statistics};
99

1010
pub struct HttpTrackerCoreContainer {
11-
pub tracker_core_container: Arc<TrackerCoreContainer>,
1211
pub http_tracker_config: Arc<HttpTracker>,
12+
13+
pub tracker_core_container: Arc<TrackerCoreContainer>,
14+
15+
// `HttpTrackerCoreServices`
1316
pub http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
1417
pub http_stats_repository: Arc<statistics::repository::Repository>,
1518
pub announce_service: Arc<AnnounceService>,
@@ -20,41 +23,68 @@ impl HttpTrackerCoreContainer {
2023
#[must_use]
2124
pub fn initialize(core_config: &Arc<Core>, http_tracker_config: &Arc<HttpTracker>) -> Arc<Self> {
2225
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(core_config));
23-
Self::initialize_from(&tracker_core_container, http_tracker_config)
26+
Self::initialize_from_tracker_core(&tracker_core_container, http_tracker_config)
2427
}
2528

2629
#[must_use]
27-
pub fn initialize_from(
30+
pub fn initialize_from_tracker_core(
2831
tracker_core_container: &Arc<TrackerCoreContainer>,
2932
http_tracker_config: &Arc<HttpTracker>,
3033
) -> Arc<Self> {
34+
let http_tracker_core_services = HttpTrackerCoreServices::initialize_from(tracker_core_container);
35+
Self::initialize_from_services(tracker_core_container, &http_tracker_core_services, http_tracker_config)
36+
}
37+
38+
#[must_use]
39+
pub fn initialize_from_services(
40+
tracker_core_container: &Arc<TrackerCoreContainer>,
41+
http_tracker_core_services: &Arc<HttpTrackerCoreServices>,
42+
http_tracker_config: &Arc<HttpTracker>,
43+
) -> Arc<Self> {
44+
Arc::new(Self {
45+
tracker_core_container: tracker_core_container.clone(),
46+
http_tracker_config: http_tracker_config.clone(),
47+
http_stats_event_sender: http_tracker_core_services.http_stats_event_sender.clone(),
48+
http_stats_repository: http_tracker_core_services.http_stats_repository.clone(),
49+
announce_service: http_tracker_core_services.http_announce_service.clone(),
50+
scrape_service: http_tracker_core_services.http_scrape_service.clone(),
51+
})
52+
}
53+
}
54+
55+
pub struct HttpTrackerCoreServices {
56+
pub http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
57+
pub http_stats_repository: Arc<statistics::repository::Repository>,
58+
pub http_announce_service: Arc<services::announce::AnnounceService>,
59+
pub http_scrape_service: Arc<services::scrape::ScrapeService>,
60+
}
61+
62+
impl HttpTrackerCoreServices {
63+
#[must_use]
64+
pub fn initialize_from(tracker_core_container: &Arc<TrackerCoreContainer>) -> Arc<Self> {
3165
let (http_stats_event_sender, http_stats_repository) =
3266
statistics::setup::factory(tracker_core_container.core_config.tracker_usage_statistics);
3367
let http_stats_event_sender = Arc::new(http_stats_event_sender);
3468
let http_stats_repository = Arc::new(http_stats_repository);
35-
36-
let announce_service = Arc::new(AnnounceService::new(
69+
let http_announce_service = Arc::new(AnnounceService::new(
3770
tracker_core_container.core_config.clone(),
3871
tracker_core_container.announce_handler.clone(),
3972
tracker_core_container.authentication_service.clone(),
4073
tracker_core_container.whitelist_authorization.clone(),
4174
http_stats_event_sender.clone(),
4275
));
43-
44-
let scrape_service = Arc::new(ScrapeService::new(
76+
let http_scrape_service = Arc::new(ScrapeService::new(
4577
tracker_core_container.core_config.clone(),
4678
tracker_core_container.scrape_handler.clone(),
4779
tracker_core_container.authentication_service.clone(),
4880
http_stats_event_sender.clone(),
4981
));
5082

5183
Arc::new(Self {
52-
tracker_core_container: tracker_core_container.clone(),
53-
http_tracker_config: http_tracker_config.clone(),
54-
http_stats_event_sender: http_stats_event_sender.clone(),
55-
http_stats_repository: http_stats_repository.clone(),
56-
announce_service: announce_service.clone(),
57-
scrape_service: scrape_service.clone(),
84+
http_stats_event_sender,
85+
http_stats_repository,
86+
http_announce_service,
87+
http_scrape_service,
5888
})
5989
}
6090
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ impl TrackerHttpApiCoreContainer {
2727
http_api_config: &Arc<HttpApi>,
2828
) -> Arc<TrackerHttpApiCoreContainer> {
2929
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(core_config));
30-
let http_tracker_core_container = HttpTrackerCoreContainer::initialize_from(&tracker_core_container, http_tracker_config);
30+
let http_tracker_core_container =
31+
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, http_tracker_config);
3132
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, udp_tracker_config);
3233
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(core_config);
3334

src/container.rs

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ use std::collections::HashMap;
22
use std::net::SocketAddr;
33
use std::sync::Arc;
44

5-
use bittorrent_http_tracker_core::container::HttpTrackerCoreContainer;
6-
use bittorrent_http_tracker_core::services::announce::AnnounceService;
7-
use bittorrent_http_tracker_core::services::scrape::ScrapeService;
5+
use bittorrent_http_tracker_core::container::{HttpTrackerCoreContainer, HttpTrackerCoreServices};
86
use bittorrent_tracker_core::container::TrackerCoreContainer;
97
use bittorrent_udp_tracker_core::container::UdpTrackerCoreContainer;
108
use bittorrent_udp_tracker_core::services::banning::BanService;
@@ -27,6 +25,7 @@ pub enum Error {
2725
pub struct AppContainer {
2826
pub tracker_core_container: Arc<TrackerCoreContainer>,
2927
pub http_api_config: Arc<Option<HttpApi>>,
28+
pub http_tracker_core_services: Arc<HttpTrackerCoreServices>,
3029

3130
// UDP Tracker Core Services
3231
pub udp_core_stats_event_sender: Arc<Option<Box<dyn bittorrent_udp_tracker_core::event::sender::Sender>>>,
@@ -36,12 +35,6 @@ pub struct AppContainer {
3635
pub udp_announce_service: Arc<bittorrent_udp_tracker_core::services::announce::AnnounceService>,
3736
pub udp_scrape_service: Arc<bittorrent_udp_tracker_core::services::scrape::ScrapeService>,
3837

39-
// HTTP Tracker Core Services
40-
pub http_stats_event_sender: Arc<Option<Box<dyn bittorrent_http_tracker_core::event::sender::Sender>>>,
41-
pub http_stats_repository: Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
42-
pub http_announce_service: Arc<bittorrent_http_tracker_core::services::announce::AnnounceService>,
43-
pub http_scrape_service: Arc<bittorrent_http_tracker_core::services::scrape::ScrapeService>,
44-
4538
// UDP Tracker Server Services
4639
pub udp_server_stats_event_sender: Arc<Option<Box<dyn torrust_udp_tracker_server::event::sender::Sender>>>,
4740
pub udp_server_stats_repository: Arc<torrust_udp_tracker_server::statistics::repository::Repository>,
@@ -63,24 +56,7 @@ impl AppContainer {
6356

6457
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
6558

66-
// HTTP Tracker Core Services
67-
let (http_stats_event_sender, http_stats_repository) =
68-
bittorrent_http_tracker_core::statistics::setup::factory(configuration.core.tracker_usage_statistics);
69-
let http_stats_event_sender = Arc::new(http_stats_event_sender);
70-
let http_stats_repository = Arc::new(http_stats_repository);
71-
let http_announce_service = Arc::new(AnnounceService::new(
72-
tracker_core_container.core_config.clone(),
73-
tracker_core_container.announce_handler.clone(),
74-
tracker_core_container.authentication_service.clone(),
75-
tracker_core_container.whitelist_authorization.clone(),
76-
http_stats_event_sender.clone(),
77-
));
78-
let http_scrape_service = Arc::new(ScrapeService::new(
79-
tracker_core_container.core_config.clone(),
80-
tracker_core_container.scrape_handler.clone(),
81-
tracker_core_container.authentication_service.clone(),
82-
http_stats_event_sender.clone(),
83-
));
59+
let http_tracker_core_services = HttpTrackerCoreServices::initialize_from(&tracker_core_container);
8460

8561
// UDP Tracker Core Services
8662
let (udp_core_stats_event_sender, udp_core_stats_repository) =
@@ -121,14 +97,11 @@ impl AppContainer {
12197
for http_tracker_config in http_trackers {
12298
http_tracker_containers.insert(
12399
http_tracker_config.bind_address,
124-
Arc::new(HttpTrackerCoreContainer {
125-
tracker_core_container: tracker_core_container.clone(),
126-
http_tracker_config: Arc::new(http_tracker_config.clone()),
127-
http_stats_event_sender: http_stats_event_sender.clone(),
128-
http_stats_repository: http_stats_repository.clone(),
129-
announce_service: http_announce_service.clone(),
130-
scrape_service: http_scrape_service.clone(),
131-
}),
100+
HttpTrackerCoreContainer::initialize_from_services(
101+
&tracker_core_container,
102+
&http_tracker_core_services,
103+
&Arc::new(http_tracker_config.clone()),
104+
),
132105
);
133106
}
134107
}
@@ -160,6 +133,7 @@ impl AppContainer {
160133
AppContainer {
161134
tracker_core_container,
162135
http_api_config,
136+
http_tracker_core_services,
163137

164138
// UDP Tracker Core Services
165139
udp_core_stats_event_sender,
@@ -169,12 +143,6 @@ impl AppContainer {
169143
udp_announce_service,
170144
udp_scrape_service,
171145

172-
// HTTP Tracker Core Services
173-
http_stats_event_sender,
174-
http_stats_repository,
175-
http_announce_service,
176-
http_scrape_service,
177-
178146
// UDP Tracker Server Services
179147
udp_server_stats_event_sender,
180148
udp_server_stats_repository,
@@ -221,7 +189,7 @@ impl AppContainer {
221189
tracker_core_container: self.tracker_core_container.clone(),
222190
http_api_config: http_api_config.clone(),
223191
ban_service: self.udp_ban_service.clone(),
224-
http_stats_repository: self.http_stats_repository.clone(),
192+
http_stats_repository: self.http_tracker_core_services.http_stats_repository.clone(),
225193
udp_core_stats_repository: self.udp_core_stats_repository.clone(),
226194
udp_server_stats_repository: self.udp_server_stats_repository.clone(),
227195
}

0 commit comments

Comments
 (0)