Skip to content

Commit 08a862a

Browse files
committed
refactor: [torrust#1145] add type and processing time to UDP response events
- The `kind`is the type of response: connect, annouince, etc - The req_processing_time is the time it took to process the requests on the backend, without including sending the response back to the client (network latency).
1 parent 1ce2e33 commit 08a862a

File tree

3 files changed

+55
-8
lines changed

3 files changed

+55
-8
lines changed

src/core/statistics/event/handler.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ pub async fn handle_event(event: Event, stats_repository: &Repository) {
4444
Event::Udp4Scrape => {
4545
stats_repository.increase_udp4_scrapes().await;
4646
}
47-
Event::Udp4Response => {
47+
Event::Udp4Response {
48+
kind: _,
49+
req_processing_time: _,
50+
} => {
4851
stats_repository.increase_udp4_responses().await;
4952
}
5053
Event::Udp4Error => {
@@ -64,7 +67,10 @@ pub async fn handle_event(event: Event, stats_repository: &Repository) {
6467
Event::Udp6Scrape => {
6568
stats_repository.increase_udp6_scrapes().await;
6669
}
67-
Event::Udp6Response => {
70+
Event::Udp6Response {
71+
kind: _,
72+
req_processing_time: _,
73+
} => {
6874
stats_repository.increase_udp6_responses().await;
6975
}
7076
Event::Udp6Error => {

src/core/statistics/event/mod.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::time::Duration;
2+
13
pub mod handler;
24
pub mod listener;
35
pub mod sender;
@@ -24,12 +26,26 @@ pub enum Event {
2426
Udp4Connect,
2527
Udp4Announce,
2628
Udp4Scrape,
27-
Udp4Response,
29+
Udp4Response {
30+
kind: UdpResponseKind,
31+
req_processing_time: Duration,
32+
},
2833
Udp4Error,
2934
Udp6Request,
3035
Udp6Connect,
3136
Udp6Announce,
3237
Udp6Scrape,
33-
Udp6Response,
38+
Udp6Response {
39+
kind: UdpResponseKind,
40+
req_processing_time: Duration,
41+
},
3442
Udp6Error,
3543
}
44+
45+
#[derive(Debug, PartialEq, Eq)]
46+
pub enum UdpResponseKind {
47+
Connect,
48+
Announce,
49+
Scrape,
50+
Error,
51+
}

src/servers/udp/server/processor.rs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
use std::io::Cursor;
22
use std::net::{IpAddr, SocketAddr};
33
use std::sync::Arc;
4+
use std::time::Duration;
45

56
use aquatic_udp_protocol::Response;
67
use tokio::sync::RwLock;
8+
use tokio::time::Instant;
79
use tracing::{instrument, Level};
810

911
use super::banning::BanService;
1012
use super::bound_socket::BoundSocket;
13+
use crate::core::statistics::event::UdpResponseKind;
1114
use crate::core::{statistics, Tracker};
1215
use crate::servers::udp::handlers::CookieTimeValues;
1316
use crate::servers::udp::{handlers, RawRequest};
@@ -30,6 +33,9 @@ impl Processor {
3033
#[instrument(skip(self, request, ban_service))]
3134
pub async fn process_request(self, request: RawRequest, ban_service: Arc<RwLock<BanService>>) {
3235
let from = request.from;
36+
37+
let start_time = Instant::now();
38+
3339
let response = handlers::handle_packet(
3440
request,
3541
&self.tracker,
@@ -39,11 +45,13 @@ impl Processor {
3945
)
4046
.await;
4147

42-
self.send_response(from, response).await;
48+
let elapsed_time = start_time.elapsed();
49+
50+
self.send_response(from, response, elapsed_time).await;
4351
}
4452

4553
#[instrument(skip(self))]
46-
async fn send_response(self, target: SocketAddr, response: Response) {
54+
async fn send_response(self, target: SocketAddr, response: Response, req_processing_time: Duration) {
4755
tracing::debug!("send response");
4856

4957
let response_type = match &response {
@@ -54,6 +62,13 @@ impl Processor {
5462
Response::Error(e) => format!("Error: {e:?}"),
5563
};
5664

65+
let response_kind = match &response {
66+
Response::Connect(_) => UdpResponseKind::Connect,
67+
Response::AnnounceIpv4(_) | Response::AnnounceIpv6(_) => UdpResponseKind::Announce,
68+
Response::Scrape(_) => UdpResponseKind::Scrape,
69+
Response::Error(_e) => UdpResponseKind::Error,
70+
};
71+
5772
let mut writer = Cursor::new(Vec::with_capacity(200));
5873

5974
match response.write_bytes(&mut writer) {
@@ -71,10 +86,20 @@ impl Processor {
7186

7287
match target.ip() {
7388
IpAddr::V4(_) => {
74-
self.tracker.send_stats_event(statistics::event::Event::Udp4Response).await;
89+
self.tracker
90+
.send_stats_event(statistics::event::Event::Udp4Response {
91+
kind: response_kind,
92+
req_processing_time,
93+
})
94+
.await;
7595
}
7696
IpAddr::V6(_) => {
77-
self.tracker.send_stats_event(statistics::event::Event::Udp6Response).await;
97+
self.tracker
98+
.send_stats_event(statistics::event::Event::Udp6Response {
99+
kind: response_kind,
100+
req_processing_time,
101+
})
102+
.await;
78103
}
79104
}
80105
}

0 commit comments

Comments
 (0)