summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-04-07 13:42:47 +0200
committerJoakim Hulthe <joakim.hulthe@mullvad.net>2025-04-09 18:02:55 +0200
commit6af30eecaca4cfa8a9629894caa7efdc49bb24a6 (patch)
tree7987827b3cd7a1db7c807388b3c92fd496a14932
parentb925b777c7cc3398abf707d8f9680d384a0d2d68 (diff)
downloadmullvadvpn-6af30eecaca4cfa8a9629894caa7efdc49bb24a6.tar.xz
mullvadvpn-6af30eecaca4cfa8a9629894caa7efdc49bb24a6.zip
Add stats to masque client
-rw-r--r--mullvad-masque-proxy/src/client/mod.rs39
1 files changed, 36 insertions, 3 deletions
diff --git a/mullvad-masque-proxy/src/client/mod.rs b/mullvad-masque-proxy/src/client/mod.rs
index 182ec580ba..67694b9ec1 100644
--- a/mullvad-masque-proxy/src/client/mod.rs
+++ b/mullvad-masque-proxy/src/client/mod.rs
@@ -4,8 +4,11 @@ use std::{
fs, future, io,
net::{Ipv4Addr, SocketAddr},
path::Path,
- sync::{Arc, LazyLock},
- time::Duration,
+ sync::{
+ atomic::{AtomicUsize, Ordering},
+ Arc, LazyLock,
+ },
+ time::{Duration, Instant},
};
use tokio::{net::UdpSocket, time::interval};
@@ -34,6 +37,19 @@ pub struct Client {
fragments: Fragments,
/// Maximum packet size
maximum_packet_size: u16,
+ stats: Arc<Stats>,
+}
+
+#[derive(Debug, Default)]
+struct Stats {
+ rx_bytes: AtomicUsize,
+ tx_bytes: AtomicUsize,
+}
+
+impl Drop for Stats {
+ fn drop(&mut self) {
+ println!("stats: {:?}", self);
+ }
}
pub type Result<T> = std::result::Result<T, Error>;
@@ -155,6 +171,7 @@ impl Client {
fragments: Fragments::default(),
_send_stream: send_stream,
maximum_packet_size,
+ stats: Arc::default(),
})
}
@@ -210,12 +227,21 @@ impl Client {
let mut fragment_id = 1u16;
let mut interval = interval(Duration::from_secs(3));
+ let mut prev_stats = Instant::now();
+
loop {
tokio::select! {
client_read = self.client_socket.recv_buf_from(&mut client_read_buf) => {
- let (_bytes_received, recv_addr) = client_read.map_err(Error::ClientRead)?;
+ let (bytes_received, recv_addr) = client_read.map_err(Error::ClientRead)?;
return_addr = recv_addr;
+ self.stats.tx_bytes.fetch_add(bytes_received, Ordering::Relaxed);
+
+ /*if prev_stats.elapsed() >= Duration::from_secs(3) {
+ prev_stats = Instant::now();
+ println!("stats: {:?}", self.stats);
+ }*/
+
let mut send_buf = client_read_buf.split().freeze();
if send_buf.len() < (Into::<usize>::into(self.maximum_packet_size) - 100usize) {
self.connection
@@ -247,6 +273,13 @@ impl Client {
continue;
}
let payload = response.into_payload();
+
+ self.stats.rx_bytes.fetch_add(payload.len(), Ordering::Relaxed);
+ /*if prev_stats.elapsed() >= Duration::from_secs(3) {
+ prev_stats = Instant::now();
+ println!("stats: {:?}", self.stats);
+ }*/
+
if let Ok(Some(payload)) = self.fragments.handle_incoming_packet(payload) {
self.client_socket
.send_to(payload.chunk(), return_addr)