Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: torrust/torrust-tracker
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 438a6720fd7b3ed458deb698a79e16b279319a94
Choose a base ref
..
head repository: torrust/torrust-tracker
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 943be2b5743615ed236d269c9175c2a7923c8c6c
Choose a head ref
4 changes: 2 additions & 2 deletions src/core/mod.rs
Original file line number Diff line number Diff line change
@@ -505,7 +505,7 @@ pub struct Tracker {
torrents: Arc<Torrents>,

/// Service to send stats events.
stats_event_sender: Option<Box<dyn statistics::event::sender::EventSender>>,
stats_event_sender: Option<Box<dyn statistics::event::sender::Sender>>,

/// The in-memory stats repo.
stats_repository: statistics::repository::Repository,
@@ -624,7 +624,7 @@ impl Tracker {
/// Will return a `databases::error::Error` if unable to connect to database. The `Tracker` is responsible for the persistence.
pub fn new(
config: &Core,
stats_event_sender: Option<Box<dyn statistics::event::sender::EventSender>>,
stats_event_sender: Option<Box<dyn statistics::event::sender::Sender>>,
stats_repository: statistics::repository::Repository,
) -> Result<Tracker, databases::error::Error> {
let driver = match config.database.driver {
2 changes: 1 addition & 1 deletion src/core/services/statistics/setup.rs
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@ use crate::core::statistics;
pub fn factory(
tracker_usage_statistics: bool,
) -> (
Option<Box<dyn statistics::event::sender::EventSender>>,
Option<Box<dyn statistics::event::sender::Sender>>,
statistics::repository::Repository,
) {
let mut stats_event_sender = None;
32 changes: 16 additions & 16 deletions src/core/statistics/event/handler.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::core::statistics::event::Event;
use crate::core::statistics::repository::Repository;

pub async fn event_handler(event: Event, stats_repository: &Repository) {
pub async fn handle_event(event: Event, stats_repository: &Repository) {
match event {
// TCP4
Event::Tcp4Announce => {
@@ -74,15 +74,15 @@ pub async fn event_handler(event: Event, stats_repository: &Repository) {

#[cfg(test)]
mod tests {
use crate::core::statistics::event::handler::event_handler;
use crate::core::statistics::event::handler::handle_event;
use crate::core::statistics::event::Event;
use crate::core::statistics::repository::Repository;

#[tokio::test]
async fn should_increase_the_tcp4_announces_counter_when_it_receives_a_tcp4_announce_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp4Announce, &stats_repository).await;
handle_event(Event::Tcp4Announce, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -93,7 +93,7 @@ mod tests {
async fn should_increase_the_tcp4_connections_counter_when_it_receives_a_tcp4_announce_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp4Announce, &stats_repository).await;
handle_event(Event::Tcp4Announce, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -104,7 +104,7 @@ mod tests {
async fn should_increase_the_tcp4_scrapes_counter_when_it_receives_a_tcp4_scrape_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp4Scrape, &stats_repository).await;
handle_event(Event::Tcp4Scrape, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -115,7 +115,7 @@ mod tests {
async fn should_increase_the_tcp4_connections_counter_when_it_receives_a_tcp4_scrape_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp4Scrape, &stats_repository).await;
handle_event(Event::Tcp4Scrape, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -126,7 +126,7 @@ mod tests {
async fn should_increase_the_tcp6_announces_counter_when_it_receives_a_tcp6_announce_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp6Announce, &stats_repository).await;
handle_event(Event::Tcp6Announce, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -137,7 +137,7 @@ mod tests {
async fn should_increase_the_tcp6_connections_counter_when_it_receives_a_tcp6_announce_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp6Announce, &stats_repository).await;
handle_event(Event::Tcp6Announce, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -148,7 +148,7 @@ mod tests {
async fn should_increase_the_tcp6_scrapes_counter_when_it_receives_a_tcp6_scrape_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp6Scrape, &stats_repository).await;
handle_event(Event::Tcp6Scrape, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -159,7 +159,7 @@ mod tests {
async fn should_increase_the_tcp6_connections_counter_when_it_receives_a_tcp6_scrape_event() {
let stats_repository = Repository::new();

event_handler(Event::Tcp6Scrape, &stats_repository).await;
handle_event(Event::Tcp6Scrape, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -170,7 +170,7 @@ mod tests {
async fn should_increase_the_udp4_connections_counter_when_it_receives_a_udp4_connect_event() {
let stats_repository = Repository::new();

event_handler(Event::Udp4Connect, &stats_repository).await;
handle_event(Event::Udp4Connect, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -181,7 +181,7 @@ mod tests {
async fn should_increase_the_udp4_announces_counter_when_it_receives_a_udp4_announce_event() {
let stats_repository = Repository::new();

event_handler(Event::Udp4Announce, &stats_repository).await;
handle_event(Event::Udp4Announce, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -192,7 +192,7 @@ mod tests {
async fn should_increase_the_udp4_scrapes_counter_when_it_receives_a_udp4_scrape_event() {
let stats_repository = Repository::new();

event_handler(Event::Udp4Scrape, &stats_repository).await;
handle_event(Event::Udp4Scrape, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -203,7 +203,7 @@ mod tests {
async fn should_increase_the_udp6_connections_counter_when_it_receives_a_udp6_connect_event() {
let stats_repository = Repository::new();

event_handler(Event::Udp6Connect, &stats_repository).await;
handle_event(Event::Udp6Connect, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -214,7 +214,7 @@ mod tests {
async fn should_increase_the_udp6_announces_counter_when_it_receives_a_udp6_announce_event() {
let stats_repository = Repository::new();

event_handler(Event::Udp6Announce, &stats_repository).await;
handle_event(Event::Udp6Announce, &stats_repository).await;

let stats = stats_repository.get_stats().await;

@@ -225,7 +225,7 @@ mod tests {
async fn should_increase_the_udp6_scrapes_counter_when_it_receives_a_udp6_scrape_event() {
let stats_repository = Repository::new();

event_handler(Event::Udp6Scrape, &stats_repository).await;
handle_event(Event::Udp6Scrape, &stats_repository).await;

let stats = stats_repository.get_stats().await;

6 changes: 3 additions & 3 deletions src/core/statistics/event/listener.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use tokio::sync::mpsc;

use super::handler::event_handler;
use super::handler::handle_event;
use super::Event;
use crate::core::statistics::repository::Repository;

pub async fn event_listener(mut receiver: mpsc::Receiver<Event>, stats_repository: Repository) {
pub async fn dispatch_events(mut receiver: mpsc::Receiver<Event>, stats_repository: Repository) {
while let Some(event) = receiver.recv().await {
event_handler(event, &stats_repository).await;
handle_event(event, &stats_repository).await;
}
}
6 changes: 3 additions & 3 deletions src/core/statistics/event/sender.rs
Original file line number Diff line number Diff line change
@@ -9,19 +9,19 @@ use super::Event;

/// A trait to allow sending statistics events
#[cfg_attr(test, automock)]
pub trait EventSender: Sync + Send {
pub trait Sender: Sync + Send {
fn send_event(&self, event: Event) -> BoxFuture<'_, Option<Result<(), SendError<Event>>>>;
}

/// An [`statistics::EventSender`](crate::core::statistics::EventSender) implementation.
///
/// It uses a channel sender to send the statistic events. The channel is created by a
/// [`statistics::Keeper`](crate::core::statistics::Keeper)
pub struct Sender {
pub struct ChannelSender {
pub(crate) sender: mpsc::Sender<Event>,
}

impl EventSender for Sender {
impl Sender for ChannelSender {
fn send_event(&self, event: Event) -> BoxFuture<'_, Option<Result<(), SendError<Event>>>> {
async move { Some(self.sender.send(event).await) }.boxed()
}
12 changes: 6 additions & 6 deletions src/core/statistics/keeper.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use tokio::sync::mpsc;

use super::event::listener::event_listener;
use super::event::sender::{EventSender, Sender};
use super::event::listener::dispatch_events;
use super::event::sender::{ChannelSender, Sender};
use super::event::Event;
use super::repository::Repository;

@@ -30,22 +30,22 @@ impl Keeper {
}

#[must_use]
pub fn new_active_instance() -> (Box<dyn EventSender>, Repository) {
pub fn new_active_instance() -> (Box<dyn Sender>, Repository) {
let mut stats_tracker = Self::new();

let stats_event_sender = stats_tracker.run_event_listener();

(stats_event_sender, stats_tracker.repository)
}

pub fn run_event_listener(&mut self) -> Box<dyn EventSender> {
pub fn run_event_listener(&mut self) -> Box<dyn Sender> {
let (sender, receiver) = mpsc::channel::<Event>(CHANNEL_BUFFER_SIZE);

let stats_repository = self.repository.clone();

tokio::spawn(async move { event_listener(receiver, stats_repository).await });
tokio::spawn(async move { dispatch_events(receiver, stats_repository).await });

Box::new(Sender { sender })
Box::new(ChannelSender { sender })
}
}

8 changes: 4 additions & 4 deletions src/servers/http/v1/services/announce.rs
Original file line number Diff line number Diff line change
@@ -132,7 +132,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_tcp_4_announce_event_when_the_peer_uses_ipv4() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp4Announce))
@@ -154,7 +154,7 @@ mod tests {
let _announce_data = invoke(tracker, sample_info_hash(), &mut peer, &PeersWanted::All).await;
}

fn tracker_with_an_ipv6_external_ip(stats_event_sender: Box<dyn statistics::event::sender::EventSender>) -> Tracker {
fn tracker_with_an_ipv6_external_ip(stats_event_sender: Box<dyn statistics::event::sender::Sender>) -> Tracker {
let mut configuration = configuration::ephemeral();
configuration.core.net.external_ip = Some(IpAddr::V6(Ipv6Addr::new(
0x6969, 0x6969, 0x6969, 0x6969, 0x6969, 0x6969, 0x6969, 0x6969,
@@ -181,7 +181,7 @@ mod tests {
// Tracker changes the peer IP to the tracker external IP when the peer is using the loopback IP.

// Assert that the event sent is a TCP4 event
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp4Announce))
@@ -203,7 +203,7 @@ mod tests {
#[tokio::test]
async fn it_should_send_the_tcp_6_announce_event_when_the_peer_uses_ipv6_even_if_the_tracker_changes_the_peer_ip_to_ipv4()
{
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp6Announce))
8 changes: 4 additions & 4 deletions src/servers/http/v1/services/scrape.rs
Original file line number Diff line number Diff line change
@@ -138,7 +138,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_tcp_4_scrape_event_when_the_peer_uses_ipv4() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp4Scrape))
@@ -162,7 +162,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_tcp_6_scrape_event_when_the_peer_uses_ipv6() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp6Scrape))
@@ -221,7 +221,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_tcp_4_scrape_event_when_the_peer_uses_ipv4() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp4Scrape))
@@ -245,7 +245,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_tcp_6_scrape_event_when_the_peer_uses_ipv6() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Tcp6Scrape))
12 changes: 6 additions & 6 deletions src/servers/udp/handlers.rs
Original file line number Diff line number Diff line change
@@ -602,7 +602,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_upd4_connect_event_when_a_client_tries_to_connect_using_a_ip4_socket_address() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Udp4Connect))
@@ -631,7 +631,7 @@ mod tests {

#[tokio::test]
async fn it_should_send_the_upd6_connect_event_when_a_client_tries_to_connect_using_a_ip6_socket_address() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Udp6Connect))
@@ -892,7 +892,7 @@ mod tests {

#[tokio::test]
async fn should_send_the_upd4_announce_event() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Udp4Announce))
@@ -1138,7 +1138,7 @@ mod tests {

#[tokio::test]
async fn should_send_the_upd6_announce_event() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Udp6Announce))
@@ -1434,7 +1434,7 @@ mod tests {

#[tokio::test]
async fn should_send_the_upd4_scrape_event() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Udp4Scrape))
@@ -1478,7 +1478,7 @@ mod tests {

#[tokio::test]
async fn should_send_the_upd6_scrape_event() {
let mut stats_event_sender_mock = statistics::event::sender::MockEventSender::new();
let mut stats_event_sender_mock = statistics::event::sender::MockSender::new();
stats_event_sender_mock
.expect_send_event()
.with(eq(statistics::event::Event::Udp6Scrape))