pub mod setup;
use std::sync::Arc;
use torrust_tracker_primitives::torrent_metrics::TorrentsMetrics;
use crate::core::statistics::Metrics;
use crate::core::Tracker;
#[derive(Debug, PartialEq)]
pub struct TrackerMetrics {
pub torrents_metrics: TorrentsMetrics,
pub protocol_metrics: Metrics,
}
pub async fn get_metrics(tracker: Arc<Tracker>) -> TrackerMetrics {
let torrents_metrics = tracker.get_torrents_metrics();
let stats = tracker.get_stats().await;
TrackerMetrics {
torrents_metrics,
protocol_metrics: Metrics {
tcp4_connections_handled: stats.tcp4_connections_handled,
tcp4_announces_handled: stats.tcp4_announces_handled,
tcp4_scrapes_handled: stats.tcp4_scrapes_handled,
tcp6_connections_handled: stats.tcp6_connections_handled,
tcp6_announces_handled: stats.tcp6_announces_handled,
tcp6_scrapes_handled: stats.tcp6_scrapes_handled,
udp4_connections_handled: stats.udp4_connections_handled,
udp4_announces_handled: stats.udp4_announces_handled,
udp4_scrapes_handled: stats.udp4_scrapes_handled,
udp6_connections_handled: stats.udp6_connections_handled,
udp6_announces_handled: stats.udp6_announces_handled,
udp6_scrapes_handled: stats.udp6_scrapes_handled,
},
}
}
#[cfg(test)]
mod tests {
use std::sync::Arc;
use torrust_tracker_configuration::Configuration;
use torrust_tracker_primitives::torrent_metrics::TorrentsMetrics;
use torrust_tracker_test_helpers::configuration;
use crate::core;
use crate::core::services::statistics::{get_metrics, TrackerMetrics};
use crate::core::services::tracker_factory;
pub fn tracker_configuration() -> Configuration {
configuration::ephemeral()
}
#[tokio::test]
async fn the_statistics_service_should_return_the_tracker_metrics() {
let tracker = Arc::new(tracker_factory(&tracker_configuration()));
let tracker_metrics = get_metrics(tracker.clone()).await;
assert_eq!(
tracker_metrics,
TrackerMetrics {
torrents_metrics: TorrentsMetrics::default(),
protocol_metrics: core::statistics::Metrics::default(),
}
);
}
}