@@ -74,7 +74,7 @@ use crate::{
7474 disco:: { self , CallMeMaybe , SendAddr } ,
7575 discovery:: { Discovery , DiscoveryItem , DiscoverySubscribers , NodeData , UserData } ,
7676 key:: { public_ed_box, secret_ed_box, DecryptionError , SharedSecret } ,
77- metrics:: { inc , inc_by , EndpointMetrics } ,
77+ metrics:: EndpointMetrics ,
7878 net_report:: { self , IpMappedAddresses } ,
7979 watchable:: { Watchable , Watcher } ,
8080} ;
@@ -473,10 +473,16 @@ impl MagicSock {
473473 . magicsock
474474 . send_data
475475 . inc_by ( transmit. contents . len ( ) as _ ) ;
476- inc_by ! ( self , send_data, transmit. contents. len( ) as _) ;
476+ self . metrics
477+ . magicsock
478+ . send_data
479+ . inc_by ( transmit. contents . len ( ) as _ ) ;
477480
478481 if self . is_closed ( ) {
479- inc_by ! ( self , send_data_network_down, transmit. contents. len( ) as _) ;
482+ self . metrics
483+ . magicsock
484+ . send_data_network_down
485+ . inc_by ( transmit. contents . len ( ) as _ ) ;
480486 return Err ( io:: Error :: new (
481487 io:: ErrorKind :: NotConnected ,
482488 "connection closed" ,
@@ -728,9 +734,9 @@ impl MagicSock {
728734 conn. try_send ( transmit) ?;
729735 let total_bytes: u64 = transmit. contents . len ( ) as u64 ;
730736 if addr. is_ipv6 ( ) {
731- inc_by ! ( self , send_ipv6, total_bytes) ;
737+ self . metrics . magicsock . send_ipv6 . inc_by ( total_bytes) ;
732738 } else {
733- inc_by ! ( self , send_ipv4, total_bytes) ;
739+ self . metrics . magicsock . send_ipv4 . inc_by ( total_bytes) ;
734740 }
735741 Ok ( ( ) )
736742 }
@@ -875,7 +881,7 @@ impl MagicSock {
875881 let mut quic_datagram_count = 0 ;
876882 if meta. len > meta. stride {
877883 trace ! ( %meta. len, %meta. stride, "GRO datagram received" ) ;
878- inc ! ( self , recv_gro_datagrams) ;
884+ self . metrics . magicsock . recv_gro_datagrams . inc ( ) ;
879885 }
880886
881887 // Chunk through the datagrams in this GRO payload to find disco and stun
@@ -909,9 +915,15 @@ impl MagicSock {
909915 } else {
910916 trace ! ( src = %meta. addr, len = %meta. stride, "UDP recv: quic packet" ) ;
911917 if from_ipv4 {
912- inc_by ! ( self , recv_data_ipv4, datagram. len( ) as _) ;
918+ self . metrics
919+ . magicsock
920+ . recv_data_ipv4
921+ . inc_by ( datagram. len ( ) as _ ) ;
913922 } else {
914- inc_by ! ( self , recv_data_ipv6, datagram. len( ) as _) ;
923+ self . metrics
924+ . magicsock
925+ . recv_data_ipv6
926+ . inc_by ( datagram. len ( ) as _ ) ;
915927 }
916928 quic_datagram_count += 1 ;
917929 buf_contains_quic_datagrams = true ;
@@ -968,7 +980,10 @@ impl MagicSock {
968980 }
969981
970982 if quic_packets_total > 0 {
971- inc_by ! ( self , recv_datagrams, quic_packets_total as _) ;
983+ self . metrics
984+ . magicsock
985+ . recv_datagrams
986+ . inc_by ( quic_packets_total as _ ) ;
972987 trace ! ( "UDP recv: {} packets" , quic_packets_total) ;
973988 }
974989 }
@@ -1008,7 +1023,10 @@ impl MagicSock {
10081023 continue ;
10091024 }
10101025 Some ( ( node_id, meta, buf) ) => {
1011- inc_by ! ( self , recv_data_relay, buf. len( ) as _) ;
1026+ self . metrics
1027+ . magicsock
1028+ . recv_data_relay
1029+ . inc_by ( buf. len ( ) as _ ) ;
10121030 trace ! (
10131031 src = %meta. addr,
10141032 node = %node_id. fmt_short( ) ,
@@ -1027,7 +1045,7 @@ impl MagicSock {
10271045
10281046 // If we have any msgs to report, they are in the first `num_msgs_total` slots
10291047 if num_msgs > 0 {
1030- inc_by ! ( self , recv_datagrams, num_msgs as _) ;
1048+ self . metrics . magicsock . recv_datagrams . inc_by ( num_msgs as _ ) ;
10311049 Poll :: Ready ( Ok ( num_msgs) )
10321050 } else {
10331051 Poll :: Pending
@@ -1120,7 +1138,7 @@ impl MagicSock {
11201138 Ok ( dm) => dm,
11211139 Err ( DiscoBoxError :: Open ( err) ) => {
11221140 warn ! ( ?err, "failed to open disco box" ) ;
1123- inc ! ( self , recv_disco_bad_key) ;
1141+ self . metrics . magicsock . recv_disco_bad_key . inc ( ) ;
11241142 return ;
11251143 }
11261144 Err ( DiscoBoxError :: Parse ( err) ) => {
@@ -1130,32 +1148,32 @@ impl MagicSock {
11301148 // understand. Not even worth logging about, lest it
11311149 // be too spammy for old clients.
11321150
1133- inc ! ( self , recv_disco_bad_parse) ;
1151+ self . metrics . magicsock . recv_disco_bad_parse . inc ( ) ;
11341152 debug ! ( ?err, "failed to parse disco message" ) ;
11351153 return ;
11361154 }
11371155 } ;
11381156
11391157 if src. is_relay ( ) {
1140- inc ! ( self , recv_disco_relay) ;
1158+ self . metrics . magicsock . recv_disco_relay . inc ( ) ;
11411159 } else {
1142- inc ! ( self , recv_disco_udp) ;
1160+ self . metrics . magicsock . recv_disco_udp . inc ( ) ;
11431161 }
11441162
11451163 let span = trace_span ! ( "handle_disco" , ?dm) ;
11461164 let _guard = span. enter ( ) ;
11471165 trace ! ( "receive disco message" ) ;
11481166 match dm {
11491167 disco:: Message :: Ping ( ping) => {
1150- inc ! ( self , recv_disco_ping) ;
1168+ self . metrics . magicsock . recv_disco_ping . inc ( ) ;
11511169 self . handle_ping ( ping, sender, src) ;
11521170 }
11531171 disco:: Message :: Pong ( pong) => {
1154- inc ! ( self , recv_disco_pong) ;
1172+ self . metrics . magicsock . recv_disco_pong . inc ( ) ;
11551173 self . node_map . handle_pong ( sender, & src, pong) ;
11561174 }
11571175 disco:: Message :: CallMeMaybe ( cm) => {
1158- inc ! ( self , recv_disco_call_me_maybe) ;
1176+ self . metrics . magicsock . recv_disco_call_me_maybe . inc ( ) ;
11591177 match src {
11601178 DiscoMessageSource :: Relay { url, .. } => {
11611179 event ! (
@@ -1355,7 +1373,7 @@ impl MagicSock {
13551373 fn send_disco_message_relay ( & self , url : & RelayUrl , dst : NodeId , msg : disco:: Message ) -> bool {
13561374 debug ! ( node = %dst. fmt_short( ) , %url, %msg, "send disco message (relay)" ) ;
13571375 let pkt = self . encode_disco_message ( dst, & msg) ;
1358- inc ! ( self , send_disco_relay) ;
1376+ self . metrics . magicsock . send_disco_relay . inc ( ) ;
13591377 match self . try_send_relay ( url, dst, smallvec ! [ pkt] ) {
13601378 Ok ( ( ) ) => {
13611379 if let disco:: Message :: CallMeMaybe ( CallMeMaybe { ref my_numbers } ) = msg {
@@ -1367,8 +1385,8 @@ impl MagicSock {
13671385 addrs = ?my_numbers,
13681386 ) ;
13691387 }
1370- inc ! ( self , sent_disco_relay) ;
1371- disco_message_sent ( & self , & msg ) ;
1388+ self . metrics . magicsock . sent_disco_relay . inc ( ) ;
1389+ disco_message_sent ( & msg , & self . metrics . magicsock ) ;
13721390 true
13731391 }
13741392 Err ( _) => false ,
@@ -1419,7 +1437,7 @@ impl MagicSock {
14191437 let pkt = self . encode_disco_message ( dst_node, msg) ;
14201438 // TODO: These metrics will be wrong with the poll impl
14211439 // Also - do we need it? I'd say the `sent_disco_udp` below is enough.
1422- inc ! ( self , send_disco_udp) ;
1440+ self . metrics . magicsock . send_disco_udp . inc ( ) ;
14231441 let transmit = quinn_udp:: Transmit {
14241442 destination : dst,
14251443 contents : & pkt,
@@ -1431,8 +1449,8 @@ impl MagicSock {
14311449 match sent {
14321450 Ok ( ( ) ) => {
14331451 trace ! ( %dst, node = %dst_node. fmt_short( ) , %msg, "sent disco message" ) ;
1434- inc ! ( self , sent_disco_udp) ;
1435- disco_message_sent ( & self , msg ) ;
1452+ self . metrics . magicsock . sent_disco_udp . inc ( ) ;
1453+ disco_message_sent ( msg , & self . metrics . magicsock ) ;
14361454 Ok ( ( ) )
14371455 }
14381456 Err ( err) => {
@@ -1524,7 +1542,7 @@ impl MagicSock {
15241542 #[ instrument( skip_all) ]
15251543 fn re_stun ( & self , why : & ' static str ) {
15261544 debug ! ( "re_stun: {}" , why) ;
1527- inc ! ( self , re_stun_calls) ;
1545+ self . metrics . magicsock . re_stun_calls . inc ( ) ;
15281546 self . direct_addr_update_state . schedule_run ( why) ;
15291547 }
15301548
@@ -2443,7 +2461,7 @@ impl Actor {
24432461 let mut portmap_watcher_closed = false ;
24442462 let mut link_change_closed = false ;
24452463 loop {
2446- inc ! ( self . msock, actor_tick_main) ;
2464+ self . msock . metrics . magicsock . actor_tick_main . inc ( ) ;
24472465 #[ cfg( not( wasm_browser) ) ]
24482466 let portmap_watcher_changed = portmap_watcher. changed ( ) ;
24492467 #[ cfg( wasm_browser) ]
@@ -2458,36 +2476,36 @@ impl Actor {
24582476 msg = self . msg_receiver. recv( ) , if !receiver_closed => {
24592477 let Some ( msg) = msg else {
24602478 trace!( "tick: magicsock receiver closed" ) ;
2461- inc! ( self . msock, actor_tick_other) ;
2479+ self . msock. metrics . magicsock . actor_tick_other. inc ( ) ;
24622480
24632481 receiver_closed = true ;
24642482 continue ;
24652483 } ;
24662484
24672485 trace!( ?msg, "tick: msg" ) ;
2468- inc! ( self . msock, actor_tick_msg) ;
2486+ self . msock. metrics . magicsock . actor_tick_msg. inc ( ) ;
24692487 if self . handle_actor_message( msg) . await {
24702488 return Ok ( ( ) ) ;
24712489 }
24722490 }
24732491 tick = self . periodic_re_stun_timer. tick( ) => {
24742492 trace!( "tick: re_stun {:?}" , tick) ;
2475- inc! ( self . msock, actor_tick_re_stun) ;
2493+ self . msock. metrics . magicsock . actor_tick_re_stun. inc ( ) ;
24762494 self . msock. re_stun( "periodic" ) ;
24772495 }
24782496 change = portmap_watcher_changed, if !portmap_watcher_closed => {
24792497 #[ cfg( not( wasm_browser) ) ]
24802498 {
24812499 if change. is_err( ) {
24822500 trace!( "tick: portmap watcher closed" ) ;
2483- inc! ( self . msock, actor_tick_other) ;
2501+ self . msock. metrics . magicsock . actor_tick_other. inc ( ) ;
24842502
24852503 portmap_watcher_closed = true ;
24862504 continue ;
24872505 }
24882506
24892507 trace!( "tick: portmap changed" ) ;
2490- inc! ( self . msock, actor_tick_portmap_changed) ;
2508+ self . msock. metrics . magicsock . actor_tick_portmap_changed. inc ( ) ;
24912509 let new_external_address = * portmap_watcher. borrow( ) ;
24922510 debug!( "external address updated: {new_external_address:?}" ) ;
24932511 self . msock. re_stun( "portmap_updated" ) ;
@@ -2502,7 +2520,7 @@ impl Actor {
25022520 "tick: direct addr heartbeat {} direct addrs" ,
25032521 self . msock. node_map. node_count( ) ,
25042522 ) ;
2505- inc! ( self . msock, actor_tick_direct_addr_heartbeat) ;
2523+ self . msock. metrics . magicsock . actor_tick_direct_addr_heartbeat. inc ( ) ;
25062524 // TODO: this might trigger too many packets at once, pace this
25072525
25082526 self . msock. node_map. prune_inactive( ) ;
@@ -2513,22 +2531,22 @@ impl Actor {
25132531 _ = direct_addr_update_receiver. changed( ) => {
25142532 let reason = * direct_addr_update_receiver. borrow( ) ;
25152533 trace!( "tick: direct addr update receiver {:?}" , reason) ;
2516- inc! ( self . msock, actor_tick_direct_addr_update_receiver) ;
2534+ self . msock. metrics . magicsock . actor_tick_direct_addr_update_receiver. inc ( ) ;
25172535 if let Some ( reason) = reason {
25182536 self . refresh_direct_addrs( reason) . await ;
25192537 }
25202538 }
25212539 is_major = link_change_r. recv( ) , if !link_change_closed => {
25222540 let Some ( is_major) = is_major else {
25232541 trace!( "tick: link change receiver closed" ) ;
2524- inc! ( self . msock, actor_tick_other) ;
2542+ self . msock. metrics . magicsock . actor_tick_other. inc ( ) ;
25252543
25262544 link_change_closed = true ;
25272545 continue ;
25282546 } ;
25292547
25302548 trace!( "tick: link change {}" , is_major) ;
2531- inc! ( self . msock, actor_link_change) ;
2549+ self . msock. metrics . magicsock . actor_link_change. inc ( ) ;
25322550 self . handle_network_change( is_major) . await ;
25332551 }
25342552 // Even if `discovery_events` yields `None`, it could begin to yield
@@ -2642,7 +2660,7 @@ impl Actor {
26422660 /// mistake to be made.
26432661 #[ instrument( level = "debug" , skip_all) ]
26442662 async fn refresh_direct_addrs ( & mut self , why : & ' static str ) {
2645- inc ! ( self . msock, update_direct_addrs) ;
2663+ self . msock . metrics . magicsock . update_direct_addrs . inc ( ) ;
26462664
26472665 debug ! ( "starting direct addr update ({})" , why) ;
26482666 #[ cfg( not( wasm_browser) ) ]
@@ -2949,7 +2967,7 @@ impl Actor {
29492967 let old_relay = self . msock . set_my_relay ( relay_url. clone ( ) ) ;
29502968
29512969 if let Some ( ref relay_url) = relay_url {
2952- inc ! ( self . msock, relay_home_change) ;
2970+ self . msock . metrics . magicsock . relay_home_change . inc ( ) ;
29532971
29542972 // On change, notify all currently connected relay servers and
29552973 // start connecting to our home relay if we are not already.
@@ -3249,16 +3267,16 @@ impl std::fmt::Display for NodeIdMappedAddr {
32493267 }
32503268}
32513269
3252- fn disco_message_sent ( msock : & MagicSock , msg : & disco:: Message ) {
3270+ fn disco_message_sent ( msg : & disco:: Message , metrics : & MagicsockMetrics ) {
32533271 match msg {
32543272 disco:: Message :: Ping ( _) => {
3255- inc ! ( msock , sent_disco_ping ) ;
3273+ metrics . sent_disco_ping . inc ( ) ;
32563274 }
32573275 disco:: Message :: Pong ( _) => {
3258- inc ! ( msock , sent_disco_pong ) ;
3276+ metrics . sent_disco_pong . inc ( ) ;
32593277 }
32603278 disco:: Message :: CallMeMaybe ( _) => {
3261- inc ! ( msock , sent_disco_call_me_maybe ) ;
3279+ metrics . sent_disco_call_me_maybe . inc ( ) ;
32623280 }
32633281 }
32643282}
0 commit comments