Skip to content

Commit 8b6776d

Browse files
committed
feat: [#1495] expose new torrent-repositoru metrics via the REST API
These are the new metrics in JSON format: http://localhost:1212/api/v1/metrics?token=MyAccessToken ```json { "metrics": [ { "kind": "counter", "name": "torrent_repository_persistent_torrents_downloads_total", "samples": [] }, { "kind": "counter", "name": "torrent_repository_runtime_torrents_downloads_total", "samples": [] } ] } ```
1 parent 11f85bd commit 8b6776d

File tree

6 files changed

+36
-5
lines changed

6 files changed

+36
-5
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ impl EnvContainer {
189189
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(&core_config);
190190

191191
let tracker_http_api_core_container = TrackerHttpApiCoreContainer::initialize_from(
192+
&torrent_repository_container,
192193
&tracker_core_container,
193194
&http_tracker_core_container,
194195
&udp_tracker_core_container,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ pub async fn get_metrics_handler(
6969
State(state): State<(
7070
Arc<InMemoryTorrentRepository>,
7171
Arc<RwLock<BanService>>,
72+
Arc<torrust_tracker_torrent_repository::statistics::repository::Repository>,
7273
Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
7374
Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
7475
Arc<torrust_udp_tracker_server::statistics::repository::Repository>,
@@ -81,6 +82,7 @@ pub async fn get_metrics_handler(
8182
state.2.clone(),
8283
state.3.clone(),
8384
state.4.clone(),
85+
state.5.clone(),
8486
)
8587
.await;
8688

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ pub fn add(prefix: &str, router: Router, http_api_container: &Arc<TrackerHttpApi
2828
get(get_metrics_handler).with_state((
2929
http_api_container.tracker_core_container.in_memory_torrent_repository.clone(),
3030
http_api_container.ban_service.clone(),
31+
http_api_container.torrent_repository_container.stats_repository.clone(),
3132
http_api_container.http_stats_repository.clone(),
3233
http_api_container.udp_core_stats_repository.clone(),
3334
http_api_container.udp_server_stats_repository.clone(),

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,17 @@ use torrust_udp_tracker_server::container::UdpTrackerServerContainer;
1212

1313
pub struct TrackerHttpApiCoreContainer {
1414
pub http_api_config: Arc<HttpApi>,
15+
16+
// Torrent repository
17+
pub torrent_repository_container: Arc<TorrentRepositoryContainer>,
18+
19+
// Tracker core
1520
pub tracker_core_container: Arc<TrackerCoreContainer>,
21+
22+
// HTTP tracker core
1623
pub http_stats_repository: Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
24+
25+
// UDP tracker core
1726
pub ban_service: Arc<RwLock<BanService>>,
1827
pub udp_core_stats_repository: Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
1928
pub udp_server_stats_repository: Arc<torrust_udp_tracker_server::statistics::repository::Repository>,
@@ -43,6 +52,7 @@ impl TrackerHttpApiCoreContainer {
4352
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(core_config);
4453

4554
Self::initialize_from(
55+
&torrent_repository_container,
4656
&tracker_core_container,
4757
&http_tracker_core_container,
4858
&udp_tracker_core_container,
@@ -53,23 +63,29 @@ impl TrackerHttpApiCoreContainer {
5363

5464
#[must_use]
5565
pub fn initialize_from(
66+
torrent_repository_container: &Arc<TorrentRepositoryContainer>,
5667
tracker_core_container: &Arc<TrackerCoreContainer>,
5768
http_tracker_core_container: &Arc<HttpTrackerCoreContainer>,
5869
udp_tracker_core_container: &Arc<UdpTrackerCoreContainer>,
5970
udp_tracker_server_container: &Arc<UdpTrackerServerContainer>,
6071
http_api_config: &Arc<HttpApi>,
6172
) -> Arc<TrackerHttpApiCoreContainer> {
6273
Arc::new(TrackerHttpApiCoreContainer {
74+
http_api_config: http_api_config.clone(),
75+
76+
// Torrent repository
77+
torrent_repository_container: torrent_repository_container.clone(),
78+
79+
// Tracker core
6380
tracker_core_container: tracker_core_container.clone(),
6481

82+
// HTTP tracker core
6583
http_stats_repository: http_tracker_core_container.stats_repository.clone(),
6684

85+
// UDP tracker core
6786
ban_service: udp_tracker_core_container.ban_service.clone(),
6887
udp_core_stats_repository: udp_tracker_core_container.stats_repository.clone(),
69-
7088
udp_server_stats_repository: udp_tracker_server_container.stats_repository.clone(),
71-
72-
http_api_config: http_api_config.clone(),
7389
})
7490
}
7591
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,25 @@ pub struct TrackerLabeledMetrics {
9393
pub async fn get_labeled_metrics(
9494
in_memory_torrent_repository: Arc<InMemoryTorrentRepository>,
9595
ban_service: Arc<RwLock<BanService>>,
96+
swarms_stats_repository: Arc<torrust_tracker_torrent_repository::statistics::repository::Repository>,
9697
http_stats_repository: Arc<bittorrent_http_tracker_core::statistics::repository::Repository>,
9798
udp_stats_repository: Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
9899
udp_server_stats_repository: Arc<udp_server_statistics::repository::Repository>,
99100
) -> TrackerLabeledMetrics {
100101
let _torrents_metrics = in_memory_torrent_repository.get_aggregate_swarm_metadata();
101102
let _udp_banned_ips_total = ban_service.read().await.get_banned_ips_total();
102103

104+
let swarms_stats = swarms_stats_repository.get_metrics().await;
103105
let http_stats = http_stats_repository.get_stats().await;
104106
let udp_stats_repository = udp_stats_repository.get_stats().await;
105107
let udp_server_stats = udp_server_stats_repository.get_stats().await;
106108

107109
// Merge all the metrics into a single collection
108110
let mut metrics = MetricCollection::default();
111+
112+
metrics
113+
.merge(&swarms_stats.metric_collection)
114+
.expect("msg: failed to merge torrent repository metrics");
109115
metrics
110116
.merge(&http_stats.metric_collection)
111117
.expect("msg: failed to merge HTTP core metrics");

src/container.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,15 @@ impl AppContainer {
142142
#[must_use]
143143
pub fn tracker_http_api_container(&self, http_api_config: &Arc<HttpApi>) -> Arc<TrackerHttpApiCoreContainer> {
144144
TrackerHttpApiCoreContainer {
145-
tracker_core_container: self.tracker_core_container.clone(),
146145
http_api_config: http_api_config.clone(),
147-
ban_service: self.udp_tracker_core_services.ban_service.clone(),
146+
147+
torrent_repository_container: self.torrent_repository_container.clone(),
148+
149+
tracker_core_container: self.tracker_core_container.clone(),
150+
148151
http_stats_repository: self.http_tracker_core_services.stats_repository.clone(),
152+
153+
ban_service: self.udp_tracker_core_services.ban_service.clone(),
149154
udp_core_stats_repository: self.udp_tracker_core_services.stats_repository.clone(),
150155
udp_server_stats_repository: self.udp_tracker_server_container.stats_repository.clone(),
151156
}

0 commit comments

Comments
 (0)