From df7eb4759368ffa86b9f844f53bd826ad2897c3d Mon Sep 17 00:00:00 2001 From: fanyang Date: Thu, 21 Aug 2025 11:41:42 +0800 Subject: [PATCH] Support tokio-console (#1259) --- Cargo.lock | 130 +++++++++++++++++++++++++++++++++++++++++- easytier/Cargo.toml | 2 + easytier/src/utils.rs | 24 ++++++-- 3 files changed, 149 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbdffaf..ebc74f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1370,6 +1370,45 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "hyper-util", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -2072,6 +2111,7 @@ dependencies = [ "cidr", "clap", "clap_complete", + "console-subscriber", "crossbeam", "dashmap", "dbus", @@ -3307,6 +3347,19 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + [[package]] name = "heapless" version = "0.8.0" @@ -3602,6 +3655,19 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + [[package]] name = "hyper-tls" version = "0.6.0" @@ -5807,6 +5873,26 @@ dependencies = [ "siphasher 0.3.11", ] +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -8929,6 +9015,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.52.0", ] @@ -8978,9 +9065,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -9147,6 +9234,36 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tonic-build" version = "0.12.1" @@ -9166,6 +9283,15 @@ 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-layer", "tower-service", "tracing", diff --git a/easytier/Cargo.toml b/easytier/Cargo.toml index fda9198..66b6e6a 100644 --- a/easytier/Cargo.toml +++ b/easytier/Cargo.toml @@ -37,6 +37,7 @@ tracing-subscriber = { version = "0.3", features = [ "time", ] } tracing-appender = "0.2.3" +console-subscriber = { version = "0.4.1", optional = true } thiserror = "1.0" auto_impl = "1.1.0" crossbeam = "0.8.4" @@ -321,3 +322,4 @@ smoltcp = ["dep:smoltcp", "dep:parking_lot"] socks5 = ["dep:smoltcp"] jemalloc = ["dep:jemallocator", "dep:jemalloc-sys"] jemalloc-prof = ["jemalloc", "dep:jemalloc-ctl", "jemalloc-ctl/stats", "jemalloc-sys/profiling", "jemalloc-sys/stats"] +tracing = ["tokio/tracing", "dep:console-subscriber"] diff --git a/easytier/src/utils.rs b/easytier/src/utils.rs index b623c32..fa2927e 100644 --- a/easytier/src/utils.rs +++ b/easytier/src/utils.rs @@ -2,7 +2,9 @@ use std::{fs::OpenOptions, str::FromStr}; use anyhow::Context; use tracing::level_filters::LevelFilter; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer}; +use tracing_subscriber::{ + layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, Registry, +}; use crate::common::{config::LoggingConfigLoader, get_logger_timer_rfc3339}; @@ -102,10 +104,22 @@ pub fn init_logger( .with_writer(std::io::stderr) .with_filter(console_filter); - tracing_subscriber::Registry::default() - .with(console_layer) - .with(file_layer) - .init(); + let registry = Registry::default(); + + #[cfg(not(feature = "tracing"))] + { + registry.with(console_layer).with(file_layer).init(); + } + + #[cfg(feature = "tracing")] + { + let console_subscriber_layer = console_subscriber::ConsoleLayer::builder().spawn(); + registry + .with(console_layer) + .with(file_layer) + .with(console_subscriber_layer) + .init(); + } Ok(ret_sender) }