From fc76c2d7a0c2d3801d400295ff56fda92531a772 Mon Sep 17 00:00:00 2001 From: Mark Sinclair Date: Fri, 1 Aug 2025 12:58:52 +0100 Subject: [PATCH] wip --- Cargo.lock | 115 +++++++----------- Cargo.toml | 11 +- common/bin-common/Cargo.toml | 4 +- common/gateway-requests/Cargo.toml | 5 +- .../src/registration/handshake/state.rs | 2 +- .../src/types/text_request/mod.rs | 12 ++ gateway/Cargo.toml | 6 +- .../websocket/connection_handler/fresh.rs | 33 ++++- sdk/rust/nym-sdk/Cargo.toml | 20 +-- 9 files changed, 116 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dc39b30540..c63a5e50fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5171,13 +5171,13 @@ dependencies = [ "clap_complete_fig", "const-str", "log", - "opentelemetry 0.19.0", + "opentelemetry 0.30.0", "opentelemetry-jaeger", "schemars 0.8.22", "serde", "serde_json", "tracing", - "tracing-opentelemetry 0.19.0", + "tracing-opentelemetry", "tracing-subscriber", "tracing-tree", "utoipa", @@ -6015,6 +6015,7 @@ dependencies = [ "nym-validator-client 0.1.0", "nym-wireguard", "nym-wireguard-types 0.1.0", + "opentelemetry 0.30.0", "rand 0.8.5", "sha2 0.10.9", "sqlx", @@ -6025,6 +6026,7 @@ dependencies = [ "tokio-tungstenite", "tokio-util", "tracing", + "tracing-opentelemetry", "url", "zeroize", ] @@ -6083,6 +6085,7 @@ dependencies = [ "nym-sphinx 0.1.0", "nym-statistics-common 0.1.0", "nym-task 0.1.0", + "opentelemetry 0.30.0", "rand 0.8.5", "serde", "serde_json", @@ -7091,10 +7094,9 @@ dependencies = [ "tokio-stream", "tokio-util", "toml 0.8.23", - "tonic 0.13.1", "tracing", "tracing-core", - "tracing-opentelemetry 0.31.0", + "tracing-opentelemetry", "tracing-subscriber", "url", "uuid", @@ -8256,12 +8258,16 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.19.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk 0.19.0", + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", ] [[package]] @@ -8280,15 +8286,15 @@ dependencies = [ [[package]] name = "opentelemetry-http" -version = "0.8.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906" +checksum = "b0ba633e55c5ea6f431875ba55e71664f2fa5d3a90bd34ec9302eecc41c865dd" dependencies = [ "async-trait", "bytes", "http 0.2.12", "isahc", - "opentelemetry_api", + "opentelemetry 0.23.0", ] [[package]] @@ -8306,20 +8312,19 @@ dependencies = [ [[package]] name = "opentelemetry-jaeger" -version = "0.18.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" +checksum = "501b471b67b746d9a07d4c29f8be00f952d1a2eca356922ede0098cbaddff19f" dependencies = [ "async-trait", - "futures", - "futures-executor", + "futures-core", + "futures-util", "http 0.2.12", "isahc", - "once_cell", - "opentelemetry 0.19.0", - "opentelemetry-http 0.8.0", - "opentelemetry-semantic-conventions 0.11.0", - "thiserror 1.0.69", + "opentelemetry 0.23.0", + "opentelemetry-http 0.12.0", + "opentelemetry-semantic-conventions 0.15.0", + "opentelemetry_sdk 0.23.0", "thrift", "tokio", ] @@ -8357,12 +8362,9 @@ dependencies = [ [[package]] name = "opentelemetry-semantic-conventions" -version = "0.11.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" -dependencies = [ - "opentelemetry 0.19.0", -] +checksum = "1869fb4bb9b35c5ba8a1e40c9b128a7b4c010d07091e864a29da19e4fe2ca4d7" [[package]] name = "opentelemetry-semantic-conventions" @@ -8381,42 +8383,23 @@ dependencies = [ "opentelemetry_sdk 0.30.0", ] -[[package]] -name = "opentelemetry_api" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" -dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", - "urlencoding", -] - [[package]] name = "opentelemetry_sdk" -version = "0.19.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" dependencies = [ "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", "futures-channel", "futures-executor", "futures-util", + "lazy_static", "once_cell", - "opentelemetry_api", + "opentelemetry 0.23.0", + "ordered-float 4.6.0", "percent-encoding", "rand 0.8.5", "thiserror 1.0.69", - "tokio", - "tokio-stream", ] [[package]] @@ -8450,6 +8433,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + [[package]] name = "overload" version = "0.1.1" @@ -11145,7 +11137,7 @@ dependencies = [ "byteorder", "integer-encoding", "log", - "ordered-float", + "ordered-float 2.10.1", "threadpool", ] @@ -11470,10 +11462,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" dependencies = [ "async-trait", - "axum 0.8.4", "base64 0.22.1", "bytes", - "h2 0.4.11", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -11483,7 +11473,6 @@ dependencies = [ "percent-encoding", "pin-project", "prost 0.13.5", - "socket2", "tokio", "tokio-rustls 0.26.2", "tokio-stream", @@ -11667,20 +11656,6 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" -dependencies = [ - "once_cell", - "opentelemetry 0.19.0", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-subscriber", -] - [[package]] name = "tracing-opentelemetry" version = "0.31.0" @@ -12112,12 +12087,6 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "utf-8" version = "0.7.6" diff --git a/Cargo.toml b/Cargo.toml index d3e27c2fa3..5fea382a36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -281,8 +281,12 @@ nix = "0.27.1" notify = "5.1.0" okapi = "0.7.0" once_cell = "1.21.3" -opentelemetry = "0.19.0" -opentelemetry-jaeger = "0.18.0" +opentelemetry = "0.30.0" +opentelemetry-otlp = "0.30.0" +opentelemetry-semantic-conventions = "0.30.0" +opentelemetry_sdk = "0.30.0" +opentelemetry-stdout = "0.30.0" +opentelemetry-jaeger = "0.22.0" parking_lot = "0.12.3" pem = "0.8" petgraph = "0.6.5" @@ -338,8 +342,9 @@ toml = "0.8.22" tower = "0.5.2" tower-http = "0.5.2" tracing = "0.1.41" +tracing-core = "0.1.33" tracing-log = "0.2" -tracing-opentelemetry = "0.19.0" +tracing-opentelemetry = "0.31.0" tracing-subscriber = "0.3.19" tracing-tree = "0.2.2" tracing-indicatif = "0.3.9" diff --git a/common/bin-common/Cargo.toml b/common/bin-common/Cargo.toml index aa75898ec4..2dd6825877 100644 --- a/common/bin-common/Cargo.toml +++ b/common/bin-common/Cargo.toml @@ -21,10 +21,10 @@ serde_json = { workspace = true, optional = true } tracing-subscriber = { workspace = true, features = ["env-filter"], optional = true } tracing-tree = { workspace = true, optional = true } tracing = { workspace = true, optional = true } -opentelemetry-jaeger = { workspace = true, features = ["rt-tokio", "collector_client", "isahc_collector_client"], optional = true } +opentelemetry-jaeger = { workspace = true, features = ["tokio", "collector_client", "isahc_collector_client"], optional = true } tracing-opentelemetry = { workspace = true, optional = true } utoipa = { workspace = true, optional = true } -opentelemetry = { workspace = true, features = ["rt-tokio"], optional = true } +opentelemetry = { workspace = true, optional = true } [build-dependencies] diff --git a/common/gateway-requests/Cargo.toml b/common/gateway-requests/Cargo.toml index c39c5530dd..1f50ab91c2 100644 --- a/common/gateway-requests/Cargo.toml +++ b/common/gateway-requests/Cargo.toml @@ -19,7 +19,6 @@ serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } strum = { workspace = true } thiserror = { workspace = true } -tracing = { workspace = true, features = ["log"] } time = { workspace = true } subtle = { workspace = true } zeroize = { workspace = true } @@ -34,6 +33,9 @@ nym-task = { path = "../task" } nym-credentials = { path = "../credentials" } nym-credentials-interface = { path = "../credentials-interface" } +opentelemetry = { workspace = true, features = ["trace"] } +tracing = { workspace = true, features = ["std", "attributes", "tracing-attributes"] } + [target."cfg(not(target_arch = \"wasm32\"))".dependencies.tokio] workspace = true features = ["time"] @@ -48,3 +50,4 @@ default-features = false [dev-dependencies] nym-compact-ecash = { path = "../nym_offline_compact_ecash" } # we need specific imports in tests + diff --git a/common/gateway-requests/src/registration/handshake/state.rs b/common/gateway-requests/src/registration/handshake/state.rs index 62e9eba9e8..44c1cb359f 100644 --- a/common/gateway-requests/src/registration/handshake/state.rs +++ b/common/gateway-requests/src/registration/handshake/state.rs @@ -20,7 +20,7 @@ use rand::{thread_rng, CryptoRng, RngCore}; use std::any::{type_name, Any}; use std::str::FromStr; use std::time::Duration; -use tracing::log::*; +use tracing::{error, trace}; use tungstenite::Message as WsMessage; #[cfg(not(target_arch = "wasm32"))] diff --git a/common/gateway-requests/src/types/text_request/mod.rs b/common/gateway-requests/src/types/text_request/mod.rs index 342bc9adfd..ff6709c38d 100644 --- a/common/gateway-requests/src/types/text_request/mod.rs +++ b/common/gateway-requests/src/types/text_request/mod.rs @@ -12,6 +12,7 @@ use nym_credentials_interface::CredentialSpendingData; use nym_crypto::asymmetric::ed25519; use nym_sphinx::DestinationAddressBytes; use nym_statistics_common::types::SessionType; +use opentelemetry::trace::TraceContextExt; use serde::{Deserialize, Serialize}; use std::str::FromStr; use tungstenite::Message; @@ -76,6 +77,11 @@ pub enum ClientControlRequest { address: String, enc_address: String, iv: String, + + /// this is a trace id that is used in testing and performance verification + /// in mainnet, this will always be set to None + #[serde(default)] + debug_trace_id: Option, }, AuthenticateV2(Box), @@ -127,11 +133,17 @@ impl ClientControlRequest { let nonce = shared_key.random_nonce_or_iv(); let ciphertext = shared_key.encrypt_naive(address.as_bytes_ref(), Some(&nonce))?; + let otel_context = opentelemetry::Context::current(); + let span = otel_context.span(); + let context = span.span_context(); + let trace_id = context.trace_id(); + Ok(ClientControlRequest::Authenticate { protocol_version, address: address.as_base58_string(), enc_address: bs58::encode(&ciphertext).into_string(), iv: bs58::encode(&nonce).into_string(), + debug_trace_id: Some(trace_id.to_string()), }) } diff --git a/gateway/Cargo.toml b/gateway/Cargo.toml index 33b9cf3c7b..c9ea0072b6 100644 --- a/gateway/Cargo.toml +++ b/gateway/Cargo.toml @@ -40,7 +40,7 @@ tokio = { workspace = true, features = [ tokio-stream = { workspace = true, features = ["fs"] } tokio-tungstenite = { workspace = true } tokio-util = { workspace = true, features = ["codec"] } -tracing = { workspace = true } +#tracing = { workspace = true } url = { workspace = true, features = ["serde"] } zeroize = { workspace = true } @@ -72,6 +72,10 @@ nym-wireguard = { path = "../common/wireguard" } nym-wireguard-types = { path = "../common/wireguard-types", default-features = false } defguard_wireguard_rs = { workspace = true } +opentelemetry = { workspace = true, features = ["trace"] } + +tracing = { workspace = true, features = ["std", "attributes", "tracing-attributes"] } +tracing-opentelemetry = { workspace = true } [build-dependencies] tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } diff --git a/gateway/src/node/client_handling/websocket/connection_handler/fresh.rs b/gateway/src/node/client_handling/websocket/connection_handler/fresh.rs index 2edbf16b4c..3dbfeb6c42 100644 --- a/gateway/src/node/client_handling/websocket/connection_handler/fresh.rs +++ b/gateway/src/node/client_handling/websocket/connection_handler/fresh.rs @@ -33,6 +33,7 @@ use nym_gateway_storage::traits::SharedKeyGatewayStorage; use nym_node_metrics::events::MetricsEvent; use nym_sphinx::DestinationAddressBytes; use nym_task::TaskClient; +use opentelemetry::trace::TraceContextExt; use rand::CryptoRng; use std::net::SocketAddr; use std::time::Duration; @@ -41,7 +42,8 @@ use time::OffsetDateTime; use tokio::io::{AsyncRead, AsyncWrite}; use tokio::time::timeout; use tokio_tungstenite::tungstenite::{protocol::Message, Error as WsError}; -use tracing::*; +use tracing::{debug, error, info, info_span, instrument, warn}; +use tracing_opentelemetry::OpenTelemetrySpanExt; #[derive(Debug, Error)] pub(crate) enum InitialAuthenticationError { @@ -861,7 +863,36 @@ impl FreshHandler { address, enc_address, iv, + debug_trace_id, } => { + if let Some(trace_id) = debug_trace_id { + let span = info_span!("authenticate_v1"); + let _enter = span.enter(); + + // let otel_context = span.context(); + // let otel_span = otel_context.span(); + // let otel_span_context = otel_span.span_context(); + // + // let trace_id = opentelemetry::trace::TraceId::from_hex(&trace_id).unwrap(); + // let span_id = otel_span_context.span_id().clone(); + // + // let span_context = opentelemetry::trace::SpanContext::new( + // trace_id, + // span_id, + // opentelemetry::trace::TraceFlags::SAMPLED, + // true, // is_remote + // Default::default(), + // ); + // + // let new_context = opentelemetry::Context::try_into(span_context).unwrap(); + // + // span.set_parent(new_context); + + let mut cx = tracing::Span::current().context(); + + tracing::span::Span::current().set_parent(cx); + } + self.handle_legacy_authenticate(protocol_version, address, enc_address, iv) .await } diff --git a/sdk/rust/nym-sdk/Cargo.toml b/sdk/rust/nym-sdk/Cargo.toml index 411b3a4952..768dbfde48 100644 --- a/sdk/rust/nym-sdk/Cargo.toml +++ b/sdk/rust/nym-sdk/Cargo.toml @@ -74,13 +74,13 @@ serde = { workspace = true, features = ["derive"] } #tracing-subscriber = { workspace = true, features = ["env-filter", "registry", "std"] } dirs.workspace = true -opentelemetry = { version = "0.30.0", default-features = true } -opentelemetry_sdk = { version = "0.30.0", default-features = true } -tracing = { version = "0.1.35", default-features = false, features = ["std"] } -tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] } -tracing-core = "0.1.28" -tonic = { version = "0.13.1", features = ["tls-webpki-roots"] } -tracing-opentelemetry = "0.31.0" +opentelemetry = { workspace = true } +opentelemetry_sdk = { workspace = true } + +tracing = { workspace = true, features = ["std"] } +tracing-subscriber = { workspace = true, features = ["registry", "std"] } +tracing-core = { workspace = true } +tracing-opentelemetry = { workspace = true } [dev-dependencies] anyhow = { workspace = true } @@ -91,10 +91,10 @@ tokio = { workspace = true, features = ["full"] } time = { workspace = true } nym-bin-common = { path = "../../../common/bin-common", features = ["basic_tracing"] } -opentelemetry-semantic-conventions = { version = "0.30.0", features = ["semconv_experimental"] } -opentelemetry-otlp = { version = "0.30.0", features = ["metrics", "grpc-tonic", "tls", +opentelemetry-semantic-conventions = { workspace = true, features = ["semconv_experimental"] } +opentelemetry-otlp = { workspace = true, features = ["metrics", "grpc-tonic", "tls", "tls-webpki-roots", ] } -opentelemetry-stdout = { version = "0.30.0", features = ["trace", "metrics"] } +opentelemetry-stdout = { workspace = true, features = ["trace", "metrics"] } # extra dependencies for libp2p examples #libp2p = { git = "https://github.com/ChainSafe/rust-libp2p.git", rev = "e3440d25681df380c9f0f8cfdcfd5ecc0a4f2fb6", features = [ "identify", "macros", "ping", "tokio", "tcp", "dns", "websocket", "noise", "mplex", "yamux", "gossipsub" ]}