Skip to content

Commit 5f57f78

Browse files
committed
feat: [#1438] merge UDP tracker server metrics
- Rename label `kind` to `request_kind`. It's more explicit. There could be other "kind" of things in the future. - Remove the empty label `kind=""` when the response is an error. - Fix result label for error response. - Merge performace metrics in one and convert request kind into a label: ``` udp_tracker_server_performance_avg_connect_processing_time_ns{request_kind="connect"} udp_tracker_server_performance_avg_connect_processing_time_ns{request_kind="announce"} udp_tracker_server_performance_avg_connect_processing_time_ns{request_kind="scrape"} ```
1 parent 44c700d commit 5f57f78

File tree

2 files changed

+51
-43
lines changed

2 files changed

+51
-43
lines changed

packages/udp-tracker-server/src/statistics/event/handler.rs

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ use torrust_tracker_primitives::DurationSinceUnixEpoch;
44

55
use crate::event::{Event, UdpRequestKind, UdpResponseKind};
66
use crate::statistics::repository::Repository;
7+
use crate::statistics::{
8+
UDP_TRACKER_SERVER_ERRORS_TOTAL, UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS,
9+
UDP_TRACKER_SERVER_REQUESTS_ABORTED_TOTAL, UDP_TRACKER_SERVER_REQUESTS_ACCEPTED_TOTAL,
10+
UDP_TRACKER_SERVER_REQUESTS_BANNED_TOTAL, UDP_TRACKER_SERVER_REQUESTS_RECEIVED_TOTAL,
11+
UDP_TRACKER_SERVER_RESPONSES_SENT_TOTAL,
12+
};
713

814
/// # Panics
915
///
@@ -19,7 +25,7 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
1925
// Extendable metrics
2026
stats_repository
2127
.increase_counter(
22-
&MetricName::new("udp_tracker_server_requests_aborted_total"),
28+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_ABORTED_TOTAL),
2329
&LabelSet::from(context),
2430
now,
2531
)
@@ -32,7 +38,7 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
3238
// Extendable metrics
3339
stats_repository
3440
.increase_counter(
35-
&MetricName::new("udp_tracker_server_requests_banned_total"),
41+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_BANNED_TOTAL),
3642
&LabelSet::from(context),
3743
now,
3844
)
@@ -52,7 +58,7 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
5258
// Extendable metrics
5359
stats_repository
5460
.increase_counter(
55-
&MetricName::new("udp_tracker_server_requests_received_total"),
61+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_RECEIVED_TOTAL),
5662
&LabelSet::from(context),
5763
now,
5864
)
@@ -94,11 +100,7 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
94100
label_set.upsert(LabelName::new("kind"), LabelValue::new(&kind.to_string()));
95101

96102
stats_repository
97-
.increase_counter(
98-
&MetricName::new("udp_tracker_server_requests_accepted_total"),
99-
&label_set,
100-
now,
101-
)
103+
.increase_counter(&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_ACCEPTED_TOTAL), &label_set, now)
102104
.await;
103105
}
104106
Event::UdpResponseSent {
@@ -124,10 +126,14 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
124126
.await;
125127

126128
// Extendable metrics
129+
130+
let mut label_set = LabelSet::from(context.clone());
131+
label_set.upsert(LabelName::new("request_kind"), LabelValue::new(&req_kind.to_string()));
132+
127133
stats_repository
128134
.set_gauge(
129-
&MetricName::new("udp_tracker_server_performance_avg_connect_processing_time_ns"),
130-
&LabelSet::from(context.clone()),
135+
&MetricName::new(UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS),
136+
&label_set,
131137
new_avg,
132138
now,
133139
)
@@ -141,47 +147,57 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
141147
.await;
142148

143149
// Extendable metrics
150+
151+
let mut label_set = LabelSet::from(context.clone());
152+
label_set.upsert(LabelName::new("request_kind"), LabelValue::new(&req_kind.to_string()));
153+
144154
stats_repository
145155
.set_gauge(
146-
&MetricName::new("udp_tracker_server_performance_avg_announce_processing_time_ns"),
147-
&LabelSet::from(context.clone()),
156+
&MetricName::new(UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS),
157+
&label_set,
148158
new_avg,
149159
now,
150160
)
151161
.await;
152162

153-
(LabelValue::new("ok"), LabelValue::new(&UdpRequestKind::Connect.to_string()))
163+
(LabelValue::new("ok"), LabelValue::new(&UdpRequestKind::Announce.to_string()))
154164
}
155165
UdpRequestKind::Scrape => {
156166
let new_avg = stats_repository
157167
.recalculate_udp_avg_scrape_processing_time_ns(req_processing_time)
158168
.await;
159169

160170
// Extendable metrics
171+
172+
let mut label_set = LabelSet::from(context.clone());
173+
label_set.upsert(LabelName::new("request_kind"), LabelValue::new(&req_kind.to_string()));
174+
161175
stats_repository
162176
.set_gauge(
163-
&MetricName::new("udp_tracker_server_performance_avg_scrape_processing_time_ns"),
164-
&LabelSet::from(context.clone()),
177+
&MetricName::new(UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS),
178+
&label_set,
165179
new_avg,
166180
now,
167181
)
168182
.await;
169183

170-
(LabelValue::new("ok"), LabelValue::new(&UdpRequestKind::Connect.to_string()))
184+
(LabelValue::new("ok"), LabelValue::new(&UdpRequestKind::Scrape.to_string()))
171185
}
172186
},
173-
UdpResponseKind::Error { opt_req_kind: _ } => (LabelValue::new("ok"), LabelValue::ignore()),
187+
UdpResponseKind::Error { opt_req_kind: _ } => (LabelValue::new("error"), LabelValue::ignore()),
174188
};
175189

176190
// Extendable metrics
177191

178192
let mut label_set = LabelSet::from(context);
179193

194+
if result_label_value == LabelValue::new("ok") {
195+
label_set.upsert(LabelName::new("request_kind"), kind_label_value);
196+
}
180197
label_set.upsert(LabelName::new("result"), result_label_value);
181-
label_set.upsert(LabelName::new("kind"), kind_label_value);
182198

183199
stats_repository
184-
.increase_counter(&MetricName::new("udp_tracker_server_responses_sent_total"), &label_set, now)
200+
.increase_counter(&MetricName::new(UDP_TRACKER_SERVER_RESPONSES_SENT_TOTAL), &label_set, now)
185201
.await;
186202
}
187203
Event::UdpError { context } => {
@@ -198,7 +214,7 @@ pub async fn handle_event(event: Event, stats_repository: &Repository, now: Dura
198214
// Extendable metrics
199215
stats_repository
200216
.increase_counter(
201-
&MetricName::new("udp_tracker_server_errors_total"),
217+
&MetricName::new(UDP_TRACKER_SERVER_ERRORS_TOTAL),
202218
&LabelSet::from(context),
203219
now,
204220
)

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

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,69 +10,61 @@ use torrust_tracker_metrics::metric::description::MetricDescription;
1010
use torrust_tracker_metrics::metric::MetricName;
1111
use torrust_tracker_metrics::unit::Unit;
1212

13+
const UDP_TRACKER_SERVER_REQUESTS_ABORTED_TOTAL: &str = "udp_tracker_server_requests_aborted_total";
14+
const UDP_TRACKER_SERVER_REQUESTS_BANNED_TOTAL: &str = "udp_tracker_server_requests_banned_total";
15+
const UDP_TRACKER_SERVER_REQUESTS_RECEIVED_TOTAL: &str = "udp_tracker_server_requests_received_total";
16+
const UDP_TRACKER_SERVER_REQUESTS_ACCEPTED_TOTAL: &str = "udp_tracker_server_requests_accepted_total";
17+
const UDP_TRACKER_SERVER_RESPONSES_SENT_TOTAL: &str = "udp_tracker_server_responses_sent_total";
18+
const UDP_TRACKER_SERVER_ERRORS_TOTAL: &str = "udp_tracker_server_errors_total";
19+
const UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS: &str = "udp_tracker_server_performance_avg_processing_time_ns";
20+
1321
#[must_use]
1422
pub fn describe_metrics() -> Metrics {
1523
let mut metrics = Metrics::default();
1624

1725
metrics.metric_collection.describe_counter(
18-
&MetricName::new("udp_tracker_server_requests_aborted_total"),
26+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_ABORTED_TOTAL),
1927
Some(Unit::Count),
2028
Some(MetricDescription::new("Total number of UDP requests aborted")),
2129
);
2230

2331
metrics.metric_collection.describe_counter(
24-
&MetricName::new("udp_tracker_server_requests_banned_total"),
32+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_BANNED_TOTAL),
2533
Some(Unit::Count),
2634
Some(MetricDescription::new("Total number of UDP requests banned")),
2735
);
2836

2937
metrics.metric_collection.describe_counter(
30-
&MetricName::new("udp_tracker_server_requests_received_total"),
38+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_RECEIVED_TOTAL),
3139
Some(Unit::Count),
3240
Some(MetricDescription::new("Total number of UDP requests received")),
3341
);
3442

3543
metrics.metric_collection.describe_counter(
36-
&MetricName::new("udp_tracker_server_requests_accepted_total"),
44+
&MetricName::new(UDP_TRACKER_SERVER_REQUESTS_ACCEPTED_TOTAL),
3745
Some(Unit::Count),
3846
Some(MetricDescription::new("Total number of UDP requests accepted")),
3947
);
4048

4149
metrics.metric_collection.describe_counter(
42-
&MetricName::new("udp_tracker_server_responses_sent_total"),
50+
&MetricName::new(UDP_TRACKER_SERVER_RESPONSES_SENT_TOTAL),
4351
Some(Unit::Count),
4452
Some(MetricDescription::new("Total number of UDP responses sent")),
4553
);
4654

4755
metrics.metric_collection.describe_counter(
48-
&MetricName::new("udp_tracker_server_errors_total"),
56+
&MetricName::new(UDP_TRACKER_SERVER_ERRORS_TOTAL),
4957
Some(Unit::Count),
5058
Some(MetricDescription::new("Total number of errors processing UDP requests")),
5159
);
5260

5361
metrics.metric_collection.describe_gauge(
54-
&MetricName::new("udp_tracker_server_performance_avg_connect_processing_time_ns"),
62+
&MetricName::new(UDP_TRACKER_SERVER_PERFORMANCE_AVG_PROCESSING_TIME_NS),
5563
Some(Unit::Nanoseconds),
5664
Some(MetricDescription::new(
5765
"Average time to process a UDP connect request in nanoseconds",
5866
)),
5967
);
6068

61-
metrics.metric_collection.describe_gauge(
62-
&MetricName::new("udp_tracker_server_performance_avg_announce_processing_time_ns"),
63-
Some(Unit::Nanoseconds),
64-
Some(MetricDescription::new(
65-
"Average time to process a UDP announce request in nanoseconds",
66-
)),
67-
);
68-
69-
metrics.metric_collection.describe_gauge(
70-
&MetricName::new("udp_tracker_server_performance_avg_scrape_processing_time_ns"),
71-
Some(Unit::Nanoseconds),
72-
Some(MetricDescription::new(
73-
"Average time to process a UDP scrape request in nanoseconds",
74-
)),
75-
);
76-
7769
metrics
7870
}

0 commit comments

Comments
 (0)