Skip to content

Commit 1c13b12

Browse files
committed
fix: [#1589] partially. Moving average calculated for each time series
We can't count the total number of UDP requests while calculating the moving average but updating it only for a concrete label set (time series). Averages are calculate for each label set. They could be aggregated by caclulating the average for all time series.
1 parent 47c2949 commit 1c13b12

1 file changed

Lines changed: 37 additions & 15 deletions

File tree

  • packages/udp-tracker-server/src/statistics

packages/udp-tracker-server/src/statistics/metrics.rs

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,23 +58,24 @@ impl Metrics {
5858
now: DurationSinceUnixEpoch,
5959
) -> f64 {
6060
let req_processing_time = req_processing_time.as_nanos() as f64;
61-
let udp_connections_handled = (self.udp4_connections_handled() + self.udp6_connections_handled()) as f64;
6261

63-
let previous_avg = self.udp_avg_connect_processing_time_ns();
62+
let request_accepted_total = self.udp_request_accepted(label_set) as f64;
6463

65-
let new_avg = if udp_connections_handled == 0.0 {
64+
let previous_avg = self.udp_avg_processing_time_ns(label_set);
65+
66+
let new_avg = if request_accepted_total == 0.0 {
6667
req_processing_time
6768
} else {
6869
// Moving average: https://en.wikipedia.org/wiki/Moving_average
69-
previous_avg as f64 + (req_processing_time - previous_avg as f64) / udp_connections_handled
70+
previous_avg as f64 + (req_processing_time - previous_avg as f64) / request_accepted_total
7071
};
7172

7273
tracing::debug!(
7374
"Recalculated UDP average connect processing time: {} ns (previous: {} ns, req_processing_time: {} ns, udp_connections_handled: {})",
7475
new_avg,
7576
previous_avg,
7677
req_processing_time,
77-
udp_connections_handled
78+
request_accepted_total
7879
);
7980

8081
self.update_udp_avg_processing_time_ns(new_avg, label_set, now);
@@ -91,23 +92,23 @@ impl Metrics {
9192
) -> f64 {
9293
let req_processing_time = req_processing_time.as_nanos() as f64;
9394

94-
let udp_announces_handled = (self.udp4_announces_handled() + self.udp6_announces_handled()) as f64;
95+
let request_accepted_total = self.udp_request_accepted(label_set) as f64;
9596

96-
let previous_avg = self.udp_avg_announce_processing_time_ns();
97+
let previous_avg = self.udp_avg_processing_time_ns(label_set);
9798

98-
let new_avg = if udp_announces_handled == 0.0 {
99+
let new_avg = if request_accepted_total == 0.0 {
99100
req_processing_time
100101
} else {
101102
// 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+
previous_avg as f64 + (req_processing_time - previous_avg as f64) / request_accepted_total
103104
};
104105

105106
tracing::debug!(
106107
"Recalculated UDP average announce processing time: {} ns (previous: {} ns, req_processing_time: {} ns, udp_announces_handled: {})",
107108
new_avg,
108109
previous_avg,
109110
req_processing_time,
110-
udp_announces_handled
111+
request_accepted_total
111112
);
112113

113114
self.update_udp_avg_processing_time_ns(new_avg, label_set, now);
@@ -124,30 +125,51 @@ impl Metrics {
124125
) -> f64 {
125126
let req_processing_time = req_processing_time.as_nanos() as f64;
126127

127-
let udp_scrapes_handled = (self.udp4_scrapes_handled() + self.udp6_scrapes_handled()) as f64;
128+
let request_accepted_total = self.udp_request_accepted(label_set) as f64;
128129

129-
let previous_avg = self.udp_avg_scrape_processing_time_ns();
130+
let previous_avg = self.udp_avg_processing_time_ns(label_set);
130131

131-
let new_avg = if udp_scrapes_handled == 0.0 {
132+
let new_avg = if request_accepted_total == 0.0 {
132133
req_processing_time
133134
} else {
134135
// Moving average: https://en.wikipedia.org/wiki/Moving_average
135-
previous_avg as f64 + (req_processing_time - previous_avg as f64) / udp_scrapes_handled
136+
previous_avg as f64 + (req_processing_time - previous_avg as f64) / request_accepted_total
136137
};
137138

138139
tracing::debug!(
139140
"Recalculated UDP average scrape processing time: {} ns (previous: {} ns, req_processing_time: {} ns, udp_scrapes_handled: {})",
140141
new_avg,
141142
previous_avg,
142143
req_processing_time,
143-
udp_scrapes_handled
144+
request_accepted_total
144145
);
145146

146147
self.update_udp_avg_processing_time_ns(new_avg, label_set, now);
147148

148149
new_avg
149150
}
150151

152+
#[must_use]
153+
#[allow(clippy::cast_sign_loss)]
154+
#[allow(clippy::cast_possible_truncation)]
155+
pub fn udp_avg_processing_time_ns(&self, label_set: &LabelSet) -> u64 {
156+
self.metric_collection
157+
.sum(
158+
&metric_name!(UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS),
159+
label_set,
160+
)
161+
.unwrap_or_default() as u64
162+
}
163+
164+
#[must_use]
165+
#[allow(clippy::cast_sign_loss)]
166+
#[allow(clippy::cast_possible_truncation)]
167+
pub fn udp_request_accepted(&self, label_set: &LabelSet) -> u64 {
168+
self.metric_collection
169+
.sum(&metric_name!(UDP_TRACKER_SERVER_REQUESTS_ACCEPTED_TOTAL), label_set)
170+
.unwrap_or_default() as u64
171+
}
172+
151173
fn update_udp_avg_processing_time_ns(&mut self, new_avg: f64, label_set: &LabelSet, now: DurationSinceUnixEpoch) {
152174
tracing::debug!(
153175
"Updating average processing time metric to {} ns for label set {}",

0 commit comments

Comments
 (0)