From 0c03048ce8a520311bbcfff38257b9d0ed92f245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 20 Jan 2024 09:42:17 +0100 Subject: [PATCH] udp: update metrics crate --- Cargo.lock | 21 +-- crates/udp/Cargo.toml | 7 +- .../udp/src/workers/statistics/collector.rs | 145 ++++++------------ crates/udp/src/workers/statistics/mod.rs | 8 +- 4 files changed, 60 insertions(+), 121 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e3a0a4c..f0f4a44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -306,9 +306,9 @@ dependencies = [ "io-uring", "libc", "log", - "metrics 0.21.1", - "metrics-exporter-prometheus 0.12.2", - "metrics-util 0.15.1", + "metrics 0.22.0", + "metrics-exporter-prometheus 0.13.0", + "metrics-util 0.16.0", "mimalloc", "mio", "num-format", @@ -1819,16 +1819,12 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e" dependencies = [ - "aho-corasick", "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.13.1", - "indexmap 1.9.3", "metrics 0.21.1", "num_cpus", - "ordered-float 3.9.2", "quanta 0.11.1", - "radix_trie", "sketches-ddsketch 0.2.1", ] @@ -1845,7 +1841,7 @@ dependencies = [ "indexmap 1.9.3", "metrics 0.22.0", "num_cpus", - "ordered-float 4.2.0", + "ordered-float", "quanta 0.12.2", "radix_trie", "sketches-ddsketch 0.2.1", @@ -2042,15 +2038,6 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" -[[package]] -name = "ordered-float" -version = "3.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "4.2.0" diff --git a/crates/udp/Cargo.toml b/crates/udp/Cargo.toml index 977ae6a..430ab49 100644 --- a/crates/udp/Cargo.toml +++ b/crates/udp/Cargo.toml @@ -56,15 +56,14 @@ time = { version = "0.3", features = ["formatting"] } tinytemplate = "1" # prometheus feature -metrics = { version = "0.21", optional = true } -metrics-util = { version = "0.15", optional = true } -metrics-exporter-prometheus = { version = "0.12", optional = true, default-features = false, features = ["http-listener"] } +metrics = { version = "0.22", optional = true } +metrics-util = { version = "0.16", optional = true } +metrics-exporter-prometheus = { version = "0.13", optional = true, default-features = false, features = ["http-listener"] } # io-uring feature io-uring = { version = "0.6", optional = true } [dev-dependencies] -hex = "0.4" tempfile = "3" quickcheck = "1" quickcheck_macros = "1" diff --git a/crates/udp/src/workers/statistics/collector.rs b/crates/udp/src/workers/statistics/collector.rs index 33c0a4e..820e0b5 100644 --- a/crates/udp/src/workers/statistics/collector.rs +++ b/crates/udp/src/workers/statistics/collector.rs @@ -9,6 +9,18 @@ use serde::Serialize; use crate::common::Statistics; use crate::config::Config; +#[cfg(feature = "prometheus")] +macro_rules! set_peer_histogram_gauge { + ($ip_version:ident, $data:expr, $type_label:expr) => { + ::metrics::gauge!( + "aquatic_peers_per_torrent", + "type" => $type_label, + "ip_version" => $ip_version.clone(), + ) + .set($data as f64); + }; +} + pub struct StatisticsCollector { shared: Arc, last_update: Instant, @@ -79,59 +91,65 @@ impl StatisticsCollector { if config.statistics.run_prometheus_endpoint { ::metrics::counter!( "aquatic_requests_total", - requests_received.try_into().unwrap(), "ip_version" => self.ip_version.clone(), - ); + ) + .increment(requests_received.try_into().unwrap()); + ::metrics::counter!( "aquatic_responses_total", - responses_sent_connect.try_into().unwrap(), "type" => "connect", "ip_version" => self.ip_version.clone(), - ); + ) + .increment(responses_sent_connect.try_into().unwrap()); + ::metrics::counter!( "aquatic_responses_total", - responses_sent_announce.try_into().unwrap(), "type" => "announce", "ip_version" => self.ip_version.clone(), - ); + ) + .increment(responses_sent_announce.try_into().unwrap()); + ::metrics::counter!( "aquatic_responses_total", - responses_sent_scrape.try_into().unwrap(), "type" => "scrape", "ip_version" => self.ip_version.clone(), - ); + ) + .increment(responses_sent_scrape.try_into().unwrap()); + ::metrics::counter!( "aquatic_responses_total", - responses_sent_error.try_into().unwrap(), "type" => "error", "ip_version" => self.ip_version.clone(), - ); + ) + .increment(responses_sent_error.try_into().unwrap()); + ::metrics::counter!( "aquatic_rx_bytes", - bytes_received.try_into().unwrap(), "ip_version" => self.ip_version.clone(), - ); + ) + .increment(bytes_received.try_into().unwrap()); + ::metrics::counter!( "aquatic_tx_bytes", - bytes_sent.try_into().unwrap(), "ip_version" => self.ip_version.clone(), - ); + ) + .increment(bytes_sent.try_into().unwrap()); for (worker_index, n) in num_torrents_by_worker.iter().copied().enumerate() { ::metrics::gauge!( "aquatic_torrents", - n as f64, "ip_version" => self.ip_version.clone(), "worker_index" => worker_index.to_string(), - ); + ) + .set(n as f64); } for (worker_index, n) in num_peers_by_worker.iter().copied().enumerate() { ::metrics::gauge!( "aquatic_peers", - n as f64, "ip_version" => self.ip_version.clone(), "worker_index" => worker_index.to_string(), - ); + ) + .set(n as f64); } if config.statistics.torrent_peer_histograms { @@ -236,83 +254,18 @@ impl PeerHistogramStatistics { #[cfg(feature = "prometheus")] fn update_metrics(&self, ip_version: String) { - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.min as f64, - "type" => "max", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p10 as f64, - "type" => "p10", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p20 as f64, - "type" => "p20", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p30 as f64, - "type" => "p30", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p40 as f64, - "type" => "p40", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p50 as f64, - "type" => "p50", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p60 as f64, - "type" => "p60", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p70 as f64, - "type" => "p70", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p80 as f64, - "type" => "p80", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p90 as f64, - "type" => "p90", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p99 as f64, - "type" => "p99", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.p999 as f64, - "type" => "p99.9", - "ip_version" => ip_version.clone(), - ); - ::metrics::gauge!( - "aquatic_peers_per_torrent", - self.max as f64, - "type" => "max", - "ip_version" => ip_version.clone(), - ); + set_peer_histogram_gauge!(ip_version, self.min, "min"); + set_peer_histogram_gauge!(ip_version, self.p10, "p10"); + set_peer_histogram_gauge!(ip_version, self.p20, "p20"); + set_peer_histogram_gauge!(ip_version, self.p30, "p30"); + set_peer_histogram_gauge!(ip_version, self.p40, "p40"); + set_peer_histogram_gauge!(ip_version, self.p50, "p50"); + set_peer_histogram_gauge!(ip_version, self.p60, "p60"); + set_peer_histogram_gauge!(ip_version, self.p70, "p70"); + set_peer_histogram_gauge!(ip_version, self.p80, "p80"); + set_peer_histogram_gauge!(ip_version, self.p90, "p90"); + set_peer_histogram_gauge!(ip_version, self.p99, "p99"); + set_peer_histogram_gauge!(ip_version, self.p999, "p999"); + set_peer_histogram_gauge!(ip_version, self.max, "max"); } } diff --git a/crates/udp/src/workers/statistics/mod.rs b/crates/udp/src/workers/statistics/mod.rs index c950850..e9a8565 100644 --- a/crates/udp/src/workers/statistics/mod.rs +++ b/crates/udp/src/workers/statistics/mod.rs @@ -152,9 +152,9 @@ pub fn run_statistics_worker( for (prefix, count) in prefixes { ::metrics::gauge!( "aquatic_peer_id_prefixes", - count as f64, "prefix_hex" => prefix.to_string(), - ); + ) + .set(count as f64); } } @@ -169,9 +169,9 @@ pub fn run_statistics_worker( if config.statistics.run_prometheus_endpoint { ::metrics::gauge!( "aquatic_peer_clients", - count as f64, "client" => client.to_string(), - ); + ) + .set(count as f64); } }