Skip to content

Commit ee2fc24

Browse files
committed
Merge #1328: Refactor packages: review UDP events
b8d2f76 refactor: [#1319] remove UDP server events from UDP tracker core package (Jose Celano) 3f55b9d refactor: [#1319] add UDP server events (Jose Celano) Pull request description: This splits the UDP stats events into two different types of events (one for each layer): - UDP core events - UDP server event ### Subtasks - [x] Step 1. Create UDP server events. - [x] Step 2. Remove UDP server events from core events. ACKs for top commit: josecelano: ACK b8d2f76 Tree-SHA512: f37b8e1a1cb577122316d85b68372e47c3274347666ce48eb19e3c7f776128b560c693412ed16dc4f44cca6557256e05e10fcce7654ca8d451d167126360dcae
2 parents 47aae95 + b8d2f76 commit ee2fc24

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1467
-598
lines changed

Cargo.lock

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/axum-tracker-api-server/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ torrust-tracker-api-core = { version = "3.0.0-develop", path = "../tracker-api-c
3838
torrust-tracker-clock = { version = "3.0.0-develop", path = "../clock" }
3939
torrust-tracker-configuration = { version = "3.0.0-develop", path = "../configuration" }
4040
torrust-tracker-primitives = { version = "3.0.0-develop", path = "../primitives" }
41+
torrust-udp-tracker-server = { version = "3.0.0-develop", path = "../udp-tracker-server" }
4142
tower = { version = "0", features = ["timeout"] }
4243
tower-http = { version = "0", features = ["compression-full", "cors", "propagate-header", "request-id", "trace"] }
4344
tracing = "0"

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

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use torrust_tracker_api_client::connection_info::{ConnectionInfo, Origin};
1212
use torrust_tracker_api_core::container::TrackerHttpApiCoreContainer;
1313
use torrust_tracker_configuration::{logging, Configuration};
1414
use torrust_tracker_primitives::peer;
15+
use torrust_udp_tracker_server::container::UdpTrackerServerContainer;
1516

1617
use crate::server::{ApiServer, Launcher, Running, Stopped};
1718

@@ -175,11 +176,13 @@ impl EnvContainer {
175176
let http_tracker_core_container =
176177
HttpTrackerCoreContainer::initialize_from(&tracker_core_container, &http_tracker_config);
177178
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, &udp_tracker_config);
179+
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(&core_config);
178180

179181
let tracker_http_api_core_container = TrackerHttpApiCoreContainer::initialize_from(
180182
&tracker_core_container,
181183
&http_tracker_core_container,
182184
&udp_tracker_core_container,
185+
&udp_tracker_server_container,
183186
&http_api_config,
184187
);
185188

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

+9-1
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,18 @@ pub async fn get_stats_handler(
4444
Arc<RwLock<BanService>>,
4545
Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
4646
Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
47+
Arc<torrust_udp_tracker_server::statistics::repository::Repository>,
4748
)>,
4849
params: Query<QueryParams>,
4950
) -> Response {
50-
let metrics = get_metrics(state.0.clone(), state.1.clone(), state.2.clone(), state.3.clone()).await;
51+
let metrics = get_metrics(
52+
state.0.clone(),
53+
state.1.clone(),
54+
state.2.clone(),
55+
state.3.clone(),
56+
state.4.clone(),
57+
)
58+
.await;
5159

5260
match params.0.format {
5361
Some(format) => match format {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ pub fn add(prefix: &str, router: Router, http_api_container: &Arc<TrackerHttpApi
1919
http_api_container.in_memory_torrent_repository.clone(),
2020
http_api_container.ban_service.clone(),
2121
http_api_container.http_stats_repository.clone(),
22-
http_api_container.udp_stats_repository.clone(),
22+
http_api_container.udp_core_stats_repository.clone(),
23+
http_api_container.udp_server_stats_repository.clone(),
2324
)),
2425
)
2526
}

packages/tracker-api-core/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ bittorrent-udp-tracker-core = { version = "3.0.0-develop", path = "../udp-tracke
2020
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread", "signal", "sync"] }
2121
torrust-tracker-configuration = { version = "3.0.0-develop", path = "../configuration" }
2222
torrust-tracker-primitives = { version = "3.0.0-develop", path = "../primitives" }
23+
torrust-udp-tracker-server = { version = "3.0.0-develop", path = "../udp-tracker-server" }
2324

2425
[dev-dependencies]
2526
torrust-tracker-test-helpers = { version = "3.0.0-develop", path = "../test-helpers" }

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

+11-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use bittorrent_udp_tracker_core::services::banning::BanService;
1010
use bittorrent_udp_tracker_core::{self};
1111
use tokio::sync::RwLock;
1212
use torrust_tracker_configuration::{Core, HttpApi, HttpTracker, UdpTracker};
13+
use torrust_udp_tracker_server::container::UdpTrackerServerContainer;
1314

1415
pub struct TrackerHttpApiCoreContainer {
1516
// todo: replace with TrackerCoreContainer
@@ -23,7 +24,10 @@ pub struct TrackerHttpApiCoreContainer {
2324

2425
// todo: replace with UdpTrackerCoreContainer
2526
pub ban_service: Arc<RwLock<BanService>>,
26-
pub udp_stats_repository: Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
27+
pub udp_core_stats_repository: Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
28+
29+
// todo: replace with UdpTrackerServerContainer
30+
pub udp_server_stats_repository: Arc<torrust_udp_tracker_server::statistics::repository::Repository>,
2731

2832
pub http_api_config: Arc<HttpApi>,
2933
}
@@ -39,11 +43,13 @@ impl TrackerHttpApiCoreContainer {
3943
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(core_config));
4044
let http_tracker_core_container = HttpTrackerCoreContainer::initialize_from(&tracker_core_container, http_tracker_config);
4145
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, udp_tracker_config);
46+
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(core_config);
4247

4348
Self::initialize_from(
4449
&tracker_core_container,
4550
&http_tracker_core_container,
4651
&udp_tracker_core_container,
52+
&udp_tracker_server_container,
4753
http_api_config,
4854
)
4955
}
@@ -53,6 +59,7 @@ impl TrackerHttpApiCoreContainer {
5359
tracker_core_container: &Arc<TrackerCoreContainer>,
5460
http_tracker_core_container: &Arc<HttpTrackerCoreContainer>,
5561
udp_tracker_core_container: &Arc<UdpTrackerCoreContainer>,
62+
udp_tracker_server_container: &Arc<UdpTrackerServerContainer>,
5663
http_api_config: &Arc<HttpApi>,
5764
) -> Arc<TrackerHttpApiCoreContainer> {
5865
Arc::new(TrackerHttpApiCoreContainer {
@@ -64,7 +71,9 @@ impl TrackerHttpApiCoreContainer {
6471
http_stats_repository: http_tracker_core_container.http_stats_repository.clone(),
6572

6673
ban_service: udp_tracker_core_container.ban_service.clone(),
67-
udp_stats_repository: udp_tracker_core_container.udp_stats_repository.clone(),
74+
udp_core_stats_repository: udp_tracker_core_container.udp_core_stats_repository.clone(),
75+
76+
udp_server_stats_repository: udp_tracker_server_container.udp_server_stats_repository.clone(),
6877

6978
http_api_config: http_api_config.clone(),
7079
})

packages/tracker-api-core/src/statistics/services.rs

+31-22
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ use std::sync::Arc;
22

33
use bittorrent_tracker_core::torrent::repository::in_memory::InMemoryTorrentRepository;
44
use bittorrent_udp_tracker_core::services::banning::BanService;
5-
use bittorrent_udp_tracker_core::{self, statistics};
5+
use bittorrent_udp_tracker_core::{self, statistics as udp_core_statistics};
66
use tokio::sync::RwLock;
77
use torrust_tracker_primitives::torrent_metrics::TorrentsMetrics;
8+
use torrust_udp_tracker_server::statistics as udp_server_statistics;
89

910
use crate::statistics::metrics::Metrics;
1011

@@ -27,12 +28,14 @@ pub async fn get_metrics(
2728
in_memory_torrent_repository: Arc<InMemoryTorrentRepository>,
2829
ban_service: Arc<RwLock<BanService>>,
2930
http_stats_repository: Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
30-
udp_stats_repository: Arc<statistics::repository::Repository>,
31+
udp_core_stats_repository: Arc<udp_core_statistics::repository::Repository>,
32+
udp_server_stats_repository: Arc<udp_server_statistics::repository::Repository>,
3133
) -> TrackerMetrics {
3234
let torrents_metrics = in_memory_torrent_repository.get_torrents_metrics();
3335
let udp_banned_ips_total = ban_service.read().await.get_banned_ips_total();
3436
let http_stats = http_stats_repository.get_stats().await;
35-
let udp_stats = udp_stats_repository.get_stats().await;
37+
let udp_core_stats = udp_core_stats_repository.get_stats().await;
38+
let udp_server_stats = udp_server_stats_repository.get_stats().await;
3639

3740
TrackerMetrics {
3841
torrents_metrics,
@@ -46,26 +49,26 @@ pub async fn get_metrics(
4649
tcp6_announces_handled: http_stats.tcp6_announces_handled,
4750
tcp6_scrapes_handled: http_stats.tcp6_scrapes_handled,
4851
// UDP
49-
udp_requests_aborted: udp_stats.udp_requests_aborted,
50-
udp_requests_banned: udp_stats.udp_requests_banned,
52+
udp_requests_aborted: udp_server_stats.udp_requests_aborted,
53+
udp_requests_banned: udp_server_stats.udp_requests_banned,
5154
udp_banned_ips_total: udp_banned_ips_total as u64,
52-
udp_avg_connect_processing_time_ns: udp_stats.udp_avg_connect_processing_time_ns,
53-
udp_avg_announce_processing_time_ns: udp_stats.udp_avg_announce_processing_time_ns,
54-
udp_avg_scrape_processing_time_ns: udp_stats.udp_avg_scrape_processing_time_ns,
55+
udp_avg_connect_processing_time_ns: udp_server_stats.udp_avg_connect_processing_time_ns,
56+
udp_avg_announce_processing_time_ns: udp_server_stats.udp_avg_announce_processing_time_ns,
57+
udp_avg_scrape_processing_time_ns: udp_server_stats.udp_avg_scrape_processing_time_ns,
5558
// UDPv4
56-
udp4_requests: udp_stats.udp4_requests,
57-
udp4_connections_handled: udp_stats.udp4_connections_handled,
58-
udp4_announces_handled: udp_stats.udp4_announces_handled,
59-
udp4_scrapes_handled: udp_stats.udp4_scrapes_handled,
60-
udp4_responses: udp_stats.udp4_responses,
61-
udp4_errors_handled: udp_stats.udp4_errors_handled,
59+
udp4_requests: udp_server_stats.udp4_requests,
60+
udp4_connections_handled: udp_core_stats.udp4_connections_handled,
61+
udp4_announces_handled: udp_core_stats.udp4_announces_handled,
62+
udp4_scrapes_handled: udp_core_stats.udp4_scrapes_handled,
63+
udp4_responses: udp_server_stats.udp4_responses,
64+
udp4_errors_handled: udp_server_stats.udp4_errors_handled,
6265
// UDPv6
63-
udp6_requests: udp_stats.udp6_requests,
64-
udp6_connections_handled: udp_stats.udp6_connections_handled,
65-
udp6_announces_handled: udp_stats.udp6_announces_handled,
66-
udp6_scrapes_handled: udp_stats.udp6_scrapes_handled,
67-
udp6_responses: udp_stats.udp6_responses,
68-
udp6_errors_handled: udp_stats.udp6_errors_handled,
66+
udp6_requests: udp_server_stats.udp6_requests,
67+
udp6_connections_handled: udp_core_stats.udp6_connections_handled,
68+
udp6_announces_handled: udp_core_stats.udp6_announces_handled,
69+
udp6_scrapes_handled: udp_core_stats.udp6_scrapes_handled,
70+
udp6_responses: udp_server_stats.udp6_responses,
71+
udp6_errors_handled: udp_server_stats.udp6_errors_handled,
6972
},
7073
}
7174
}
@@ -97,21 +100,27 @@ mod tests {
97100
let in_memory_torrent_repository = Arc::new(InMemoryTorrentRepository::default());
98101
let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP)));
99102

100-
// HTTP stats
103+
// HTTP core stats
101104
let (_http_stats_event_sender, http_stats_repository) =
102105
bittorrent_http_tracker_core::statistics::setup::factory(config.core.tracker_usage_statistics);
103106
let http_stats_repository = Arc::new(http_stats_repository);
104107

105-
// UDP stats
108+
// UDP core stats
106109
let (_udp_stats_event_sender, udp_stats_repository) =
107110
bittorrent_udp_tracker_core::statistics::setup::factory(config.core.tracker_usage_statistics);
108111
let udp_stats_repository = Arc::new(udp_stats_repository);
109112

113+
// UDP server stats
114+
let (_udp_server_stats_event_sender, udp_server_stats_repository) =
115+
torrust_udp_tracker_server::statistics::setup::factory(config.core.tracker_usage_statistics);
116+
let udp_server_stats_repository = Arc::new(udp_server_stats_repository);
117+
110118
let tracker_metrics = get_metrics(
111119
in_memory_torrent_repository.clone(),
112120
ban_service.clone(),
113121
http_stats_repository.clone(),
114122
udp_stats_repository.clone(),
123+
udp_server_stats_repository.clone(),
115124
)
116125
.await;
117126

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ pub struct UdpTrackerCoreContainer {
1818
pub whitelist_authorization: Arc<whitelist::authorization::WhitelistAuthorization>,
1919

2020
pub udp_tracker_config: Arc<UdpTracker>,
21-
pub udp_stats_event_sender: Arc<Option<Box<dyn statistics::event::sender::Sender>>>,
22-
pub udp_stats_repository: Arc<statistics::repository::Repository>,
21+
pub udp_core_stats_event_sender: Arc<Option<Box<dyn statistics::event::sender::Sender>>>,
22+
pub udp_core_stats_repository: Arc<statistics::repository::Repository>,
2323
pub ban_service: Arc<RwLock<BanService>>,
2424
}
2525

@@ -35,10 +35,10 @@ impl UdpTrackerCoreContainer {
3535
tracker_core_container: &Arc<TrackerCoreContainer>,
3636
udp_tracker_config: &Arc<UdpTracker>,
3737
) -> Arc<UdpTrackerCoreContainer> {
38-
let (udp_stats_event_sender, udp_stats_repository) =
38+
let (udp_core_stats_event_sender, udp_core_stats_repository) =
3939
statistics::setup::factory(tracker_core_container.core_config.tracker_usage_statistics);
40-
let udp_stats_event_sender = Arc::new(udp_stats_event_sender);
41-
let udp_stats_repository = Arc::new(udp_stats_repository);
40+
let udp_core_stats_event_sender = Arc::new(udp_core_stats_event_sender);
41+
let udp_core_stats_repository = Arc::new(udp_core_stats_repository);
4242

4343
let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP)));
4444

@@ -49,8 +49,8 @@ impl UdpTrackerCoreContainer {
4949
whitelist_authorization: tracker_core_container.whitelist_authorization.clone(),
5050

5151
udp_tracker_config: udp_tracker_config.clone(),
52-
udp_stats_event_sender: udp_stats_event_sender.clone(),
53-
udp_stats_repository: udp_stats_repository.clone(),
52+
udp_core_stats_event_sender: udp_core_stats_event_sender.clone(),
53+
udp_core_stats_repository: udp_core_stats_repository.clone(),
5454
ban_service: ban_service.clone(),
5555
})
5656
}

packages/udp-tracker-core/src/services/connect.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ mod tests {
5555

5656
#[tokio::test]
5757
async fn a_connect_response_should_contain_the_same_transaction_id_as_the_connect_request() {
58-
let (udp_stats_event_sender, _udp_stats_repository) = statistics::setup::factory(false);
59-
let udp_stats_event_sender = Arc::new(udp_stats_event_sender);
58+
let (udp_core_stats_event_sender, _udp_core_stats_repository) = statistics::setup::factory(false);
59+
let udp_core_stats_event_sender = Arc::new(udp_core_stats_event_sender);
6060

61-
let response = handle_connect(sample_ipv4_remote_addr(), &udp_stats_event_sender, sample_issue_time()).await;
61+
let response = handle_connect(sample_ipv4_remote_addr(), &udp_core_stats_event_sender, sample_issue_time()).await;
6262

6363
assert_eq!(
6464
response,
@@ -68,10 +68,10 @@ mod tests {
6868

6969
#[tokio::test]
7070
async fn a_connect_response_should_contain_a_new_connection_id() {
71-
let (udp_stats_event_sender, _udp_stats_repository) = statistics::setup::factory(false);
72-
let udp_stats_event_sender = Arc::new(udp_stats_event_sender);
71+
let (udp_core_stats_event_sender, _udp_core_stats_repository) = statistics::setup::factory(false);
72+
let udp_core_stats_event_sender = Arc::new(udp_core_stats_event_sender);
7373

74-
let response = handle_connect(sample_ipv4_remote_addr(), &udp_stats_event_sender, sample_issue_time()).await;
74+
let response = handle_connect(sample_ipv4_remote_addr(), &udp_core_stats_event_sender, sample_issue_time()).await;
7575

7676
assert_eq!(
7777
response,
@@ -81,10 +81,10 @@ mod tests {
8181

8282
#[tokio::test]
8383
async fn a_connect_response_should_contain_a_new_connection_id_ipv6() {
84-
let (udp_stats_event_sender, _udp_stats_repository) = statistics::setup::factory(false);
85-
let udp_stats_event_sender = Arc::new(udp_stats_event_sender);
84+
let (udp_core_stats_event_sender, _udp_core_stats_repository) = statistics::setup::factory(false);
85+
let udp_core_stats_event_sender = Arc::new(udp_core_stats_event_sender);
8686

87-
let response = handle_connect(sample_ipv6_remote_addr(), &udp_stats_event_sender, sample_issue_time()).await;
87+
let response = handle_connect(sample_ipv6_remote_addr(), &udp_core_stats_event_sender, sample_issue_time()).await;
8888

8989
assert_eq!(
9090
response,

0 commit comments

Comments
 (0)