🔊 counting active QUIC connections for P3

main
_ 2021-07-17 22:03:55 +00:00
parent 24d04f2b1f
commit 26135471cb
2 changed files with 50 additions and 2 deletions

View File

@ -16,7 +16,16 @@ async fn main () -> anyhow::Result <()> {
// Each new peer QUIC connection gets its own task
tokio::spawn (async move {
handle_quic_connection (relay_state, conn).await
let active = relay_state.stats.quic.connect ();
debug! ("QUIC connections: {}", active);
match handle_quic_connection (Arc::clone (&relay_state), conn).await {
Ok (_) => (),
Err (e) => warn! ("handle_quic_connection {:?}", e),
}
let active = relay_state.stats.quic.disconnect ();
debug! ("QUIC connections: {}", active);
});
}
@ -26,10 +35,43 @@ async fn main () -> anyhow::Result <()> {
#[derive (Default)]
struct RelayState {
p4_server_proxies: Mutex <HashMap <u8, P4State>>,
stats: Stats,
}
#[derive (Default)]
struct Stats {
quic: ConnectEvents,
}
#[derive (Default)]
struct ConnectEvents {
connects: AtomicU64,
disconnects: AtomicU64,
}
impl ConnectEvents {
fn connect (&self) -> u64 {
let connects = self.connects.fetch_add (1, Ordering::Relaxed) + 1;
let disconnects = self.disconnects.load (Ordering::Relaxed);
connects - disconnects
}
fn disconnect (&self) -> u64 {
let disconnects = self.disconnects.fetch_add (1, Ordering::Relaxed) + 1;
let connects = self.connects.load (Ordering::Relaxed);
connects - disconnects
}
fn active (&self) -> u64 {
let connects = self.connects.load (Ordering::Relaxed);
let disconnects = self.disconnects.load (Ordering::Relaxed);
connects - disconnects
}
}
struct P4State {
req_channel: mpsc::Sender <RequestP2ToP4>,
}
impl RelayState {

View File

@ -1,6 +1,12 @@
pub use std::{
collections::*,
sync::Arc,
sync::{
Arc,
atomic::{
AtomicU64,
Ordering,
},
},
time::Duration,
};