diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 00215240d..6a1b5e296 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -658,7 +658,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tower 0.5.2", + "tower", "tower-layer", "tower-service", ] @@ -4983,9 +4983,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "opentelemetry" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e87237e2775f74896f9ad219d26a2081751187eb7c9f5c58dde20a23b95d16c" +checksum = "aaf416e4cb72756655126f7dd7bb0af49c674f4c1b9903e80c009e0c37e552e6" dependencies = [ "futures-core", "futures-sink", @@ -4997,25 +4997,23 @@ dependencies = [ [[package]] name = "opentelemetry-http" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d7ab32b827b5b495bd90fa95a6cb65ccc293555dcc3199ae2937d2d237c8ed" +checksum = "50f6639e842a97dbea8886e3439710ae463120091e2e064518ba8e716e6ac36d" dependencies = [ "async-trait", "bytes", "http 1.3.1", "opentelemetry", "reqwest", - "tracing", ] [[package]] name = "opentelemetry-otlp" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d899720fe06916ccba71c01d04ecd77312734e2de3467fd30d9d580c8ce85656" +checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b" dependencies = [ - "futures-core", "http 1.3.1", "opentelemetry", "opentelemetry-http", @@ -5031,9 +5029,9 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c40da242381435e18570d5b9d50aca2a4f4f4d8e146231adb4e7768023309b3" +checksum = "2e046fd7660710fe5a05e8748e70d9058dc15c94ba914e7c4faa7c728f0e8ddc" dependencies = [ "opentelemetry", "opentelemetry_sdk", @@ -5043,26 +5041,24 @@ dependencies = [ [[package]] name = "opentelemetry-stdout" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e27d446dabd68610ef0b77d07b102ecde827a4596ea9c01a4d3811e945b286" +checksum = "447191061af41c3943e082ea359ab8b64ff27d6d34d30d327df309ddef1eef6f" dependencies = [ "chrono", - "futures-util", "opentelemetry", "opentelemetry_sdk", ] [[package]] name = "opentelemetry_sdk" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afdefb21d1d47394abc1ba6c57363ab141be19e27cc70d0e422b7f303e4d290b" +checksum = "11f644aa9e5e31d11896e024305d7e3c98a88884d9f8919dbf37a9991bc47a4b" dependencies = [ "futures-channel", "futures-executor", "futures-util", - "glob", "opentelemetry", "percent-encoding", "rand 0.9.1", @@ -5070,7 +5066,6 @@ dependencies = [ "thiserror 2.0.15", "tokio", "tokio-stream", - "tracing", ] [[package]] @@ -6028,7 +6023,7 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", - "tower 0.5.2", + "tower", "tower-http", "tower-service", "url", @@ -8105,9 +8100,9 @@ checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" [[package]] name = "tonic" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" dependencies = [ "async-trait", "base64 0.22.1", @@ -8123,27 +8118,7 @@ dependencies = [ "prost", "tokio", "tokio-stream", - "tower 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util", + "tower", "tower-layer", "tower-service", "tracing", @@ -8157,11 +8132,15 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", + "indexmap 2.9.0", "pin-project-lite", + "slab", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -8177,7 +8156,7 @@ dependencies = [ "http-body", "iri-string", "pin-project-lite", - "tower 0.5.2", + "tower", "tower-layer", "tower-service", ] @@ -8263,9 +8242,9 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd8e764bd6f5813fd8bebc3117875190c5b0415be8f7f8059bffb6ecd979c444" +checksum = "ddcf5959f39507d0d04d6413119c04f33b623f4f951ebcbdddddfad2d0623a9c" dependencies = [ "js-sys", "once_cell", @@ -8291,8 +8270,8 @@ dependencies = [ [[package]] name = "tracing-stackdriver" -version = "0.11.0" -source = "git+https://github.com/thomaseizinger/tracing-stackdriver?branch=bump-otel-0.29#341b96b407d0e49e1f4e5708d8cf4d6a86380140" +version = "0.12.0" +source = "git+https://github.com/thomaseizinger/tracing-stackdriver?branch=bump-otel-0.30#0b86826d6229cefca4d567c04dce4ff18aaf534b" dependencies = [ "Inflector", "opentelemetry", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 0f665be5c..6c9d9c2c6 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -117,10 +117,10 @@ nix = "0.30.1" nu-ansi-term = "0.50" num_cpus = "1.17.0" once_cell = "1.21.3" -opentelemetry = "0.29.0" -opentelemetry-otlp = "0.29.0" -opentelemetry-stdout = "0.29.0" -opentelemetry_sdk = "0.29.0" +opentelemetry = "0.30.0" +opentelemetry-otlp = "0.30.0" +opentelemetry-stdout = "0.30.0" +opentelemetry_sdk = "0.30.0" os_info = { version = "3", default-features = false } output_vt100 = "0.1" parking_lot = "0.12.4" @@ -193,8 +193,8 @@ tracing-core = "0.1.34" tracing-journald = "0.3.1" tracing-log = "0.2.0" tracing-macros = { git = "https://github.com/tokio-rs/tracing", branch = "v0.1.x" } # Contains `dbg!` but for `tracing`. -tracing-opentelemetry = "0.30.0" -tracing-stackdriver = "0.11.0" +tracing-opentelemetry = "0.31.0" +tracing-stackdriver = "0.12.0" tracing-subscriber = { version = "0.3.19", features = ["parking_lot"] } trackable = "1.3.0" tun = { path = "connlib/tun" } @@ -229,7 +229,7 @@ private-intra-doc-links = "allow" # We don't publish any of our docs but want to boringtun = { git = "https://github.com/firezone/boringtun", branch = "master" } ip_network = { git = "https://github.com/JakubOnderka/ip_network", branch = "master" } # Waiting for release. ip_network_table = { git = "https://github.com/edmonds/ip_network_table", branch = "some-useful-traits" } # For `Debug` and `Clone` -tracing-stackdriver = { git = "https://github.com/thomaseizinger/tracing-stackdriver", branch = "bump-otel-0.29" } # Waiting for release. +tracing-stackdriver = { git = "https://github.com/thomaseizinger/tracing-stackdriver", branch = "bump-otel-0.30" } # Waiting for release. softbuffer = { git = "https://github.com/rust-windowing/softbuffer" } # Waiting for release. str0m = { git = "https://github.com/algesten/str0m", branch = "main" } moka = { git = "https://github.com/moka-rs/moka", branch = "main" } # Waiting for release. diff --git a/rust/connlib/bufferpool/lib.rs b/rust/connlib/bufferpool/lib.rs index ebf1ce290..73d5580bc 100644 --- a/rust/connlib/bufferpool/lib.rs +++ b/rust/connlib/bufferpool/lib.rs @@ -277,7 +277,8 @@ mod tests { use opentelemetry::global; use opentelemetry_sdk::metrics::{ - InMemoryMetricExporter, PeriodicReader, SdkMeterProvider, data::Sum, + InMemoryMetricExporter, PeriodicReader, SdkMeterProvider, + data::{AggregatedMetrics, MetricData}, }; use super::*; @@ -366,10 +367,17 @@ mod tests { fn get_num_buffers(exporter: &InMemoryMetricExporter) -> i64 { let metrics = exporter.get_finished_metrics().unwrap(); - let metric = &metrics.iter().last().unwrap().scope_metrics[0].metrics[0]; - let sum = metric.data.as_any().downcast_ref::>().unwrap(); + let metric = &metrics + .iter() + .last() + .and_then(|m| m.scope_metrics().next()) + .and_then(|m| m.metrics().next()) + .unwrap(); + let AggregatedMetrics::I64(MetricData::Sum(sum)) = metric.data() else { + panic!("Not an i64 sum"); + }; - sum.data_points[0].value + sum.data_points().next().unwrap().value() } fn init_meter_provider() -> (SdkMeterProvider, InMemoryMetricExporter) { diff --git a/rust/deny.toml b/rust/deny.toml index 29aafa062..06b153716 100644 --- a/rust/deny.toml +++ b/rust/deny.toml @@ -265,7 +265,6 @@ skip = [ "thiserror-impl", "toml", "toml_edit", - "tower", "wasi", "webpki-roots", "windows-sys", diff --git a/rust/relay/server/tests/ebpf_ipv4.rs b/rust/relay/server/tests/ebpf_ipv4.rs index 5101c0ec4..d2f5bb93a 100644 --- a/rust/relay/server/tests/ebpf_ipv4.rs +++ b/rust/relay/server/tests/ebpf_ipv4.rs @@ -3,7 +3,8 @@ use firezone_relay::{AllocationPort, ClientSocket, PeerSocket, ebpf}; use opentelemetry::global; use opentelemetry_sdk::metrics::{ - InMemoryMetricExporter, PeriodicReader, SdkMeterProvider, data::Sum, + InMemoryMetricExporter, PeriodicReader, SdkMeterProvider, + data::{AggregatedMetrics, MetricData}, }; use std::time::Duration; use tokio::net::UdpSocket; @@ -98,11 +99,18 @@ async fn ping_pong() { assert!(!metrics.is_empty()); - let metric = &metrics.iter().last().unwrap().scope_metrics[0].metrics[0]; - let sum = metric.data.as_any().downcast_ref::>().unwrap(); + let metric = &metrics + .iter() + .last() + .and_then(|m| m.scope_metrics().next()) + .and_then(|m| m.metrics().next()) + .unwrap(); + let AggregatedMetrics::U64(MetricData::Sum(sum)) = metric.data() else { + panic!("Not an u64 sum"); + }; - assert_eq!(metric.name, "data_relayed_ebpf_bytes"); - assert_eq!(sum.data_points[0].value, 4 + 4); // "ping" and "pong" are both 4 bytes. + assert_eq!(metric.name(), "data_relayed_ebpf_bytes"); + assert_eq!(sum.data_points().next().unwrap().value(), 4 + 4); // "ping" and "pong" are both 4 bytes. } fn init_meter_provider() -> (SdkMeterProvider, InMemoryMetricExporter) { diff --git a/rust/telemetry/src/maybe_push_metrics_exporter.rs b/rust/telemetry/src/maybe_push_metrics_exporter.rs index da244532b..f9ccefd72 100644 --- a/rust/telemetry/src/maybe_push_metrics_exporter.rs +++ b/rust/telemetry/src/maybe_push_metrics_exporter.rs @@ -16,7 +16,7 @@ where E: PushMetricExporter, F: Fn() -> bool + Send + Sync + 'static, { - fn export(&self, metrics: &mut ResourceMetrics) -> impl Future + Send { + fn export(&self, metrics: &ResourceMetrics) -> impl Future + Send { if (self.should_export)() { return Either::Left(self.inner.export(metrics)); } @@ -35,4 +35,8 @@ where fn temporality(&self) -> Temporality { self.inner.temporality() } + + fn shutdown_with_timeout(&self, timeout: std::time::Duration) -> OTelSdkResult { + self.inner.shutdown_with_timeout(timeout) + } } diff --git a/rust/telemetry/src/noop_push_metrics_exporter.rs b/rust/telemetry/src/noop_push_metrics_exporter.rs index 5a7955d24..1ab1fa6ac 100644 --- a/rust/telemetry/src/noop_push_metrics_exporter.rs +++ b/rust/telemetry/src/noop_push_metrics_exporter.rs @@ -8,7 +8,7 @@ use opentelemetry_sdk::{ pub struct NoopPushMetricsExporter; impl PushMetricExporter for NoopPushMetricsExporter { - fn export(&self, _: &mut ResourceMetrics) -> impl Future + Send { + fn export(&self, _: &ResourceMetrics) -> impl Future + Send { std::future::ready(Ok(())) } @@ -23,4 +23,8 @@ impl PushMetricExporter for NoopPushMetricsExporter { fn temporality(&self) -> Temporality { Temporality::default() } + + fn shutdown_with_timeout(&self, _: std::time::Duration) -> OTelSdkResult { + Ok(()) + } }