Skip to content

Commit 29b00c8

Browse files
committed
refactor: [torrust#1480] use the new events crate in http-tracker-core pkg
1 parent 934d45e commit 29b00c8

File tree

11 files changed

+37
-117
lines changed

11 files changed

+37
-117
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ serde_bencode = "0"
4545
serde_bytes = "0"
4646
serde_repr = "0"
4747
torrust-tracker-clock = { version = "3.0.0-develop", path = "../clock" }
48+
torrust-tracker-events = { version = "3.0.0-develop", path = "../events" }
4849
torrust-tracker-test-helpers = { version = "3.0.0-develop", path = "../test-helpers" }
4950
uuid = { version = "1", features = ["v4"] }
5051
zerocopy = "0.7"

packages/axum-http-tracker-server/src/v1/handlers/scrape.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ mod tests {
107107
}
108108

109109
struct CoreHttpTrackerServices {
110-
pub http_stats_event_sender: Arc<Option<Box<dyn bittorrent_http_tracker_core::event::sender::Sender>>>,
110+
pub http_stats_event_sender: bittorrent_http_tracker_core::event::sender::Sender,
111111
}
112112

113113
fn initialize_private_tracker() -> (CoreTrackerServices, CoreHttpTrackerServices) {

packages/http-tracker-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ thiserror = "2"
2525
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread", "signal", "sync"] }
2626
torrust-tracker-clock = { version = "3.0.0-develop", path = "../clock" }
2727
torrust-tracker-configuration = { version = "3.0.0-develop", path = "../configuration" }
28+
torrust-tracker-events = { version = "3.0.0-develop", path = "../events" }
2829
torrust-tracker-metrics = { version = "3.0.0-develop", path = "../metrics" }
2930
torrust-tracker-primitives = { version = "3.0.0-develop", path = "../primitives" }
3031
tracing = "0"

packages/http-tracker-core/benches/helpers/util.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::net::{IpAddr, Ipv4Addr, SocketAddr};
22
use std::sync::Arc;
33

44
use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes, PeerId};
5-
use bittorrent_http_tracker_core::event;
65
use bittorrent_http_tracker_core::event::bus::EventBus;
76
use bittorrent_http_tracker_core::event::sender::Broadcaster;
87
use bittorrent_http_tracker_core::event::Event;
@@ -35,7 +34,7 @@ pub struct CoreTrackerServices {
3534
}
3635

3736
pub struct CoreHttpTrackerServices {
38-
pub http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
37+
pub http_stats_event_sender: bittorrent_http_tracker_core::event::sender::Sender,
3938
}
4039

4140
pub fn initialize_core_tracker_services() -> (CoreTrackerServices, CoreHttpTrackerServices) {
@@ -125,7 +124,9 @@ pub fn sample_info_hash() -> InfoHash {
125124

126125
mock! {
127126
HttpStatsEventSender {}
128-
impl event::sender::Sender for HttpStatsEventSender {
129-
fn send_event(&self, event: Event) -> BoxFuture<'static,Option<Result<usize,SendError<Event> > > > ;
127+
impl torrust_tracker_events::sender::Sender for HttpStatsEventSender {
128+
type Event = Event;
129+
130+
fn send_event(&self, event: Event) -> BoxFuture<'static,Option<Result<usize,SendError<Event> > > > ;
130131
}
131132
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub struct HttpTrackerCoreContainer {
1717

1818
// `HttpTrackerCoreServices`
1919
pub event_bus: Arc<event::bus::EventBus>,
20-
pub stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
20+
pub stats_event_sender: event::sender::Sender,
2121
pub stats_repository: Arc<statistics::repository::Repository>,
2222
pub announce_service: Arc<AnnounceService>,
2323
pub scrape_service: Arc<ScrapeService>,
@@ -59,7 +59,7 @@ impl HttpTrackerCoreContainer {
5959

6060
pub struct HttpTrackerCoreServices {
6161
pub event_bus: Arc<event::bus::EventBus>,
62-
pub stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
62+
pub stats_event_sender: event::sender::Sender,
6363
pub stats_repository: Arc<statistics::repository::Repository>,
6464
pub announce_service: Arc<services::announce::AnnounceService>,
6565
pub scrape_service: Arc<services::scrape::ScrapeService>,
Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,3 @@
1-
use std::sync::Arc;
2-
3-
use tokio::sync::broadcast::Receiver;
4-
5-
use crate::event::sender::{self, Broadcaster};
61
use crate::event::Event;
72

8-
pub struct EventBus {
9-
pub enable_sender: bool,
10-
pub broadcaster: Broadcaster,
11-
}
12-
13-
impl Default for EventBus {
14-
fn default() -> Self {
15-
let enable_sender = true;
16-
let broadcaster = Broadcaster::default();
17-
18-
Self::new(enable_sender, broadcaster)
19-
}
20-
}
21-
22-
impl EventBus {
23-
#[must_use]
24-
pub fn new(enable_sender: bool, broadcaster: Broadcaster) -> Self {
25-
Self {
26-
enable_sender,
27-
broadcaster,
28-
}
29-
}
30-
31-
#[must_use]
32-
pub fn sender(&self) -> Arc<Option<Box<dyn sender::Sender>>> {
33-
if self.enable_sender {
34-
Arc::new(Some(Box::new(self.broadcaster.clone())))
35-
} else {
36-
Arc::new(None)
37-
}
38-
}
39-
40-
#[must_use]
41-
pub fn receiver(&self) -> Receiver<Event> {
42-
self.broadcaster.subscribe()
43-
}
44-
}
3+
pub type EventBus = torrust_tracker_events::bus::EventBus<Event>;
Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,6 @@
1-
use futures::future::BoxFuture;
2-
use futures::FutureExt;
3-
#[cfg(test)]
4-
use mockall::{automock, predicate::str};
5-
use tokio::sync::broadcast;
6-
use tokio::sync::broadcast::error::SendError;
1+
use std::sync::Arc;
72

83
use super::Event;
94

10-
const CHANNEL_CAPACITY: usize = 32768;
11-
12-
/// A trait for sending sending.
13-
#[cfg_attr(test, automock)]
14-
pub trait Sender: Sync + Send {
15-
fn send_event(&self, event: Event) -> BoxFuture<'_, Option<Result<usize, SendError<Event>>>>;
16-
}
17-
18-
/// An event sender implementation using a broadcast channel.
19-
#[derive(Clone)]
20-
pub struct Broadcaster {
21-
pub(crate) sender: broadcast::Sender<Event>,
22-
}
23-
24-
impl Sender for Broadcaster {
25-
fn send_event(&self, event: Event) -> BoxFuture<'_, Option<Result<usize, SendError<Event>>>> {
26-
async move { Some(self.sender.send(event)) }.boxed()
27-
}
28-
}
29-
30-
impl Default for Broadcaster {
31-
fn default() -> Self {
32-
let (sender, _) = broadcast::channel(CHANNEL_CAPACITY);
33-
Self { sender }
34-
}
35-
}
36-
37-
impl Broadcaster {
38-
#[must_use]
39-
pub fn subscribe(&self) -> broadcast::Receiver<Event> {
40-
self.sender.subscribe()
41-
}
42-
}
5+
pub type Sender = Arc<Option<Box<dyn torrust_tracker_events::sender::Sender<Event = Event>>>>;
6+
pub type Broadcaster = torrust_tracker_events::broadcaster::Broadcaster<Event>;

packages/http-tracker-core/src/services/announce.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub struct AnnounceService {
3939
announce_handler: Arc<AnnounceHandler>,
4040
authentication_service: Arc<AuthenticationService>,
4141
whitelist_authorization: Arc<whitelist::authorization::WhitelistAuthorization>,
42-
opt_http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
42+
opt_http_stats_event_sender: event::sender::Sender,
4343
}
4444

4545
impl AnnounceService {
@@ -49,7 +49,7 @@ impl AnnounceService {
4949
announce_handler: Arc<AnnounceHandler>,
5050
authentication_service: Arc<AuthenticationService>,
5151
whitelist_authorization: Arc<whitelist::authorization::WhitelistAuthorization>,
52-
opt_http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
52+
opt_http_stats_event_sender: event::sender::Sender,
5353
) -> Self {
5454
Self {
5555
core_config,
@@ -228,7 +228,7 @@ mod tests {
228228
}
229229

230230
struct CoreHttpTrackerServices {
231-
pub http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
231+
pub http_stats_event_sender: crate::event::sender::Sender,
232232
}
233233

234234
fn initialize_core_tracker_services() -> (CoreTrackerServices, CoreHttpTrackerServices) {
@@ -302,7 +302,6 @@ mod tests {
302302
use mockall::mock;
303303
use tokio::sync::broadcast::error::SendError;
304304

305-
use crate::event;
306305
use crate::event::bus::EventBus;
307306
use crate::event::sender::Broadcaster;
308307
use crate::event::Event;
@@ -312,8 +311,10 @@ mod tests {
312311

313312
mock! {
314313
HttpStatsEventSender {}
315-
impl event::sender::Sender for HttpStatsEventSender {
316-
fn send_event(&self, event: Event) -> BoxFuture<'static,Option<Result<usize,SendError<Event> > > > ;
314+
impl torrust_tracker_events::sender::Sender for HttpStatsEventSender {
315+
type Event = Event;
316+
317+
fn send_event(&self, event: Event) -> BoxFuture<'static,Option<Result<usize,SendError<Event> > > > ;
317318
}
318319
}
319320

@@ -331,7 +332,6 @@ mod tests {
331332
use torrust_tracker_primitives::swarm_metadata::SwarmMetadata;
332333
use torrust_tracker_test_helpers::configuration;
333334

334-
use crate::event;
335335
use crate::event::test::announce_events_match;
336336
use crate::event::{ConnectionContext, Event};
337337
use crate::services::announce::tests::{
@@ -411,8 +411,7 @@ mod tests {
411411
}))
412412
.times(1)
413413
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
414-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
415-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
414+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
416415

417416
let (core_tracker_services, mut core_http_tracker_services) = initialize_core_tracker_services();
418417

@@ -489,8 +488,7 @@ mod tests {
489488
.times(1)
490489
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
491490

492-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
493-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
491+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
494492

495493
let (core_tracker_services, mut core_http_tracker_services) =
496494
initialize_core_tracker_services_with_config(&tracker_with_an_ipv6_external_ip());
@@ -537,8 +535,7 @@ mod tests {
537535
}))
538536
.times(1)
539537
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
540-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
541-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
538+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
542539

543540
let (core_tracker_services, mut core_http_tracker_services) = initialize_core_tracker_services();
544541
core_http_tracker_services.http_stats_event_sender = http_stats_event_sender;

packages/http-tracker-core/src/services/scrape.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ use torrust_tracker_configuration::Core;
2121
use torrust_tracker_primitives::core::ScrapeData;
2222
use torrust_tracker_primitives::service_binding::ServiceBinding;
2323

24-
use crate::event;
2524
use crate::event::{ConnectionContext, Event};
2625

2726
/// The HTTP tracker `scrape` service.
@@ -40,7 +39,7 @@ pub struct ScrapeService {
4039
core_config: Arc<Core>,
4140
scrape_handler: Arc<ScrapeHandler>,
4241
authentication_service: Arc<AuthenticationService>,
43-
opt_http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
42+
opt_http_stats_event_sender: crate::event::sender::Sender,
4443
}
4544

4645
impl ScrapeService {
@@ -49,7 +48,7 @@ impl ScrapeService {
4948
core_config: Arc<Core>,
5049
scrape_handler: Arc<ScrapeHandler>,
5150
authentication_service: Arc<AuthenticationService>,
52-
opt_http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
51+
opt_http_stats_event_sender: crate::event::sender::Sender,
5352
) -> Self {
5453
Self {
5554
core_config,
@@ -187,7 +186,7 @@ mod tests {
187186
use torrust_tracker_configuration::Configuration;
188187
use torrust_tracker_primitives::{peer, DurationSinceUnixEpoch};
189188

190-
use crate::event::{self, Event};
189+
use crate::event::Event;
191190
use crate::tests::sample_info_hash;
192191

193192
struct Container {
@@ -239,7 +238,9 @@ mod tests {
239238

240239
mock! {
241240
HttpStatsEventSender {}
242-
impl event::sender::Sender for HttpStatsEventSender {
241+
impl torrust_tracker_events::sender::Sender for HttpStatsEventSender {
242+
type Event = Event;
243+
243244
fn send_event(&self, event: Event) -> BoxFuture<'static,Option<Result<usize,SendError<Event> > > > ;
244245
}
245246
}
@@ -259,7 +260,6 @@ mod tests {
259260
use torrust_tracker_primitives::swarm_metadata::SwarmMetadata;
260261
use torrust_tracker_test_helpers::configuration;
261262

262-
use crate::event;
263263
use crate::event::bus::EventBus;
264264
use crate::event::sender::Broadcaster;
265265
use crate::event::{ConnectionContext, Event};
@@ -350,8 +350,7 @@ mod tests {
350350
}))
351351
.times(1)
352352
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
353-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
354-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
353+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
355354

356355
let container = initialize_services_with_configuration(&config);
357356

@@ -405,8 +404,7 @@ mod tests {
405404
}))
406405
.times(1)
407406
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
408-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
409-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
407+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
410408

411409
let container = initialize_services_with_configuration(&config);
412410

@@ -452,7 +450,6 @@ mod tests {
452450
use torrust_tracker_primitives::service_binding::{Protocol, ServiceBinding};
453451
use torrust_tracker_test_helpers::configuration;
454452

455-
use crate::event;
456453
use crate::event::bus::EventBus;
457454
use crate::event::sender::Broadcaster;
458455
use crate::event::{ConnectionContext, Event};
@@ -537,8 +534,7 @@ mod tests {
537534
}))
538535
.times(1)
539536
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
540-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
541-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
537+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
542538

543539
let peer_ip = IpAddr::V4(Ipv4Addr::new(126, 0, 0, 1));
544540

@@ -592,8 +588,7 @@ mod tests {
592588
}))
593589
.times(1)
594590
.returning(|_| Box::pin(future::ready(Some(Ok(1)))));
595-
let http_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>> =
596-
Arc::new(Some(Box::new(http_stats_event_sender_mock)));
591+
let http_stats_event_sender: crate::event::sender::Sender = Arc::new(Some(Box::new(http_stats_event_sender_mock)));
597592

598593
let peer_ip = IpAddr::V6(Ipv6Addr::new(0x6969, 0x6969, 0x6969, 0x6969, 0x6969, 0x6969, 0x6969, 0x6969));
599594

0 commit comments

Comments
 (0)