Skip to content

Commit 786f6f0

Browse files
committed
feat: [#1403] add extendable-labeled metrics to udp-tracker-server
1 parent 3f51afc commit 786f6f0

11 files changed

Lines changed: 344 additions & 55 deletions

File tree

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/metrics/src/label/value.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ impl LabelValue {
1111
pub fn new(value: &str) -> Self {
1212
Self(value.to_owned())
1313
}
14+
15+
/// Empty label values are ignored in Prometheus.
16+
#[must_use]
17+
pub fn ignore() -> Self {
18+
Self(String::default())
19+
}
1420
}
1521

1622
impl PrometheusSerializable for LabelValue {

packages/udp-tracker-core/src/statistics/services.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub async fn get_metrics(
7777
udp6_connections_handled: stats.udp6_connections_handled,
7878
udp6_announces_handled: stats.udp6_announces_handled,
7979
udp6_scrapes_handled: stats.udp6_scrapes_handled,
80-
// Samples
80+
// Extendable metrics
8181
metric_collection: stats.metric_collection.clone(),
8282
},
8383
}

packages/udp-tracker-server/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ derive_more = { version = "2", features = ["as_ref", "constructor", "from"] }
2323
futures = "0"
2424
futures-util = "0"
2525
ringbuf = "0"
26+
serde = "1.0.219"
2627
thiserror = "2"
2728
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread", "signal", "sync"] }
2829
torrust-server-lib = { version = "3.0.0-develop", path = "../server-lib" }
2930
torrust-tracker-clock = { version = "3.0.0-develop", path = "../clock" }
3031
torrust-tracker-configuration = { version = "3.0.0-develop", path = "../configuration" }
3132
torrust-tracker-located-error = { version = "3.0.0-develop", path = "../located-error" }
33+
torrust-tracker-metrics = { version = "3.0.0-develop", path = "../metrics" }
3234
torrust-tracker-primitives = { version = "3.0.0-develop", path = "../primitives" }
3335
tracing = "0"
3436
url = { version = "2", features = ["serde"] }

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use std::fmt;
12
use std::net::SocketAddr;
23
use std::time::Duration;
34

5+
use torrust_tracker_metrics::label::{LabelName, LabelSet, LabelValue};
46
use torrust_tracker_primitives::service_binding::ServiceBinding;
57

68
pub mod sender;
@@ -38,6 +40,17 @@ pub enum UdpRequestKind {
3840
Scrape,
3941
}
4042

43+
impl fmt::Display for UdpRequestKind {
44+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45+
let proto_str = match self {
46+
UdpRequestKind::Connect => "connect",
47+
UdpRequestKind::Announce => "announce",
48+
UdpRequestKind::Scrape => "scrape",
49+
};
50+
write!(f, "{proto_str}")
51+
}
52+
}
53+
4154
#[derive(Debug, PartialEq, Eq, Clone)]
4255
pub enum UdpResponseKind {
4356
Ok {
@@ -76,3 +89,22 @@ impl ConnectionContext {
7689
self.server_service_binding.bind_address()
7790
}
7891
}
92+
93+
impl From<ConnectionContext> for LabelSet {
94+
fn from(connection_context: ConnectionContext) -> Self {
95+
LabelSet::from([
96+
(
97+
LabelName::new("server_binding_protocol"),
98+
LabelValue::new(&connection_context.server_service_binding.protocol().to_string()),
99+
),
100+
(
101+
LabelName::new("server_binding_ip"),
102+
LabelValue::new(&connection_context.server_service_binding.bind_address().ip().to_string()),
103+
),
104+
(
105+
LabelName::new("server_binding_port"),
106+
LabelValue::new(&connection_context.server_service_binding.bind_address().port().to_string()),
107+
),
108+
])
109+
}
110+
}

0 commit comments

Comments
 (0)