@@ -77,35 +77,30 @@ impl Metrics {
7777 udp_connections_handled
7878 ) ;
7979
80- self . update_udp_avg_connect_processing_time_ns ( new_avg, label_set, now) ;
80+ self . update_udp_avg_processing_time_ns ( new_avg, label_set, now) ;
8181
8282 new_avg
8383 }
8484
85- fn update_udp_avg_connect_processing_time_ns ( & mut self , new_avg : f64 , label_set : & LabelSet , now : DurationSinceUnixEpoch ) {
86- tracing:: debug!( "Updating average processing time metric for connect requests: {} ns" , new_avg) ;
87-
88- match self . set_gauge (
89- & metric_name ! ( UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS ) ,
90- label_set,
91- new_avg,
92- now,
93- ) {
94- Ok ( ( ) ) => { }
95- Err ( err) => tracing:: error!( "Failed to set gauge: {}" , err) ,
96- }
97- }
98-
9985 #[ allow( clippy:: cast_precision_loss) ]
100- pub fn recalculate_udp_avg_announce_processing_time_ns ( & self , req_processing_time : Duration ) -> f64 {
86+ pub fn recalculate_udp_avg_announce_processing_time_ns (
87+ & mut self ,
88+ req_processing_time : Duration ,
89+ label_set : & LabelSet ,
90+ now : DurationSinceUnixEpoch ,
91+ ) -> f64 {
10192 let req_processing_time = req_processing_time. as_nanos ( ) as f64 ;
10293
10394 let udp_announces_handled = ( self . udp4_announces_handled ( ) + self . udp6_announces_handled ( ) ) as f64 ;
10495
10596 let previous_avg = self . udp_avg_announce_processing_time_ns ( ) ;
10697
107- // Moving average: https://en.wikipedia.org/wiki/Moving_average
108- let new_avg = previous_avg as f64 + ( req_processing_time - previous_avg as f64 ) / udp_announces_handled;
98+ let new_avg = if udp_announces_handled == 0.0 {
99+ req_processing_time
100+ } else {
101+ // Moving average: https://en.wikipedia.org/wiki/Moving_average
102+ previous_avg as f64 + ( req_processing_time - previous_avg as f64 ) / udp_announces_handled
103+ } ;
109104
110105 tracing:: debug!(
111106 "Recalculated UDP average announce processing time: {} ns (previous: {} ns, req_processing_time: {} ns, udp_announces_handled: {})" ,
@@ -115,9 +110,29 @@ impl Metrics {
115110 udp_announces_handled
116111 ) ;
117112
113+ self . update_udp_avg_processing_time_ns ( new_avg, label_set, now) ;
114+
118115 new_avg
119116 }
120117
118+ fn update_udp_avg_processing_time_ns ( & mut self , new_avg : f64 , label_set : & LabelSet , now : DurationSinceUnixEpoch ) {
119+ tracing:: debug!(
120+ "Updating average processing time metric to {} ns for label set {}" ,
121+ new_avg,
122+ label_set,
123+ ) ;
124+
125+ match self . set_gauge (
126+ & metric_name ! ( UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS ) ,
127+ label_set,
128+ new_avg,
129+ now,
130+ ) {
131+ Ok ( ( ) ) => { }
132+ Err ( err) => tracing:: error!( "Failed to set gauge: {}" , err) ,
133+ }
134+ }
135+
121136 #[ allow( clippy:: cast_precision_loss) ]
122137 pub fn recalculate_udp_avg_scrape_processing_time_ns ( & self , req_processing_time : Duration ) -> f64 {
123138 let req_processing_time = req_processing_time. as_nanos ( ) as f64 ;
0 commit comments