Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
2522ad4
feat: [#1358] basic scaffolding for events in torrent-repository pkg
josecelano May 9, 2025
f986bda
feat: [#1358] add the and run the event listener when the tracker st…
josecelano May 9, 2025
95766bb
feat: [#1358] inject Swarms into InMemoryTorrentRepository in product…
josecelano May 9, 2025
41f4022
feat: [#1358] inject Swarms into InMemoryTorrentRepository in testing…
josecelano May 12, 2025
68b930d
feat: [#1495] expose new torrent-repositoru metrics via the REST API
josecelano May 12, 2025
2c479a1
refactor: [#1358] inject event sender in Swarms type
josecelano May 12, 2025
6d95d1a
refactor: [#1358] inject event sender in Swarm type
josecelano May 12, 2025
1eb545c
feat: [#1358] remove persistent metric from torrent-repository pkg
josecelano May 13, 2025
29a2dfd
dev: change default config
josecelano May 13, 2025
d47483f
feat: [#1358] new metric in torrent-repository: total number of torrents
josecelano May 13, 2025
ba2033b
fix: [#1358] trigger PeerRemoved event when peer is removed due to in…
josecelano May 13, 2025
269d273
refactor: [#1358] rename metric
josecelano May 13, 2025
01a9970
feat: [#1358] new metric in torrent-repository: total number of peers
josecelano May 14, 2025
daba8a0
feat: [#1358] new metric in torrent-repository: total number of downl…
josecelano May 14, 2025
c706a1b
refactor: [#1358] move logs
josecelano May 14, 2025
60c00e8
feat: [#1358] add info-hash to all torrent-repository events
josecelano May 14, 2025
dfba00c
feat: [#1358] allow disabling the event sender in the torrent-reposit…
josecelano May 14, 2025
8ee258e
refactor: [#1358] use the new field info-hash as ID for the Swarm (Ha…
josecelano May 14, 2025
c9a893c
refactor: [#1358] rename metrics for clarity
josecelano May 14, 2025
0e38707
fix: [#1358] revert Hash impl for Swarm
josecelano May 14, 2025
3d7e6ff
test: [#1358] add tests to torrust_tracker_torrent_repository::swarm:…
josecelano May 14, 2025
f71211f
test: [#1358] add tests to torrust_tracker_torrent_repository::swarms…
josecelano May 14, 2025
b13797e
test: [#1358] add tests for events in torrent-repository pkg
josecelano May 14, 2025
47d1eab
refactor: [#1358] Swarm tests to use new mock helpers
josecelano May 15, 2025
b3b0b71
refactor: [#1358] Swarm, cleaning upsert_peer method
josecelano May 15, 2025
d154b2a
refactor: [#1358] clean Swarm type
josecelano May 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ torrust-rest-tracker-api-core = { version = "3.0.0-develop", path = "packages/re
torrust-server-lib = { version = "3.0.0-develop", path = "packages/server-lib" }
torrust-tracker-clock = { version = "3.0.0-develop", path = "packages/clock" }
torrust-tracker-configuration = { version = "3.0.0-develop", path = "packages/configuration" }
torrust-tracker-torrent-repository = { version = "3.0.0-develop", path = "packages/torrent-repository" }
torrust-udp-tracker-server = { version = "3.0.0-develop", path = "packages/udp-tracker-server" }
tracing = "0"
tracing-subscriber = { version = "0", features = ["json"] }
Expand Down
1 change: 1 addition & 0 deletions packages/axum-http-tracker-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ torrust-server-lib = { version = "3.0.0-develop", path = "../server-lib" }
torrust-tracker-clock = { version = "3.0.0-develop", path = "../clock" }
torrust-tracker-configuration = { version = "3.0.0-develop", path = "../configuration" }
torrust-tracker-primitives = { version = "3.0.0-develop", path = "../primitives" }
torrust-tracker-torrent-repository = { version = "3.0.0-develop", path = "../torrent-repository" }
tower = { version = "0", features = ["timeout"] }
tower-http = { version = "0", features = ["compression-full", "cors", "propagate-header", "request-id", "trace"] }
tracing = "0"
Expand Down
19 changes: 14 additions & 5 deletions packages/axum-http-tracker-server/src/environment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use torrust_axum_server::tsl::make_rust_tls;
use torrust_server_lib::registar::Registar;
use torrust_tracker_configuration::{logging, Configuration};
use torrust_tracker_primitives::peer;
use torrust_tracker_torrent_repository::container::TorrentRepositoryContainer;

use crate::server::{HttpServer, Launcher, Running, Stopped};

Expand All @@ -24,12 +25,12 @@ pub struct Environment<S> {

impl<S> Environment<S> {
/// Add a torrent to the tracker
pub fn add_torrent_peer(&self, info_hash: &InfoHash, peer: &peer::Peer) {
let _number_of_downloads_increased = self
.container
pub async fn add_torrent_peer(&self, info_hash: &InfoHash, peer: &peer::Peer) -> bool {
self.container
.tracker_core_container
.in_memory_torrent_repository
.upsert_peer(info_hash, peer, None);
.upsert_peer(info_hash, peer, None)
.await
}
}

Expand Down Expand Up @@ -143,7 +144,15 @@ impl EnvContainer {
.expect("missing HTTP tracker configuration");
let http_tracker_config = Arc::new(http_tracker_config[0].clone());

let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
let torrent_repository_container = Arc::new(TorrentRepositoryContainer::initialize(
configuration.core.tracker_usage_statistics.into(),
));

let tracker_core_container = Arc::new(TrackerCoreContainer::initialize_from(
&core_config,
&torrent_repository_container,
));

let http_tracker_container =
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &http_tracker_config);

Expand Down
12 changes: 10 additions & 2 deletions packages/axum-http-tracker-server/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ mod tests {
use torrust_server_lib::registar::Registar;
use torrust_tracker_configuration::{logging, Configuration};
use torrust_tracker_test_helpers::configuration::ephemeral_public;
use torrust_tracker_torrent_repository::container::TorrentRepositoryContainer;

use crate::server::{HttpServer, Launcher};

Expand All @@ -279,7 +280,7 @@ mod tests {
let http_core_broadcaster = Broadcaster::default();
let http_stats_repository = Arc::new(Repository::new());
let http_stats_event_bus = Arc::new(EventBus::new(
configuration.core.tracker_usage_statistics,
configuration.core.tracker_usage_statistics.into(),
http_core_broadcaster.clone(),
));

Expand All @@ -289,7 +290,14 @@ mod tests {
let _unused = run_event_listener(http_stats_event_bus.receiver(), &http_stats_repository);
}

let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
let torrent_repository_container = Arc::new(TorrentRepositoryContainer::initialize(
configuration.core.tracker_usage_statistics.into(),
));

let tracker_core_container = Arc::new(TrackerCoreContainer::initialize_from(
&core_config,
&torrent_repository_container,
));

let announce_service = Arc::new(AnnounceService::new(
tracker_core_container.core_config.clone(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ mod tests {
let http_core_broadcaster = Broadcaster::default();
let http_stats_repository = Arc::new(Repository::new());
let http_stats_event_bus = Arc::new(EventBus::new(
config.core.tracker_usage_statistics,
config.core.tracker_usage_statistics.into(),
http_core_broadcaster.clone(),
));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ mod tests {
let http_core_broadcaster = Broadcaster::default();
let http_stats_repository = Arc::new(Repository::new());
let http_stats_event_bus = Arc::new(EventBus::new(
config.core.tracker_usage_statistics,
config.core.tracker_usage_statistics.into(),
http_core_broadcaster.clone(),
));

Expand Down
43 changes: 27 additions & 16 deletions packages/axum-http-tracker-server/tests/server/v1/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ mod for_all_config_modes {
let previously_announced_peer = PeerBuilder::default().with_peer_id(&PeerId(*b"-qB00000000000000001")).build();

// Add the Peer 1
env.add_torrent_peer(&info_hash, &previously_announced_peer);
env.add_torrent_peer(&info_hash, &previously_announced_peer).await;

// Announce the new Peer 2. This new peer is non included on the response peer list
let response = Client::new(*env.bind_address())
Expand Down Expand Up @@ -517,7 +517,7 @@ mod for_all_config_modes {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_peer_addr(&SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0x69, 0x69, 0x69, 0x69)), 8080))
.build();
env.add_torrent_peer(&info_hash, &peer_using_ipv4);
env.add_torrent_peer(&info_hash, &peer_using_ipv4).await;

// Announce a peer using IPV6
let peer_using_ipv6 = PeerBuilder::default()
Expand All @@ -527,7 +527,7 @@ mod for_all_config_modes {
8080,
))
.build();
env.add_torrent_peer(&info_hash, &peer_using_ipv6);
env.add_torrent_peer(&info_hash, &peer_using_ipv6).await;

// Announce the new Peer.
let response = Client::new(*env.bind_address())
Expand Down Expand Up @@ -625,7 +625,7 @@ mod for_all_config_modes {
let previously_announced_peer = PeerBuilder::default().with_peer_id(&PeerId(*b"-qB00000000000000001")).build();

// Add the Peer 1
env.add_torrent_peer(&info_hash, &previously_announced_peer);
env.add_torrent_peer(&info_hash, &previously_announced_peer).await;

// Announce the new Peer 2 accepting compact responses
let response = Client::new(*env.bind_address())
Expand Down Expand Up @@ -666,7 +666,7 @@ mod for_all_config_modes {
let previously_announced_peer = PeerBuilder::default().with_peer_id(&PeerId(*b"-qB00000000000000001")).build();

// Add the Peer 1
env.add_torrent_peer(&info_hash, &previously_announced_peer);
env.add_torrent_peer(&info_hash, &previously_announced_peer).await;

// Announce the new Peer 2 without passing the "compact" param
// By default it should respond with the compact peer list
Expand Down Expand Up @@ -787,7 +787,8 @@ mod for_all_config_modes {
.container
.tracker_core_container
.in_memory_torrent_repository
.get_torrent_peers(&info_hash);
.get_torrent_peers(&info_hash)
.await;
let peer_addr = peers[0].peer_addr;

assert_eq!(peer_addr.ip(), client_ip);
Expand Down Expand Up @@ -829,7 +830,8 @@ mod for_all_config_modes {
.container
.tracker_core_container
.in_memory_torrent_repository
.get_torrent_peers(&info_hash);
.get_torrent_peers(&info_hash)
.await;
let peer_addr = peers[0].peer_addr;

assert_eq!(
Expand Down Expand Up @@ -878,7 +880,8 @@ mod for_all_config_modes {
.container
.tracker_core_container
.in_memory_torrent_repository
.get_torrent_peers(&info_hash);
.get_torrent_peers(&info_hash)
.await;
let peer_addr = peers[0].peer_addr;

assert_eq!(
Expand Down Expand Up @@ -925,7 +928,8 @@ mod for_all_config_modes {
.container
.tracker_core_container
.in_memory_torrent_repository
.get_torrent_peers(&info_hash);
.get_torrent_peers(&info_hash)
.await;
let peer_addr = peers[0].peer_addr;

assert_eq!(peer_addr.ip(), IpAddr::from_str("150.172.238.178").unwrap());
Expand Down Expand Up @@ -1010,7 +1014,8 @@ mod for_all_config_modes {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_bytes_pending_to_download(1)
.build(),
);
)
.await;

let response = Client::new(*env.bind_address())
.scrape(
Expand Down Expand Up @@ -1050,7 +1055,8 @@ mod for_all_config_modes {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_no_bytes_pending_to_download()
.build(),
);
)
.await;

let response = Client::new(*env.bind_address())
.scrape(
Expand Down Expand Up @@ -1282,7 +1288,8 @@ mod configured_as_whitelisted {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_bytes_pending_to_download(1)
.build(),
);
)
.await;

let response = Client::new(*env.bind_address())
.scrape(
Expand Down Expand Up @@ -1318,7 +1325,8 @@ mod configured_as_whitelisted {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_bytes_pending_to_download(1)
.build(),
);
)
.await;

env.container
.tracker_core_container
Expand Down Expand Up @@ -1494,7 +1502,8 @@ mod configured_as_private {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_bytes_pending_to_download(1)
.build(),
);
)
.await;

let response = Client::new(*env.bind_address())
.scrape(
Expand Down Expand Up @@ -1525,7 +1534,8 @@ mod configured_as_private {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_bytes_pending_to_download(1)
.build(),
);
)
.await;

let expiring_key = env
.container
Expand Down Expand Up @@ -1576,7 +1586,8 @@ mod configured_as_private {
.with_peer_id(&PeerId(*b"-qB00000000000000001"))
.with_bytes_pending_to_download(1)
.build(),
);
)
.await;

let false_key: Key = "YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ".parse().unwrap();

Expand Down
1 change: 1 addition & 0 deletions packages/axum-rest-tracker-api-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ torrust-tracker-clock = { version = "3.0.0-develop", path = "../clock" }
torrust-tracker-configuration = { version = "3.0.0-develop", path = "../configuration" }
torrust-tracker-metrics = { version = "3.0.0-develop", path = "../metrics" }
torrust-tracker-primitives = { version = "3.0.0-develop", path = "../primitives" }
torrust-tracker-torrent-repository = { version = "3.0.0-develop", path = "../torrent-repository" }
torrust-udp-tracker-server = { version = "3.0.0-develop", path = "../udp-tracker-server" }
tower = { version = "0", features = ["timeout"] }
tower-http = { version = "0", features = ["compression-full", "cors", "propagate-header", "request-id", "trace"] }
Expand Down
22 changes: 17 additions & 5 deletions packages/axum-rest-tracker-api-server/src/environment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use torrust_rest_tracker_api_core::container::TrackerHttpApiCoreContainer;
use torrust_server_lib::registar::Registar;
use torrust_tracker_configuration::{logging, Configuration};
use torrust_tracker_primitives::peer;
use torrust_tracker_torrent_repository::container::TorrentRepositoryContainer;
use torrust_udp_tracker_server::container::UdpTrackerServerContainer;

use crate::server::{ApiServer, Launcher, Running, Stopped};
Expand All @@ -32,12 +33,12 @@ where
S: std::fmt::Debug + std::fmt::Display,
{
/// Add a torrent to the tracker
pub fn add_torrent_peer(&self, info_hash: &InfoHash, peer: &peer::Peer) {
let _number_of_downloads_increased = self
.container
pub async fn add_torrent_peer(&self, info_hash: &InfoHash, peer: &peer::Peer) -> bool {
self.container
.tracker_core_container
.in_memory_torrent_repository
.upsert_peer(info_hash, peer, None);
.upsert_peer(info_hash, peer, None)
.await
}
}

Expand Down Expand Up @@ -172,14 +173,25 @@ impl EnvContainer {
.clone(),
);

let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
let torrent_repository_container = Arc::new(TorrentRepositoryContainer::initialize(
core_config.tracker_usage_statistics.into(),
));

let tracker_core_container = Arc::new(TrackerCoreContainer::initialize_from(
&core_config,
&torrent_repository_container,
));

let http_tracker_core_container =
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &http_tracker_config);

let udp_tracker_core_container =
UdpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &udp_tracker_config);

let udp_tracker_server_container = UdpTrackerServerContainer::initialize(&core_config);

let tracker_http_api_core_container = TrackerHttpApiCoreContainer::initialize_from(
&torrent_repository_container,
&tracker_core_container,
&http_tracker_core_container,
&udp_tracker_core_container,
Expand Down
Loading
Loading