From fb261630015b23f3027a0cdb970e408f884e9f58 Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 17 Apr 2024 14:15:43 -0700 Subject: [PATCH 01/47] Add custom tracing --- custom_tracing/Cargo.toml | 20 +++++++ custom_tracing/src/lib.rs | 117 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 custom_tracing/Cargo.toml create mode 100644 custom_tracing/src/lib.rs diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml new file mode 100644 index 000000000..ecd525d91 --- /dev/null +++ b/custom_tracing/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "custom-tracing" +version = "0.1.0" +authors.workspace = true +license.workspace = true +edition.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +notify = "6" +anyhow = "1" +futures = "0" +tokio = { version = "1", features = ["rt-multi-thread", "signal"] } +tracing = "0" +tracing-subscriber = { version = "0", default-features = true, features = [ + "env-filter", + "registry", + "fmt", +] } diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs new file mode 100644 index 000000000..7a72aa791 --- /dev/null +++ b/custom_tracing/src/lib.rs @@ -0,0 +1,117 @@ +use anyhow::Result; +use futures::{channel::mpsc::channel, SinkExt, StreamExt}; +use notify::{event::DataChange, Config, RecommendedWatcher, RecursiveMode, Watcher}; +use std::{fs, path::Path}; +use tracing_subscriber::{ + layer::SubscriberExt, + reload::{self, Handle}, + util::SubscriberInitExt, + EnvFilter, Registry, +}; + +pub async fn init(og_filter: String, file: String) -> Result<()> { + let (filtered_layer, reload_handle) = + reload::Layer::new(tracing_subscriber::EnvFilter::new(og_filter.clone())); + + tracing_subscriber::registry() + .with(filtered_layer) + .with(tracing_subscriber::fmt::layer()) + .init(); + + let state = State { + og_filter: og_filter.clone(), + reload_handle, + }; + + tokio::spawn(async move { + if let Err(e) = watch_file(state, file).await { + tracing::warn!("error: {:?}", e) + } + }); + + Ok(()) +} + +#[derive(Clone)] +pub struct State { + pub og_filter: String, + pub reload_handle: Handle, +} + +impl State { + fn handle_change(&self, content: String) -> Result<()> { + if content.is_empty() { + self.handle_delete() + } else { + match tracing_subscriber::EnvFilter::try_new(content.clone()) { + Err(_e) => tracing::warn!(filter = content, "failed to parse filter {:?}", _e), + Ok(new_filter) => { + self.reload_handle.modify(|filter| *filter = new_filter)?; + tracing::info!(filter = content, "updated"); + } + } + Ok(()) + } + } + + fn handle_delete(&self) -> Result<()> { + let new_filter = self.og_filter.clone(); + + self.reload_handle + .modify(|filter| *filter = tracing_subscriber::EnvFilter::new(new_filter.clone()))?; + + tracing::info!(filter = new_filter, "deleted tracing file, updated"); + Ok(()) + } +} + +async fn watch_file(state: State, file: String) -> Result<()> { + let (mut tx, mut rx) = channel(1); + + let mut watcher = RecommendedWatcher::new( + move |res| { + futures::executor::block_on(async { + tx.send(res).await.unwrap(); + }) + }, + Config::default(), + )?; + + watcher.watch(".".as_ref(), RecursiveMode::NonRecursive)?; + + while let Some(res) = rx.next().await { + match res { + Err(e) => tracing::warn!("watch error: {:?}", e), + Ok(event) => match event.kind { + notify::EventKind::Modify(notify::event::ModifyKind::Data(DataChange::Content)) => { + let event_path = event.paths.first().unwrap(); + + if Path::new(event_path).exists() { + match fs::read_to_string(event_path) { + Err(_e) => tracing::warn!("failed to read file {:?}", _e), + Ok(content) => { + if file_match(event_path, file.clone()) { + state.handle_change(content)?; + } + } + } + } + } + notify::EventKind::Remove(notify::event::RemoveKind::File) => { + let event_path = event.paths.first().unwrap(); + if file_match(event_path, file.clone()) { + state.handle_delete()?; + } + } + _e => tracing::debug!("ignored {:?}", _e), + }, + } + } + + Ok(()) +} + +fn file_match(event_path: &Path, file: String) -> bool { + let split = event_path.to_str().unwrap().split('/'); + *split.last().unwrap() == file +} From 45ba1a60ca1c55eecd346ac8721851cce50fac02 Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 17 Apr 2024 14:53:53 -0700 Subject: [PATCH 02/47] Add custom axum layer --- Cargo.lock | 205 ++++++++++++++++++++++++++++--- Cargo.toml | 93 ++++++++------ custom_tracing/Cargo.toml | 3 + custom_tracing/src/axum_layer.rs | 46 +++++++ custom_tracing/src/lib.rs | 2 + 5 files changed, 292 insertions(+), 57 deletions(-) create mode 100644 custom_tracing/src/axum_layer.rs diff --git a/Cargo.lock b/Cargo.lock index b943dc5a8..022ea2b57 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1244,7 +1244,7 @@ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core 0.3.4", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http 0.2.11", @@ -1258,7 +1258,11 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", "sync_wrapper", + "tokio", "tower", "tower-layer", "tower-service", @@ -1431,7 +1435,7 @@ dependencies = [ "rand_chacha 0.3.0", "rust_decimal", "serde", - "sha2 0.9.9", + "sha2 0.10.6", "thiserror", ] @@ -1471,6 +1475,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + [[package]] name = "bitmaps" version = "2.1.0" @@ -1860,7 +1870,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", "unicode-width", @@ -1874,7 +1884,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", - "bitflags", + "bitflags 1.3.2", "clap_lex 0.2.4", "indexmap 1.9.3", "once_cell", @@ -2319,6 +2329,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "custom-tracing" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum 0.6.20", + "futures", + "notify", + "tokio", + "tower-http", + "tower-layer", + "tracing", + "tracing-subscriber", +] + [[package]] name = "cxx" version = "1.0.82" @@ -2901,6 +2926,18 @@ dependencies = [ "uuid", ] +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + [[package]] name = "fixedbitset" version = "0.4.2" @@ -2944,6 +2981,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "futures" version = "0.3.28" @@ -3358,7 +3404,7 @@ dependencies = [ "bs58 0.5.0", "byteorder", "ed25519-compact", - "getrandom 0.1.16", + "getrandom 0.2.10", "k256", "lazy_static", "multihash", @@ -3829,6 +3875,26 @@ dependencies = [ "triggered", ] +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "instant" version = "0.1.12" @@ -4136,6 +4202,26 @@ dependencies = [ "typewit", ] +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "lazy-distributor" version = "0.1.0" @@ -4454,6 +4540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", + "log", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.48.0", ] @@ -4677,7 +4764,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -4694,6 +4781,35 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.5.0", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num" version = "0.2.1" @@ -4917,6 +5033,12 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "p256" version = "0.10.1" @@ -5570,7 +5692,7 @@ version = "10.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -5613,7 +5735,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -5622,7 +5744,16 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", ] [[package]] @@ -6050,6 +6181,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.20" @@ -6144,7 +6284,7 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -6753,7 +6893,7 @@ dependencies = [ "array-bytes", "base64 0.21.7", "bincode", - "bitflags", + "bitflags 1.3.2", "blake3", "borsh 0.10.3", "borsh 0.9.3", @@ -6975,7 +7115,7 @@ dependencies = [ "assert_matches", "base64 0.21.7", "bincode", - "bitflags", + "bitflags 1.3.2", "borsh 0.10.3", "bs58 0.4.0", "bytemuck", @@ -7343,7 +7483,7 @@ dependencies = [ "ahash 0.7.6", "atoi", "base64 0.13.1", - "bitflags", + "bitflags 1.3.2", "byteorder", "bytes", "chrono", @@ -7538,7 +7678,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -7882,7 +8022,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bytes", "futures-core", "futures-util", @@ -7938,6 +8078,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", ] [[package]] @@ -7947,12 +8099,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", + "nu-ansi-term", "once_cell", "regex", "sharded-slab", + "smallvec", "thread_local", "tracing", "tracing-core", + "tracing-log", ] [[package]] @@ -8005,7 +8160,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "rand 0.7.3", + "rand 0.8.5", "static_assertions", ] @@ -8158,6 +8313,12 @@ dependencies = [ "serde", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcell" version = "0.1.3" @@ -8212,6 +8373,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -8673,7 +8844,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "sha2 0.9.9", + "sha2 0.10.6", "thiserror", "twox-hash", "xorf", diff --git a/Cargo.toml b/Cargo.toml index 721b4919c..64d33e0ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,25 +3,26 @@ debug = true [workspace] members = [ - "boost_manager", - "db_store", - "denylist", - "file_store", - "ingest", - "iot_config", - "iot_packet_verifier", - "iot_verifier", - "metrics", - "mobile_config", - "mobile_config_cli", - "mobile_packet_verifier", - "mobile_verifier", - "poc_entropy", - "price", - "reward_index", - "reward_scheduler", - "solana", - "task_manager", + "boost_manager", + "custom_tracing", + "db_store", + "denylist", + "file_store", + "ingest", + "iot_config", + "iot_packet_verifier", + "iot_verifier", + "metrics", + "mobile_config", + "mobile_config_cli", + "mobile_packet_verifier", + "mobile_verifier", + "poc_entropy", + "price", + "reward_index", + "reward_scheduler", + "solana", + "task_manager", ] resolver = "2" @@ -32,14 +33,14 @@ edition = "2021" [workspace.dependencies] anchor-client = "0.29.0" -anyhow = {version = "1", features = ["backtrace"]} -bs58 = {version = "0.4", features=["check"]} +anyhow = { version = "1", features = ["backtrace"] } +bs58 = { version = "0.4", features = ["check"] } thiserror = "1" -clap = {version = "4", features = ["derive"]} -serde = {version = "1", features=["derive"]} +clap = { version = "4", features = ["derive"] } +serde = { version = "1", features = ["derive"] } serde_json = "1" http-serde = "1" -chrono = {version = "0", features = ["serde"]} +chrono = { version = "0", features = ["serde"] } tokio = { version = "1", default-features = false, features = [ "fs", "macros", @@ -48,38 +49,50 @@ tokio = { version = "1", default-features = false, features = [ "rt-multi-thread", "rt", "process", - "time" + "time", ] } tokio-stream = "0" -sqlx = {version = "0", features = [ +sqlx = { version = "0", features = [ "postgres", "uuid", "decimal", "chrono", "migrate", "macros", - "runtime-tokio-rustls" -]} -helium-anchor-gen = {git = "https://github.com/helium/helium-anchor-gen.git"} -helium-crypto = {version = "0.8.4", features=["sqlx-postgres", "multisig"]} -hextree = {git = "https://github.com/jaykickliter/HexTree", branch = "main", features = ["disktree"]} -helium-proto = {git = "https://github.com/helium/proto", branch = "master", features = ["services"]} + "runtime-tokio-rustls", +] } +helium-anchor-gen = { git = "https://github.com/helium/helium-anchor-gen.git" } +helium-crypto = { version = "0.8.4", features = ["sqlx-postgres", "multisig"] } +hextree = { git = "https://github.com/jaykickliter/HexTree", branch = "main", features = [ + "disktree", +] } +helium-proto = { git = "https://github.com/helium/proto", branch = "master", features = [ + "services", +] } solana-client = "1.16" solana-sdk = "1.16" solana-program = "1.16" spl-token = "3.5.0" -reqwest = {version = "0", default-features=false, features = ["gzip", "json", "rustls-tls"]} +reqwest = { version = "0", default-features = false, features = [ + "gzip", + "json", + "rustls-tls", +] } beacon = { git = "https://github.com/helium/proto", branch = "master" } humantime = "2" metrics = "0.21" metrics-exporter-prometheus = "0" tracing = "0" -tracing-subscriber = { version = "0", default-features=false, features = ["env-filter", "registry", "fmt"] } +tracing-subscriber = { version = "0", default-features = false, features = [ + "env-filter", + "registry", + "fmt", +] } rust_decimal = "1" rust_decimal_macros = "1" base64 = ">=0.21" sha2 = "0.10" -tonic = {version = "0.10", features = ["tls", "tls-roots"]} +tonic = { version = "0.10", features = ["tls", "tls-roots"] } http = "<=0.2" triggered = "0" futures = "*" @@ -88,9 +101,9 @@ prost = "*" pyth-sdk-solana = "=0.8" once_cell = "1" lazy_static = "1" -config = {version="0", default-features=false, features=["toml"]} -h3o = {version = "0", features = ["serde"]} -xorf = {version = "0", features = ["serde"] } +config = { version = "0", default-features = false, features = ["toml"] } +h3o = { version = "0", features = ["serde"] } +xorf = { version = "0", features = ["serde"] } bytes = "*" bincode = "1" twox-hash = "1" @@ -100,8 +113,8 @@ retainer = "*" rand = "0.8" itertools = "*" tokio-util = "0" -uuid = {version = "1", features = ["v4", "serde"]} -tower-http = {version = "0", features = ["trace"]} +uuid = { version = "1", features = ["v4", "serde"] } +tower-http = { version = "0", features = ["trace"] } [patch.crates-io] sqlx = { git = "https://github.com/helium/sqlx.git", rev = "92a2268f02e0cac6fccb34d3e926347071dbb88d" } diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index ecd525d91..9d4410aa2 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -18,3 +18,6 @@ tracing-subscriber = { version = "0", default-features = true, features = [ "registry", "fmt", ] } +tower-http = { version = "0", features = ["trace"] } +tower-layer = "0" +axum = "0" diff --git a/custom_tracing/src/axum_layer.rs b/custom_tracing/src/axum_layer.rs new file mode 100644 index 000000000..627e4ec91 --- /dev/null +++ b/custom_tracing/src/axum_layer.rs @@ -0,0 +1,46 @@ +use axum::{ + body::Body, + http::{header, Request}, +}; +use tower_http::{ + trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, + LatencyUnit, +}; +use tower_layer::Layer; +use tracing::Level; + +pub fn new() -> impl Layer { + TraceLayer::new_for_http() + .make_span_with(make_span) + .on_response( + DefaultOnResponse::new() + .level(Level::DEBUG) + .latency_unit(LatencyUnit::Micros), + ) + .on_failure( + DefaultOnFailure::new() + .level(Level::WARN) + .latency_unit(LatencyUnit::Micros), + ) +} + +fn make_span(request: &Request) -> tracing::Span { + let user_agent = request + .headers() + .get(header::USER_AGENT) + .map(|value| value.to_str().unwrap_or("unknown")); + + let app_version = request + .headers() + .get("X-App-Version") + .map(|value| value.to_str().unwrap_or("unknown")); + + tracing::info_span!( + "tracing", + user_agent, + app_version, + uri = %request.uri(), + solana_addr = tracing::field::Empty, + subscriber = tracing::field::Empty, + ) +} diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 7a72aa791..10128c141 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -9,6 +9,8 @@ use tracing_subscriber::{ EnvFilter, Registry, }; +pub mod axum_layer; + pub async fn init(og_filter: String, file: String) -> Result<()> { let (filtered_layer, reload_handle) = reload::Layer::new(tracing_subscriber::EnvFilter::new(og_filter.clone())); From 99f63b2a03c2394431aae2e66964288caee4ec25 Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 17 Apr 2024 15:00:05 -0700 Subject: [PATCH 03/47] Use axum 0.7 --- Cargo.lock | 6 +----- custom_tracing/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 022ea2b57..5ed520077 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1258,11 +1258,7 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", "sync_wrapper", - "tokio", "tower", "tower-layer", "tower-service", @@ -2334,7 +2330,7 @@ name = "custom-tracing" version = "0.1.0" dependencies = [ "anyhow", - "axum 0.6.20", + "axum 0.7.4", "futures", "notify", "tokio", diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index 9d4410aa2..a588f97e7 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -20,4 +20,4 @@ tracing-subscriber = { version = "0", default-features = true, features = [ ] } tower-http = { version = "0", features = ["trace"] } tower-layer = "0" -axum = "0" +axum = "0.7" From e2b4ff504879ba7cca3b80fd2c115a661d056feb Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 17 Apr 2024 15:01:04 -0700 Subject: [PATCH 04/47] Add tracing to axum --- custom_tracing/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index a588f97e7..e61803b71 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -20,4 +20,4 @@ tracing-subscriber = { version = "0", default-features = true, features = [ ] } tower-http = { version = "0", features = ["trace"] } tower-layer = "0" -axum = "0.7" +axum = { version = "0.7", features = ["tracing"] } From 1c9799f0c6ae510a74ee901feec55b98e32dc285 Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 09:52:21 -0700 Subject: [PATCH 05/47] Add span record fn --- custom_tracing/Cargo.toml | 2 -- custom_tracing/src/lib.rs | 6 ++++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index e61803b71..9a8846d61 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -5,8 +5,6 @@ authors.workspace = true license.workspace = true edition.workspace = true -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] notify = "6" anyhow = "1" diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 10128c141..369a19cda 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -2,6 +2,7 @@ use anyhow::Result; use futures::{channel::mpsc::channel, SinkExt, StreamExt}; use notify::{event::DataChange, Config, RecommendedWatcher, RecursiveMode, Watcher}; use std::{fs, path::Path}; +use tracing::Span; use tracing_subscriber::{ layer::SubscriberExt, reload::{self, Handle}, @@ -34,6 +35,11 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { Ok(()) } +pub fn record(field: &str, value: &str) { + Span::current().record(field, &tracing::field::display(value)); + () +} + #[derive(Clone)] pub struct State { pub og_filter: String, From 78bb9321f729eb7ff19a5234605b4f9842b0a7a0 Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 10:00:17 -0700 Subject: [PATCH 06/47] Make record take anything that impl Display --- custom_tracing/src/lib.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 369a19cda..56368f816 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -1,7 +1,7 @@ use anyhow::Result; use futures::{channel::mpsc::channel, SinkExt, StreamExt}; use notify::{event::DataChange, Config, RecommendedWatcher, RecursiveMode, Watcher}; -use std::{fs, path::Path}; +use std::{fmt, fs, path::Path}; use tracing::Span; use tracing_subscriber::{ layer::SubscriberExt, @@ -35,7 +35,10 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { Ok(()) } -pub fn record(field: &str, value: &str) { +pub fn record(field: &str, value: T) +where + T: fmt::Display, +{ Span::current().record(field, &tracing::field::display(value)); () } From 9675f015a8bcd815b0faf76e0d1b33d1bb91b5f2 Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 10:08:58 -0700 Subject: [PATCH 07/47] USe toString trait --- custom_tracing/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 56368f816..289b377cf 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -1,7 +1,7 @@ use anyhow::Result; use futures::{channel::mpsc::channel, SinkExt, StreamExt}; use notify::{event::DataChange, Config, RecommendedWatcher, RecursiveMode, Watcher}; -use std::{fmt, fs, path::Path}; +use std::{fs, path::Path}; use tracing::Span; use tracing_subscriber::{ layer::SubscriberExt, @@ -37,9 +37,9 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { pub fn record(field: &str, value: T) where - T: fmt::Display, + T: ToString, { - Span::current().record(field, &tracing::field::display(value)); + Span::current().record(field, &tracing::field::display(value.to_string())); () } From e2cccbfc56b2408eedf90f5b16d3529d361d0618 Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 10:34:50 -0700 Subject: [PATCH 08/47] Put axum_layer behind http feature --- custom_tracing/Cargo.toml | 11 ++++++++--- custom_tracing/src/lib.rs | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index 9a8846d61..bf57fda39 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -16,6 +16,11 @@ tracing-subscriber = { version = "0", default-features = true, features = [ "registry", "fmt", ] } -tower-http = { version = "0", features = ["trace"] } -tower-layer = "0" -axum = { version = "0.7", features = ["tracing"] } +tower-http = { version = "0", features = ["trace"], optional = true } +tower-layer = { version = "0", optional = true } +axum = { version = "0.7", features = ["tracing"], optional = true } + + +[features] +default = [] +http = ["tower-http", "tower-layer", "axum"] diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 289b377cf..6022262b0 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -10,6 +10,7 @@ use tracing_subscriber::{ EnvFilter, Registry, }; +#[cfg(feature = "http")] pub mod axum_layer; pub async fn init(og_filter: String, file: String) -> Result<()> { From f2db9ab78668974d5345a88fc37845357ea70929 Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 11:12:04 -0700 Subject: [PATCH 09/47] Ex for tonic --- Cargo.lock | 2 ++ custom_tracing/Cargo.toml | 4 ++-- ingest/Cargo.toml | 37 ++++++++++++++++++++----------------- ingest/src/main.rs | 6 +----- ingest/src/server_mobile.rs | 27 +++++++++++++++++++++++++++ 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ed520077..085bab155 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3846,6 +3846,7 @@ dependencies = [ "chrono", "clap 4.4.8", "config", + "custom-tracing", "file-store", "futures", "futures-util", @@ -3866,6 +3867,7 @@ dependencies = [ "tokio-stream", "tokio-util", "tonic", + "tower-http", "tracing", "tracing-subscriber", "triggered", diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index bf57fda39..ba8358300 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -16,11 +16,11 @@ tracing-subscriber = { version = "0", default-features = true, features = [ "registry", "fmt", ] } -tower-http = { version = "0", features = ["trace"], optional = true } +tower-http = { version = "0", features = ["trace"] } tower-layer = { version = "0", optional = true } axum = { version = "0.7", features = ["tracing"], optional = true } [features] default = [] -http = ["tower-http", "tower-layer", "axum"] +http = ["tower-layer", "axum"] diff --git a/ingest/Cargo.toml b/ingest/Cargo.toml index 2cf93230a..9e342f037 100644 --- a/ingest/Cargo.toml +++ b/ingest/Cargo.toml @@ -4,24 +4,24 @@ version = "0.1.0" description = "PoC Ingest Server for the Helium Network" authors.workspace = true edition.workspace = true -license.workspace = true +license.workspace = true [dependencies] -anyhow = {workspace = true} -config = {workspace = true} -clap = {workspace = true} -thiserror = {workspace = true} -serde = {workspace = true} -serde_json = {workspace = true} -base64 = {workspace = true} -bs58 = {workspace = true} -sha2 = {workspace = true} -http = {workspace = true} -tonic = {workspace = true} -triggered = {workspace = true} -futures = {workspace = true} -futures-util = {workspace = true} -prost = {workspace = true} +anyhow = { workspace = true } +config = { workspace = true } +clap = { workspace = true } +thiserror = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +base64 = { workspace = true } +bs58 = { workspace = true } +sha2 = { workspace = true } +http = { workspace = true } +tonic = { workspace = true } +triggered = { workspace = true } +futures = { workspace = true } +futures-util = { workspace = true } +prost = { workspace = true } tokio = { workspace = true } tokio-util = { workspace = true } tokio-stream = { workspace = true } @@ -32,10 +32,13 @@ helium-proto = { workspace = true } helium-crypto = { workspace = true } file-store = { path = "../file_store" } poc-metrics = { path = "../metrics" } -metrics = {workspace = true } +metrics = { workspace = true } metrics-exporter-prometheus = { workspace = true } task-manager = { path = "../task_manager" } rand = { workspace = true } +custom-tracing = { path = "../custom_tracing" } +# TODO: Remove once layer is created in ^ +tower-http = { workspace = true } [dev-dependencies] backon = "0" diff --git a/ingest/src/main.rs b/ingest/src/main.rs index 9f027e5bc..5d2f3b7ec 100644 --- a/ingest/src/main.rs +++ b/ingest/src/main.rs @@ -2,7 +2,6 @@ use anyhow::Result; use clap::Parser; use ingest::{server_iot, server_mobile, Mode, Settings}; use std::path; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[derive(Debug, clap::Parser)] #[clap(version = env!("CARGO_PKG_VERSION"))] @@ -41,10 +40,7 @@ pub struct Server {} impl Server { pub async fn run(&self, settings: &Settings) -> Result<()> { - tracing_subscriber::registry() - .with(tracing_subscriber::EnvFilter::new(&settings.log)) - .with(tracing_subscriber::fmt::layer()) - .init(); + custom_tracing::init(settings.log.clone(), "tracing".to_string()).await?; // Install the prometheus metrics exporter poc_metrics::start_metrics(&settings.metrics)?; diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index fecd6e2e3..9f5a53b76 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -26,6 +26,11 @@ use tonic::{ metadata::{Ascii, MetadataValue}, transport, Request, Response, Status, }; +use tower_http::{ + trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, + LatencyUnit, +}; +use tracing::Level; const INGEST_WAIT_DURATION_MINUTES: i64 = 15; @@ -54,7 +59,21 @@ impl ManagedTask for GrpcServer { let api_token = self.api_token.clone(); let address = self.address; Box::pin(async move { + let tracing_layer = TraceLayer::new_for_grpc() + .make_span_with(make_span) + .on_response( + DefaultOnResponse::new() + .level(Level::DEBUG) + .latency_unit(LatencyUnit::Micros), + ) + .on_failure( + DefaultOnFailure::new() + .level(Level::WARN) + .latency_unit(LatencyUnit::Micros), + ); + transport::Server::builder() + .layer(tracing_layer) .layer(poc_metrics::request_layer!("ingest_server_grpc_connection")) .add_service(poc_mobile::Server::with_interceptor( *self, @@ -70,6 +89,14 @@ impl ManagedTask for GrpcServer { } } +fn make_span(_request: &http::request::Request) -> tracing::Span { + tracing::info_span!( + "tracing", + pub_key = tracing::field::Empty, + subscriber_id = tracing::field::Empty, + ) +} + impl GrpcServer { fn verify_network(&self, public_key: PublicKey) -> VerifyResult { if self.required_network == public_key.network { From 046626bd4d1600fc6b1f832a2dc56f206de268eb Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 11:21:44 -0700 Subject: [PATCH 10/47] Add grpc layer --- Cargo.lock | 2 ++ custom_tracing/Cargo.toml | 7 +++-- custom_tracing/src/grpc_layer.rs | 29 +++++++++++++++++++ .../src/{axum_layer.rs => http_layer.rs} | 0 custom_tracing/src/lib.rs | 6 ++-- ingest/Cargo.toml | 2 +- 6 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 custom_tracing/src/grpc_layer.rs rename custom_tracing/src/{axum_layer.rs => http_layer.rs} (100%) diff --git a/Cargo.lock b/Cargo.lock index 085bab155..8237cc76b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2332,6 +2332,8 @@ dependencies = [ "anyhow", "axum 0.7.4", "futures", + "helium-proto", + "http 0.2.11", "notify", "tokio", "tower-http", diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index ba8358300..5630d9706 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -17,10 +17,13 @@ tracing-subscriber = { version = "0", default-features = true, features = [ "fmt", ] } tower-http = { version = "0", features = ["trace"] } -tower-layer = { version = "0", optional = true } +tower-layer = { version = "0" } axum = { version = "0.7", features = ["tracing"], optional = true } +helium-proto = { workspace = true, optional = true } +http = { workspace = true, optional = true } [features] default = [] -http = ["tower-layer", "axum"] +http-1 = ["axum"] +grpc = ["helium-proto", "http"] diff --git a/custom_tracing/src/grpc_layer.rs b/custom_tracing/src/grpc_layer.rs new file mode 100644 index 000000000..69e2d0905 --- /dev/null +++ b/custom_tracing/src/grpc_layer.rs @@ -0,0 +1,29 @@ +use tower_http::{ + trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, + LatencyUnit, +}; +use tower_layer::Layer; +use tracing::Level; + +pub fn new() -> impl Layer { + TraceLayer::new_for_grpc() + .make_span_with(make_span) + .on_response( + DefaultOnResponse::new() + .level(Level::DEBUG) + .latency_unit(LatencyUnit::Micros), + ) + .on_failure( + DefaultOnFailure::new() + .level(Level::WARN) + .latency_unit(LatencyUnit::Micros), + ); +} + +fn make_span(_request: &http::request::Request) -> tracing::Span { + tracing::info_span!( + "tracing", + pub_key = tracing::field::Empty, + subscriber_id = tracing::field::Empty, + ) +} diff --git a/custom_tracing/src/axum_layer.rs b/custom_tracing/src/http_layer.rs similarity index 100% rename from custom_tracing/src/axum_layer.rs rename to custom_tracing/src/http_layer.rs diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 6022262b0..dc6d6d05a 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -10,8 +10,10 @@ use tracing_subscriber::{ EnvFilter, Registry, }; -#[cfg(feature = "http")] -pub mod axum_layer; +#[cfg(feature = "grpc")] +pub mod grpc_layer; +#[cfg(feature = "http-1")] +pub mod http_layer; pub async fn init(og_filter: String, file: String) -> Result<()> { let (filtered_layer, reload_handle) = diff --git a/ingest/Cargo.toml b/ingest/Cargo.toml index 9e342f037..aa61b2e7c 100644 --- a/ingest/Cargo.toml +++ b/ingest/Cargo.toml @@ -36,7 +36,7 @@ metrics = { workspace = true } metrics-exporter-prometheus = { workspace = true } task-manager = { path = "../task_manager" } rand = { workspace = true } -custom-tracing = { path = "../custom_tracing" } +custom-tracing = { path = "../custom_tracing", features = ["grpc"] } # TODO: Remove once layer is created in ^ tower-http = { workspace = true } From 52390a9f6b9dcd028ed1ae95d71d6f4a2c5470af Mon Sep 17 00:00:00 2001 From: Macpie Date: Thu, 18 Apr 2024 11:35:54 -0700 Subject: [PATCH 11/47] Allow layers to take a function that create a span --- custom_tracing/src/grpc_layer.rs | 14 ++++------- custom_tracing/src/http_layer.rs | 40 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/custom_tracing/src/grpc_layer.rs b/custom_tracing/src/grpc_layer.rs index 69e2d0905..946664d7f 100644 --- a/custom_tracing/src/grpc_layer.rs +++ b/custom_tracing/src/grpc_layer.rs @@ -1,11 +1,13 @@ +use helium_proto::services::Body; +use http::request::Request; use tower_http::{ trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, LatencyUnit, }; use tower_layer::Layer; -use tracing::Level; +use tracing::{Level, Span}; -pub fn new() -> impl Layer { +pub fn new(make_span: &dyn Fn(&Request) -> Span) -> impl Layer { TraceLayer::new_for_grpc() .make_span_with(make_span) .on_response( @@ -19,11 +21,3 @@ pub fn new() -> impl Layer { .latency_unit(LatencyUnit::Micros), ); } - -fn make_span(_request: &http::request::Request) -> tracing::Span { - tracing::info_span!( - "tracing", - pub_key = tracing::field::Empty, - subscriber_id = tracing::field::Empty, - ) -} diff --git a/custom_tracing/src/http_layer.rs b/custom_tracing/src/http_layer.rs index 627e4ec91..07a402e30 100644 --- a/custom_tracing/src/http_layer.rs +++ b/custom_tracing/src/http_layer.rs @@ -7,9 +7,9 @@ use tower_http::{ LatencyUnit, }; use tower_layer::Layer; -use tracing::Level; +use tracing::{Level, Span}; -pub fn new() -> impl Layer { +pub fn new(make_span: &dyn Fn(&Request) -> Span) -> impl Layer { TraceLayer::new_for_http() .make_span_with(make_span) .on_response( @@ -24,23 +24,23 @@ pub fn new() -> impl Layer { ) } -fn make_span(request: &Request) -> tracing::Span { - let user_agent = request - .headers() - .get(header::USER_AGENT) - .map(|value| value.to_str().unwrap_or("unknown")); +// fn make_span(request: &Request) -> tracing::Span { +// let user_agent = request +// .headers() +// .get(header::USER_AGENT) +// .map(|value| value.to_str().unwrap_or("unknown")); - let app_version = request - .headers() - .get("X-App-Version") - .map(|value| value.to_str().unwrap_or("unknown")); +// let app_version = request +// .headers() +// .get("X-App-Version") +// .map(|value| value.to_str().unwrap_or("unknown")); - tracing::info_span!( - "tracing", - user_agent, - app_version, - uri = %request.uri(), - solana_addr = tracing::field::Empty, - subscriber = tracing::field::Empty, - ) -} +// tracing::info_span!( +// "tracing", +// user_agent, +// app_version, +// uri = %request.uri(), +// solana_addr = tracing::field::Empty, +// subscriber = tracing::field::Empty, +// ) +// } From f92135cc2a0156cdf4ff6bf7ffa666c7b63a2366 Mon Sep 17 00:00:00 2001 From: Macpie Date: Fri, 19 Apr 2024 10:20:11 -0700 Subject: [PATCH 12/47] Fix types (thanks Mr Pickles) --- custom_tracing/src/grpc_layer.rs | 9 +++++--- custom_tracing/src/http_layer.rs | 35 ++++++++------------------------ ingest/src/server_mobile.rs | 20 +----------------- 3 files changed, 15 insertions(+), 49 deletions(-) diff --git a/custom_tracing/src/grpc_layer.rs b/custom_tracing/src/grpc_layer.rs index 946664d7f..121bb5076 100644 --- a/custom_tracing/src/grpc_layer.rs +++ b/custom_tracing/src/grpc_layer.rs @@ -1,13 +1,16 @@ use helium_proto::services::Body; use http::request::Request; use tower_http::{ + classify::{GrpcErrorsAsFailures, SharedClassifier}, trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, LatencyUnit, }; -use tower_layer::Layer; use tracing::{Level, Span}; -pub fn new(make_span: &dyn Fn(&Request) -> Span) -> impl Layer { +pub fn new( + make_span: fn(&Request) -> Span, +) -> TraceLayer, for<'a> fn(&'a http::Request) -> Span> +{ TraceLayer::new_for_grpc() .make_span_with(make_span) .on_response( @@ -19,5 +22,5 @@ pub fn new(make_span: &dyn Fn(&Request) -> Span) -> impl Layer { DefaultOnFailure::new() .level(Level::WARN) .latency_unit(LatencyUnit::Micros), - ); + ) } diff --git a/custom_tracing/src/http_layer.rs b/custom_tracing/src/http_layer.rs index 07a402e30..2f7c9f719 100644 --- a/custom_tracing/src/http_layer.rs +++ b/custom_tracing/src/http_layer.rs @@ -1,15 +1,17 @@ -use axum::{ - body::Body, - http::{header, Request}, -}; +use axum::{body::Body, http::Request}; use tower_http::{ + classify::{ServerErrorsAsFailures, SharedClassifier}, trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, LatencyUnit, }; -use tower_layer::Layer; use tracing::{Level, Span}; -pub fn new(make_span: &dyn Fn(&Request) -> Span) -> impl Layer { +pub fn new( + make_span: fn(&Request) -> Span, +) -> TraceLayer< + SharedClassifier, + for<'a> fn(&'a axum::http::Request) -> Span, +> { TraceLayer::new_for_http() .make_span_with(make_span) .on_response( @@ -23,24 +25,3 @@ pub fn new(make_span: &dyn Fn(&Request) -> Span) -> impl Layer { .latency_unit(LatencyUnit::Micros), ) } - -// fn make_span(request: &Request) -> tracing::Span { -// let user_agent = request -// .headers() -// .get(header::USER_AGENT) -// .map(|value| value.to_str().unwrap_or("unknown")); - -// let app_version = request -// .headers() -// .get("X-App-Version") -// .map(|value| value.to_str().unwrap_or("unknown")); - -// tracing::info_span!( -// "tracing", -// user_agent, -// app_version, -// uri = %request.uri(), -// solana_addr = tracing::field::Empty, -// subscriber = tracing::field::Empty, -// ) -// } diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 9f5a53b76..9960621e5 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -26,11 +26,6 @@ use tonic::{ metadata::{Ascii, MetadataValue}, transport, Request, Response, Status, }; -use tower_http::{ - trace::{DefaultOnFailure, DefaultOnResponse, TraceLayer}, - LatencyUnit, -}; -use tracing::Level; const INGEST_WAIT_DURATION_MINUTES: i64 = 15; @@ -59,21 +54,8 @@ impl ManagedTask for GrpcServer { let api_token = self.api_token.clone(); let address = self.address; Box::pin(async move { - let tracing_layer = TraceLayer::new_for_grpc() - .make_span_with(make_span) - .on_response( - DefaultOnResponse::new() - .level(Level::DEBUG) - .latency_unit(LatencyUnit::Micros), - ) - .on_failure( - DefaultOnFailure::new() - .level(Level::WARN) - .latency_unit(LatencyUnit::Micros), - ); - transport::Server::builder() - .layer(tracing_layer) + .layer(custom_tracing::grpc_layer::new(make_span)) .layer(poc_metrics::request_layer!("ingest_server_grpc_connection")) .add_service(poc_mobile::Server::with_interceptor( *self, From 631a12a22463f32deffaec345d664abb502196b7 Mon Sep 17 00:00:00 2001 From: Macpie Date: Fri, 19 Apr 2024 11:01:21 -0700 Subject: [PATCH 13/47] Add records to mobile server --- ingest/src/server_mobile.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 9960621e5..fc8c3c173 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -112,6 +112,8 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); + custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + let report = self .verify_public_key(event.pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -134,6 +136,8 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); + custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + let report = self .verify_public_key(event.pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -156,6 +160,8 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); + custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + let report = self .verify_public_key(event.pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -178,6 +184,8 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); + custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + let report = self .verify_public_key(event.pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -203,6 +211,16 @@ impl poc_mobile::PocMobile for GrpcServer { let subscriber_id = event.subscriber_id.clone(); let timestamp_millis = event.timestamp; + custom_tracing::record( + "pub_key", + bs58::encode(event.carrier_pub_key.clone()).into_string(), + ); + + custom_tracing::record( + "subscriber_id", + bs58::encode(subscriber_id.clone()).into_string(), + ); + let report = self .verify_public_key(event.carrier_pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -237,6 +255,11 @@ impl poc_mobile::PocMobile for GrpcServer { let cbsd_id = event.cbsd_id.clone(); let threshold_timestamp = event.threshold_timestamp; + custom_tracing::record( + "pub_key", + bs58::encode(hotspot_pubkey.clone()).into_string(), + ); + let report = self .verify_public_key(event.carrier_pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -272,6 +295,11 @@ impl poc_mobile::PocMobile for GrpcServer { let cbsd_id = event.cbsd_id.clone(); let invalidated_timestamp = event.timestamp; + custom_tracing::record( + "pub_key", + bs58::encode(hotspot_pubkey.clone()).into_string(), + ); + let report = self .verify_public_key(event.carrier_pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) @@ -307,6 +335,8 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); + custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + let report = self .verify_public_key(event.pub_key.as_ref()) .and_then(|public_key| self.verify_network(public_key)) From b7fea2bd51573aa1afa0a7b32bdc741c02d90159 Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 29 Apr 2024 12:07:08 -0700 Subject: [PATCH 14/47] Remove old lib --- Cargo.lock | 1 - ingest/Cargo.toml | 2 -- 2 files changed, 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8237cc76b..31639f3c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3869,7 +3869,6 @@ dependencies = [ "tokio-stream", "tokio-util", "tonic", - "tower-http", "tracing", "tracing-subscriber", "triggered", diff --git a/ingest/Cargo.toml b/ingest/Cargo.toml index aa61b2e7c..f6cbc5d26 100644 --- a/ingest/Cargo.toml +++ b/ingest/Cargo.toml @@ -37,8 +37,6 @@ metrics-exporter-prometheus = { workspace = true } task-manager = { path = "../task_manager" } rand = { workspace = true } custom-tracing = { path = "../custom_tracing", features = ["grpc"] } -# TODO: Remove once layer is created in ^ -tower-http = { workspace = true } [dev-dependencies] backon = "0" From 2c5fb8e45bd89adc77b5a7769c102fa108ce7f4f Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 29 Apr 2024 12:09:24 -0700 Subject: [PATCH 15/47] tidy ex --- ingest/src/main.rs | 2 +- ingest/src/settings.rs | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ingest/src/main.rs b/ingest/src/main.rs index 5d2f3b7ec..55349d9c8 100644 --- a/ingest/src/main.rs +++ b/ingest/src/main.rs @@ -40,7 +40,7 @@ pub struct Server {} impl Server { pub async fn run(&self, settings: &Settings) -> Result<()> { - custom_tracing::init(settings.log.clone(), "tracing".to_string()).await?; + custom_tracing::init(settings.log.clone(), settings.tracing.clone()).await?; // Install the prometheus metrics exporter poc_metrics::start_metrics(&settings.metrics)?; diff --git a/ingest/src/settings.rs b/ingest/src/settings.rs index 52a98874c..5308dad4f 100644 --- a/ingest/src/settings.rs +++ b/ingest/src/settings.rs @@ -13,6 +13,9 @@ pub struct Settings { /// "ingest=debug,poc_store=info" #[serde(default = "default_log")] pub log: String, + /// "tracing" + #[serde(default = "default_tracing")] + pub tracing: String, /// Mode to run the server in (iot or mobile). Required pub mode: Mode, /// Listen address. Required. Default is 0.0.0.0:9081 @@ -54,6 +57,10 @@ pub fn default_log() -> String { "ingest=debug,poc_store=info".to_string() } +pub fn default_tracing() -> String { + "tracing".to_string() +} + pub fn default_sink() -> String { "/var/data/ingest".to_string() } From 77b7e8f67fea7d461211cb124206529ed409d540 Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 29 Apr 2024 12:52:51 -0700 Subject: [PATCH 16/47] Fix clippy --- custom_tracing/src/grpc_layer.rs | 8 ++++---- custom_tracing/src/lib.rs | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/custom_tracing/src/grpc_layer.rs b/custom_tracing/src/grpc_layer.rs index 121bb5076..8e4b4c423 100644 --- a/custom_tracing/src/grpc_layer.rs +++ b/custom_tracing/src/grpc_layer.rs @@ -7,10 +7,10 @@ use tower_http::{ }; use tracing::{Level, Span}; -pub fn new( - make_span: fn(&Request) -> Span, -) -> TraceLayer, for<'a> fn(&'a http::Request) -> Span> -{ +type GrpcLayer = + TraceLayer, for<'a> fn(&'a http::Request) -> Span>; + +pub fn new(make_span: fn(&Request) -> Span) -> GrpcLayer { TraceLayer::new_for_grpc() .make_span_with(make_span) .on_response( diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index dc6d6d05a..c9fb6f112 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -43,7 +43,6 @@ where T: ToString, { Span::current().record(field, &tracing::field::display(value.to_string())); - () } #[derive(Clone)] From c716ce8bd3b79eb4607dd6ecbff50b79f8018359 Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 29 Apr 2024 15:42:14 -0700 Subject: [PATCH 17/47] Better fn name --- custom_tracing/src/grpc_layer.rs | 2 +- custom_tracing/src/http_layer.rs | 2 +- ingest/src/server_mobile.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/custom_tracing/src/grpc_layer.rs b/custom_tracing/src/grpc_layer.rs index 8e4b4c423..9d65455d8 100644 --- a/custom_tracing/src/grpc_layer.rs +++ b/custom_tracing/src/grpc_layer.rs @@ -10,7 +10,7 @@ use tracing::{Level, Span}; type GrpcLayer = TraceLayer, for<'a> fn(&'a http::Request) -> Span>; -pub fn new(make_span: fn(&Request) -> Span) -> GrpcLayer { +pub fn new_with_span(make_span: fn(&Request) -> Span) -> GrpcLayer { TraceLayer::new_for_grpc() .make_span_with(make_span) .on_response( diff --git a/custom_tracing/src/http_layer.rs b/custom_tracing/src/http_layer.rs index 2f7c9f719..71293e2f4 100644 --- a/custom_tracing/src/http_layer.rs +++ b/custom_tracing/src/http_layer.rs @@ -6,7 +6,7 @@ use tower_http::{ }; use tracing::{Level, Span}; -pub fn new( +pub fn new_with_span( make_span: fn(&Request) -> Span, ) -> TraceLayer< SharedClassifier, diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index fc8c3c173..9fb4a4807 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -55,7 +55,7 @@ impl ManagedTask for GrpcServer { let address = self.address; Box::pin(async move { transport::Server::builder() - .layer(custom_tracing::grpc_layer::new(make_span)) + .layer(custom_tracing::grpc_layer::new_with_span(make_span)) .layer(poc_metrics::request_layer!("ingest_server_grpc_connection")) .add_service(poc_mobile::Server::with_interceptor( *self, From 54de1c344628cc3ffc0582f0f5c6d324593adaf4 Mon Sep 17 00:00:00 2001 From: Macpie Date: Tue, 30 Apr 2024 10:41:59 -0700 Subject: [PATCH 18/47] Remove futures to use tokio instead --- Cargo.lock | 2 - custom_tracing/Cargo.toml | 5 +- custom_tracing/src/lib.rs | 108 +++++++++++++++++++------------------- 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 31639f3c6..b69555b8f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2331,7 +2331,6 @@ version = "0.1.0" dependencies = [ "anyhow", "axum 0.7.4", - "futures", "helium-proto", "http 0.2.11", "notify", @@ -4787,7 +4786,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ "bitflags 2.5.0", - "crossbeam-channel", "filetime", "fsevent-sys", "inotify", diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index 5630d9706..b442135b5 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -6,9 +6,10 @@ license.workspace = true edition.workspace = true [dependencies] -notify = "6" +notify = { version = "6", default-features = false, features = [ + "macos_fsevent", +] } anyhow = "1" -futures = "0" tokio = { version = "1", features = ["rt-multi-thread", "signal"] } tracing = "0" tracing-subscriber = { version = "0", default-features = true, features = [ diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index c9fb6f112..b6fcb51d3 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -1,5 +1,4 @@ use anyhow::Result; -use futures::{channel::mpsc::channel, SinkExt, StreamExt}; use notify::{event::DataChange, Config, RecommendedWatcher, RecursiveMode, Watcher}; use std::{fs, path::Path}; use tracing::Span; @@ -24,17 +23,19 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { .with(tracing_subscriber::fmt::layer()) .init(); - let state = State { - og_filter: og_filter.clone(), - reload_handle, - }; - tokio::spawn(async move { - if let Err(e) = watch_file(state, file).await { + let state = State { + og_filter: og_filter.clone(), + file, + reload_handle, + }; + if let Err(e) = state.watch().await { tracing::warn!("error: {:?}", e) } }); + tracing::info!("custom tracing installed"); + Ok(()) } @@ -48,10 +49,57 @@ where #[derive(Clone)] pub struct State { pub og_filter: String, + pub file: String, pub reload_handle: Handle, } impl State { + async fn watch(&self) -> Result<()> { + let (tx, mut rx) = tokio::sync::mpsc::channel(10); + + let mut watcher = RecommendedWatcher::new( + move |res| { + tx.blocking_send(res).expect("Failed to send event"); + }, + Config::default(), + )?; + + watcher.watch(".".as_ref(), RecursiveMode::NonRecursive)?; + + while let Some(res) = rx.recv().await { + match res { + Err(e) => tracing::warn!("watch error: {:?}", e), + Ok(event) => match event.kind { + notify::EventKind::Modify(notify::event::ModifyKind::Data( + DataChange::Content, + )) => { + let event_path = event.paths.first().unwrap(); + + if Path::new(event_path).exists() { + match fs::read_to_string(event_path) { + Err(_e) => tracing::warn!("failed to read file {:?}", _e), + Ok(content) => { + if file_match(event_path, self.file.clone()) { + self.handle_change(content)?; + } + } + } + } + } + notify::EventKind::Remove(notify::event::RemoveKind::File) => { + let event_path = event.paths.first().unwrap(); + if file_match(event_path, self.file.clone()) { + self.handle_delete()?; + } + } + _e => tracing::debug!("ignored {:?}", _e), + }, + } + } + + Ok(()) + } + fn handle_change(&self, content: String) -> Result<()> { if content.is_empty() { self.handle_delete() @@ -78,52 +126,6 @@ impl State { } } -async fn watch_file(state: State, file: String) -> Result<()> { - let (mut tx, mut rx) = channel(1); - - let mut watcher = RecommendedWatcher::new( - move |res| { - futures::executor::block_on(async { - tx.send(res).await.unwrap(); - }) - }, - Config::default(), - )?; - - watcher.watch(".".as_ref(), RecursiveMode::NonRecursive)?; - - while let Some(res) = rx.next().await { - match res { - Err(e) => tracing::warn!("watch error: {:?}", e), - Ok(event) => match event.kind { - notify::EventKind::Modify(notify::event::ModifyKind::Data(DataChange::Content)) => { - let event_path = event.paths.first().unwrap(); - - if Path::new(event_path).exists() { - match fs::read_to_string(event_path) { - Err(_e) => tracing::warn!("failed to read file {:?}", _e), - Ok(content) => { - if file_match(event_path, file.clone()) { - state.handle_change(content)?; - } - } - } - } - } - notify::EventKind::Remove(notify::event::RemoveKind::File) => { - let event_path = event.paths.first().unwrap(); - if file_match(event_path, file.clone()) { - state.handle_delete()?; - } - } - _e => tracing::debug!("ignored {:?}", _e), - }, - } - } - - Ok(()) -} - fn file_match(event_path: &Path, file: String) -> bool { let split = event_path.to_str().unwrap().split('/'); *split.last().unwrap() == file From a7d678daf8a02376fea6e84e6960d5cc0239406d Mon Sep 17 00:00:00 2001 From: Macpie Date: Tue, 30 Apr 2024 10:45:58 -0700 Subject: [PATCH 19/47] Fixup ex --- ingest/src/server_mobile.rs | 3 --- ingest/src/settings.rs | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 9fb4a4807..d9e699ab2 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -231,7 +231,6 @@ impl poc_mobile::PocMobile for GrpcServer { }) .map_err(|status| { tracing::debug!( - subscriber_id = ?subscriber_id, timestamp = %timestamp_millis, status = %status ); @@ -270,7 +269,6 @@ impl poc_mobile::PocMobile for GrpcServer { }) .map_err(|status| { tracing::debug!( - hotspot_pubkey = ?hotspot_pubkey, cbsd_id = ?cbsd_id, threshold_timestamp = %threshold_timestamp, status = %status @@ -310,7 +308,6 @@ impl poc_mobile::PocMobile for GrpcServer { }) .map_err(|status| { tracing::debug!( - hotspot_pubkey = ?hotspot_pubkey, cbsd_id = ?cbsd_id, invalidated_timestamp = %invalidated_timestamp, status = %status diff --git a/ingest/src/settings.rs b/ingest/src/settings.rs index 5308dad4f..c6d656844 100644 --- a/ingest/src/settings.rs +++ b/ingest/src/settings.rs @@ -13,7 +13,7 @@ pub struct Settings { /// "ingest=debug,poc_store=info" #[serde(default = "default_log")] pub log: String, - /// "tracing" + /// File name to be watch by custom tracing #[serde(default = "default_tracing")] pub tracing: String, /// Mode to run the server in (iot or mobile). Required From 62c24b0a490e6e4592eb6940a02e776242a9f5ef Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 1 May 2024 10:11:28 -0700 Subject: [PATCH 20/47] Add pub_key_to_b58 --- ingest/src/server_mobile.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index d9e699ab2..05aa66047 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -112,7 +112,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); let report = self .verify_public_key(event.pub_key.as_ref()) @@ -136,7 +136,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); let report = self .verify_public_key(event.pub_key.as_ref()) @@ -160,7 +160,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); let report = self .verify_public_key(event.pub_key.as_ref()) @@ -184,7 +184,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); let report = self .verify_public_key(event.pub_key.as_ref()) @@ -332,7 +332,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", bs58::encode(event.pub_key.clone()).into_string()); + custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); let report = self .verify_public_key(event.pub_key.as_ref()) @@ -494,3 +494,7 @@ pub async fn grpc_server(settings: &Settings) -> Result<()> { .start() .await } + +fn pub_key_to_b58(pub_key: Vec) -> String { + bs58::encode(pub_key).into_string() +} From ac1ffac0ad1a622e296d73bb59f54ca972ef59e0 Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:30:45 -0700 Subject: [PATCH 21/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 05aa66047..3e044b423 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -218,7 +218,7 @@ impl poc_mobile::PocMobile for GrpcServer { custom_tracing::record( "subscriber_id", - bs58::encode(subscriber_id.clone()).into_string(), + bs58::encode(&subscriber_id).into_string(), ); let report = self From 180a7477673f1756b430c9db2488f879e5f4e546 Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:30:51 -0700 Subject: [PATCH 22/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 3e044b423..03a29e5af 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -184,7 +184,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); + custom_tracing::record("pub_key", pub_key_to_b58(&event.pub_key)); let report = self .verify_public_key(event.pub_key.as_ref()) From c5b7ee98cc9328e29cd3d15ed91ff9167a8f49f6 Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:31:00 -0700 Subject: [PATCH 23/47] Update ingest/src/settings.rs Co-authored-by: Jeff Grunewald --- ingest/src/settings.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/settings.rs b/ingest/src/settings.rs index c6d656844..e63515c20 100644 --- a/ingest/src/settings.rs +++ b/ingest/src/settings.rs @@ -13,7 +13,7 @@ pub struct Settings { /// "ingest=debug,poc_store=info" #[serde(default = "default_log")] pub log: String, - /// File name to be watch by custom tracing + /// File name to be watched by custom tracing #[serde(default = "default_tracing")] pub tracing: String, /// Mode to run the server in (iot or mobile). Required From 177fef2258f4333498cdbe64216596c0d18749f4 Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:31:11 -0700 Subject: [PATCH 24/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index b6fcb51d3..6d487c6ba 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -29,8 +29,8 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { file, reload_handle, }; - if let Err(e) = state.watch().await { - tracing::warn!("error: {:?}", e) + if let Err(err) = state.watch().await { + tracing::warn!(?err, "tracing error watching configuration for update") } }); From bad9f6c1b5fa5ea3d45e4ff5d4091f749eed46e4 Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:31:20 -0700 Subject: [PATCH 25/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 03a29e5af..d6bd75c07 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -160,7 +160,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); + custom_tracing::record("pub_key", pub_key_to_b58(&event.pub_key)); let report = self .verify_public_key(event.pub_key.as_ref()) From f7b2f8d71e9eb92ef8ffaf337fe007079acc9d3c Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:31:27 -0700 Subject: [PATCH 26/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index d6bd75c07..08fcaf289 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -136,7 +136,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); + custom_tracing::record("pub_key", pub_key_to_b58(&event.pub_key)); let report = self .verify_public_key(event.pub_key.as_ref()) From 4821a4d40ca13ba10e5ed3d8010cbd11e454f4af Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:31:34 -0700 Subject: [PATCH 27/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 08fcaf289..14fe171ec 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -112,7 +112,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); + custom_tracing::record("pub_key", pub_key_to_b58(&event.pub_key)); let report = self .verify_public_key(event.pub_key.as_ref()) From 2ca596b437a0604f38c4d0eef87a501134fcaf84 Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 1 May 2024 11:32:32 -0700 Subject: [PATCH 28/47] pub_key_to_b58 take a &Vec --- ingest/src/server_mobile.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 14fe171ec..06b41cf2b 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -216,10 +216,7 @@ impl poc_mobile::PocMobile for GrpcServer { bs58::encode(event.carrier_pub_key.clone()).into_string(), ); - custom_tracing::record( - "subscriber_id", - bs58::encode(&subscriber_id).into_string(), - ); + custom_tracing::record("subscriber_id", bs58::encode(&subscriber_id).into_string()); let report = self .verify_public_key(event.carrier_pub_key.as_ref()) @@ -332,7 +329,7 @@ impl poc_mobile::PocMobile for GrpcServer { let timestamp: u64 = Utc::now().timestamp_millis() as u64; let event = request.into_inner(); - custom_tracing::record("pub_key", pub_key_to_b58(event.pub_key.clone())); + custom_tracing::record("pub_key", pub_key_to_b58(&event.pub_key)); let report = self .verify_public_key(event.pub_key.as_ref()) @@ -495,6 +492,6 @@ pub async fn grpc_server(settings: &Settings) -> Result<()> { .await } -fn pub_key_to_b58(pub_key: Vec) -> String { +fn pub_key_to_b58(pub_key: &Vec) -> String { bs58::encode(pub_key).into_string() } From d6e5b77796898d09d37b55f02174513d9d0b995f Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 1 May 2024 11:41:54 -0700 Subject: [PATCH 29/47] Fix deps for mac os --- custom_tracing/Cargo.toml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index b442135b5..0549eb52c 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -6,9 +6,7 @@ license.workspace = true edition.workspace = true [dependencies] -notify = { version = "6", default-features = false, features = [ - "macos_fsevent", -] } +notify = { version = "6", default-features = false } anyhow = "1" tokio = { version = "1", features = ["rt-multi-thread", "signal"] } tracing = "0" @@ -24,6 +22,12 @@ helium-proto = { workspace = true, optional = true } http = { workspace = true, optional = true } +[target.'cfg(target_os = "macos")'.dependencies] +notify = { version = "6", default-features = false, features = [ + "macos_fsevent", +] } + + [features] default = [] http-1 = ["axum"] From 4fac95c7ebdbd8aa99bbd094b378c5ee7d14bffe Mon Sep 17 00:00:00 2001 From: Macpie Date: Wed, 1 May 2024 11:42:42 -0700 Subject: [PATCH 30/47] Drop latency unit to Millis --- custom_tracing/src/grpc_layer.rs | 4 ++-- custom_tracing/src/http_layer.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/custom_tracing/src/grpc_layer.rs b/custom_tracing/src/grpc_layer.rs index 9d65455d8..bb9445ab0 100644 --- a/custom_tracing/src/grpc_layer.rs +++ b/custom_tracing/src/grpc_layer.rs @@ -16,11 +16,11 @@ pub fn new_with_span(make_span: fn(&Request) -> Span) -> GrpcLayer { .on_response( DefaultOnResponse::new() .level(Level::DEBUG) - .latency_unit(LatencyUnit::Micros), + .latency_unit(LatencyUnit::Millis), ) .on_failure( DefaultOnFailure::new() .level(Level::WARN) - .latency_unit(LatencyUnit::Micros), + .latency_unit(LatencyUnit::Millis), ) } diff --git a/custom_tracing/src/http_layer.rs b/custom_tracing/src/http_layer.rs index 71293e2f4..aed429d43 100644 --- a/custom_tracing/src/http_layer.rs +++ b/custom_tracing/src/http_layer.rs @@ -17,11 +17,11 @@ pub fn new_with_span( .on_response( DefaultOnResponse::new() .level(Level::DEBUG) - .latency_unit(LatencyUnit::Micros), + .latency_unit(LatencyUnit::Millis), ) .on_failure( DefaultOnFailure::new() .level(Level::WARN) - .latency_unit(LatencyUnit::Micros), + .latency_unit(LatencyUnit::Millis), ) } From 87ed62fb55433a81c811ace73cbad032de5f7d37 Mon Sep 17 00:00:00 2001 From: macpie Date: Wed, 1 May 2024 11:52:44 -0700 Subject: [PATCH 31/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 06b41cf2b..e4cce9e80 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -492,6 +492,6 @@ pub async fn grpc_server(settings: &Settings) -> Result<()> { .await } -fn pub_key_to_b58(pub_key: &Vec) -> String { +fn pub_key_to_b58(pub_key: &[u8]) -> String { bs58::encode(pub_key).into_string() } From e79a165940c7881a13610bd9f65c2a4b1adc76ef Mon Sep 17 00:00:00 2001 From: Macpie Date: Fri, 3 May 2024 09:53:59 -0700 Subject: [PATCH 32/47] impl display instead to ToString --- custom_tracing/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 6d487c6ba..3d8146a67 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -41,9 +41,9 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { pub fn record(field: &str, value: T) where - T: ToString, + T: std::fmt::Display, { - Span::current().record(field, &tracing::field::display(value.to_string())); + Span::current().record(field, &tracing::field::display(value)); } #[derive(Clone)] From 56a9ab23ab0a79dac4e8fe033956cff68829fad9 Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:39:18 -0700 Subject: [PATCH 33/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 3d8146a67..8af804929 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -68,7 +68,7 @@ impl State { while let Some(res) = rx.recv().await { match res { - Err(e) => tracing::warn!("watch error: {:?}", e), + Err(err) => tracing::warn!(?err, "tracing config watcher configuration file error"), Ok(event) => match event.kind { notify::EventKind::Modify(notify::event::ModifyKind::Data( DataChange::Content, From 4d1e2bed267fbe37a5e00c192c1384eec19e720f Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:39:40 -0700 Subject: [PATCH 34/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 8af804929..920caa4de 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -92,7 +92,7 @@ impl State { self.handle_delete()?; } } - _e => tracing::debug!("ignored {:?}", _e), + _event => tracing::debug!(?_event, "tracing config watcher ignored unhandled message"), }, } } From 4a4cde29a744dcde232b98181a12293413e3bc6f Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:40:10 -0700 Subject: [PATCH 35/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 920caa4de..27cd08410 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -87,9 +87,10 @@ impl State { } } notify::EventKind::Remove(notify::event::RemoveKind::File) => { - let event_path = event.paths.first().unwrap(); - if file_match(event_path, self.file.clone()) { - self.handle_delete()?; + if let Some(event_path) = event.paths.first() { + if file_match(event_path, self.file.clone()) { + self.handle_delete()?; + } } } _event => tracing::debug!(?_event, "tracing config watcher ignored unhandled message"), From 608f9192ff2e171562d997fa6eb6d8976520d2e1 Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:40:29 -0700 Subject: [PATCH 36/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 27cd08410..baaa5f063 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -106,7 +106,7 @@ impl State { self.handle_delete() } else { match tracing_subscriber::EnvFilter::try_new(content.clone()) { - Err(_e) => tracing::warn!(filter = content, "failed to parse filter {:?}", _e), + Err(_err) => tracing::warn!(filter = content, ?_err, "tracing config watcher failed to parse filter"), Ok(new_filter) => { self.reload_handle.modify(|filter| *filter = new_filter)?; tracing::info!(filter = content, "updated"); From 761f6e311a079fe6188217bf47c6e18b7025fda2 Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:40:42 -0700 Subject: [PATCH 37/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index baaa5f063..90d5860fb 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -109,7 +109,7 @@ impl State { Err(_err) => tracing::warn!(filter = content, ?_err, "tracing config watcher failed to parse filter"), Ok(new_filter) => { self.reload_handle.modify(|filter| *filter = new_filter)?; - tracing::info!(filter = content, "updated"); + tracing::info!(filter = content, "custom tracing config updated"); } } Ok(()) From 63080c10b1ebbea39ce6b1ab4027234414ff1d92 Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:42:29 -0700 Subject: [PATCH 38/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 90d5860fb..294ee30ed 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -122,7 +122,7 @@ impl State { self.reload_handle .modify(|filter| *filter = tracing_subscriber::EnvFilter::new(new_filter.clone()))?; - tracing::info!(filter = new_filter, "deleted tracing file, updated"); + tracing::info!(filter = new_filter, "tracing config watcher file deleted, reverting to rustlog filter"); Ok(()) } } From 9f684a764061c85090b81c5d2d3fe8efd74fd18b Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:42:56 -0700 Subject: [PATCH 39/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 294ee30ed..d8e05c4d8 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -128,6 +128,9 @@ impl State { } fn file_match(event_path: &Path, file: String) -> bool { - let split = event_path.to_str().unwrap().split('/'); - *split.last().unwrap() == file + event_path + .to_str() + .map(|path| path.split('/')) + .map(|path| path.last().is_some_and(|file_name| file_name == file)) + .unwrap_or_default() } From 3518aaaf2ed3f7b04d006a3a1d65e02e4eddd4ca Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:43:40 -0700 Subject: [PATCH 40/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index e4cce9e80..ee2b58eac 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -213,7 +213,7 @@ impl poc_mobile::PocMobile for GrpcServer { custom_tracing::record( "pub_key", - bs58::encode(event.carrier_pub_key.clone()).into_string(), + bs58::encode(&event.carrier_pub_key).into_string(), ); custom_tracing::record("subscriber_id", bs58::encode(&subscriber_id).into_string()); From 192279158d58b0a980d5aa7543220704eb04471d Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:43:56 -0700 Subject: [PATCH 41/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index ee2b58eac..d55633987 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -292,7 +292,7 @@ impl poc_mobile::PocMobile for GrpcServer { custom_tracing::record( "pub_key", - bs58::encode(hotspot_pubkey.clone()).into_string(), + pub_key_to_b58(&hotspot_pubkey), ); let report = self From 630bb528d8a76bbbc4212d0d657aade414b82bc0 Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:44:09 -0700 Subject: [PATCH 42/47] Update ingest/src/server_mobile.rs Co-authored-by: Jeff Grunewald --- ingest/src/server_mobile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index d55633987..497233706 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -253,7 +253,7 @@ impl poc_mobile::PocMobile for GrpcServer { custom_tracing::record( "pub_key", - bs58::encode(hotspot_pubkey.clone()).into_string(), + pub_key_to_b58(&hotspot_pubkey), ); let report = self From 329f90296a35381036e7d21168af464520097dd9 Mon Sep 17 00:00:00 2001 From: macpie Date: Mon, 6 May 2024 10:44:47 -0700 Subject: [PATCH 43/47] Update custom_tracing/src/lib.rs Co-authored-by: Jeff Grunewald --- custom_tracing/src/lib.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index d8e05c4d8..ae338b708 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -73,14 +73,15 @@ impl State { notify::EventKind::Modify(notify::event::ModifyKind::Data( DataChange::Content, )) => { - let event_path = event.paths.first().unwrap(); - - if Path::new(event_path).exists() { - match fs::read_to_string(event_path) { - Err(_e) => tracing::warn!("failed to read file {:?}", _e), - Ok(content) => { - if file_match(event_path, self.file.clone()) { - self.handle_change(content)?; + if let Some(event_path) = event.paths.first() { + + if Path::new(event_path).exists() { + match fs::read_to_string(event_path) { + Err(_err) => tracing::warn!(?_err, "tracing config watcher failed to read file"), + Ok(content) => { + if file_match(event_path, self.file.clone()) { + self.handle_change(content)?; + } } } } From 0e0eeeacda9071354691442557696472fba97fe9 Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 6 May 2024 10:48:17 -0700 Subject: [PATCH 44/47] Rename var name --- custom_tracing/src/lib.rs | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index ae338b708..38ea11f9e 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -14,7 +14,7 @@ pub mod grpc_layer; #[cfg(feature = "http-1")] pub mod http_layer; -pub async fn init(og_filter: String, file: String) -> Result<()> { +pub async fn init(og_filter: String, tracing_config_file: String) -> Result<()> { let (filtered_layer, reload_handle) = reload::Layer::new(tracing_subscriber::EnvFilter::new(og_filter.clone())); @@ -26,7 +26,7 @@ pub async fn init(og_filter: String, file: String) -> Result<()> { tokio::spawn(async move { let state = State { og_filter: og_filter.clone(), - file, + tracing_config_file, reload_handle, }; if let Err(err) = state.watch().await { @@ -49,7 +49,7 @@ where #[derive(Clone)] pub struct State { pub og_filter: String, - pub file: String, + pub tracing_config_file: String, pub reload_handle: Handle, } @@ -74,12 +74,15 @@ impl State { DataChange::Content, )) => { if let Some(event_path) = event.paths.first() { - if Path::new(event_path).exists() { match fs::read_to_string(event_path) { - Err(_err) => tracing::warn!(?_err, "tracing config watcher failed to read file"), + Err(_err) => tracing::warn!( + ?_err, + "tracing config watcher failed to read file" + ), Ok(content) => { - if file_match(event_path, self.file.clone()) { + if file_match(event_path, self.tracing_config_file.clone()) + { self.handle_change(content)?; } } @@ -89,12 +92,14 @@ impl State { } notify::EventKind::Remove(notify::event::RemoveKind::File) => { if let Some(event_path) = event.paths.first() { - if file_match(event_path, self.file.clone()) { + if file_match(event_path, self.tracing_config_file.clone()) { self.handle_delete()?; } } } - _event => tracing::debug!(?_event, "tracing config watcher ignored unhandled message"), + _event => { + tracing::debug!(?_event, "tracing config watcher ignored unhandled message") + } }, } } @@ -107,7 +112,11 @@ impl State { self.handle_delete() } else { match tracing_subscriber::EnvFilter::try_new(content.clone()) { - Err(_err) => tracing::warn!(filter = content, ?_err, "tracing config watcher failed to parse filter"), + Err(_err) => tracing::warn!( + filter = content, + ?_err, + "tracing config watcher failed to parse filter" + ), Ok(new_filter) => { self.reload_handle.modify(|filter| *filter = new_filter)?; tracing::info!(filter = content, "custom tracing config updated"); @@ -123,7 +132,10 @@ impl State { self.reload_handle .modify(|filter| *filter = tracing_subscriber::EnvFilter::new(new_filter.clone()))?; - tracing::info!(filter = new_filter, "tracing config watcher file deleted, reverting to rustlog filter"); + tracing::info!( + filter = new_filter, + "tracing config watcher file deleted, reverting to rustlog filter" + ); Ok(()) } } From e4d9c5d56337783b54d75bfe50c7a9987114e003 Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 6 May 2024 10:54:56 -0700 Subject: [PATCH 45/47] format --- ingest/src/server_mobile.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/ingest/src/server_mobile.rs b/ingest/src/server_mobile.rs index 497233706..a0116eb47 100644 --- a/ingest/src/server_mobile.rs +++ b/ingest/src/server_mobile.rs @@ -251,10 +251,7 @@ impl poc_mobile::PocMobile for GrpcServer { let cbsd_id = event.cbsd_id.clone(); let threshold_timestamp = event.threshold_timestamp; - custom_tracing::record( - "pub_key", - pub_key_to_b58(&hotspot_pubkey), - ); + custom_tracing::record("pub_key", pub_key_to_b58(&hotspot_pubkey)); let report = self .verify_public_key(event.carrier_pub_key.as_ref()) @@ -290,10 +287,7 @@ impl poc_mobile::PocMobile for GrpcServer { let cbsd_id = event.cbsd_id.clone(); let invalidated_timestamp = event.timestamp; - custom_tracing::record( - "pub_key", - pub_key_to_b58(&hotspot_pubkey), - ); + custom_tracing::record("pub_key", pub_key_to_b58(&hotspot_pubkey)); let report = self .verify_public_key(event.carrier_pub_key.as_ref()) From a27ac6f9ffa0a98e28f759ad7199b984418f843a Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 6 May 2024 11:33:33 -0700 Subject: [PATCH 46/47] rename file --- custom_tracing/src/lib.rs | 11 +++++------ ingest/src/main.rs | 2 +- ingest/src/settings.rs | 8 ++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/custom_tracing/src/lib.rs b/custom_tracing/src/lib.rs index 38ea11f9e..03a4e03c3 100644 --- a/custom_tracing/src/lib.rs +++ b/custom_tracing/src/lib.rs @@ -14,7 +14,7 @@ pub mod grpc_layer; #[cfg(feature = "http-1")] pub mod http_layer; -pub async fn init(og_filter: String, tracing_config_file: String) -> Result<()> { +pub async fn init(og_filter: String, tracing_cfg_file: String) -> Result<()> { let (filtered_layer, reload_handle) = reload::Layer::new(tracing_subscriber::EnvFilter::new(og_filter.clone())); @@ -26,7 +26,7 @@ pub async fn init(og_filter: String, tracing_config_file: String) -> Result<()> tokio::spawn(async move { let state = State { og_filter: og_filter.clone(), - tracing_config_file, + tracing_cfg_file, reload_handle, }; if let Err(err) = state.watch().await { @@ -49,7 +49,7 @@ where #[derive(Clone)] pub struct State { pub og_filter: String, - pub tracing_config_file: String, + pub tracing_cfg_file: String, pub reload_handle: Handle, } @@ -81,8 +81,7 @@ impl State { "tracing config watcher failed to read file" ), Ok(content) => { - if file_match(event_path, self.tracing_config_file.clone()) - { + if file_match(event_path, self.tracing_cfg_file.clone()) { self.handle_change(content)?; } } @@ -92,7 +91,7 @@ impl State { } notify::EventKind::Remove(notify::event::RemoveKind::File) => { if let Some(event_path) = event.paths.first() { - if file_match(event_path, self.tracing_config_file.clone()) { + if file_match(event_path, self.tracing_cfg_file.clone()) { self.handle_delete()?; } } diff --git a/ingest/src/main.rs b/ingest/src/main.rs index 55349d9c8..9bd6b117b 100644 --- a/ingest/src/main.rs +++ b/ingest/src/main.rs @@ -40,7 +40,7 @@ pub struct Server {} impl Server { pub async fn run(&self, settings: &Settings) -> Result<()> { - custom_tracing::init(settings.log.clone(), settings.tracing.clone()).await?; + custom_tracing::init(settings.log.clone(), settings.tracing_cfg_file.clone()).await?; // Install the prometheus metrics exporter poc_metrics::start_metrics(&settings.metrics)?; diff --git a/ingest/src/settings.rs b/ingest/src/settings.rs index e63515c20..6dc041a4b 100644 --- a/ingest/src/settings.rs +++ b/ingest/src/settings.rs @@ -14,8 +14,8 @@ pub struct Settings { #[serde(default = "default_log")] pub log: String, /// File name to be watched by custom tracing - #[serde(default = "default_tracing")] - pub tracing: String, + #[serde(default = "default_tracing_cfg_file")] + pub tracing_cfg_file: String, /// Mode to run the server in (iot or mobile). Required pub mode: Mode, /// Listen address. Required. Default is 0.0.0.0:9081 @@ -57,8 +57,8 @@ pub fn default_log() -> String { "ingest=debug,poc_store=info".to_string() } -pub fn default_tracing() -> String { - "tracing".to_string() +pub fn default_tracing_cfg_file() -> String { + "tracing.cfg".to_string() } pub fn default_sink() -> String { From 203bee0eb09c6582483b23ceee43005e292f7ce1 Mon Sep 17 00:00:00 2001 From: Macpie Date: Mon, 6 May 2024 11:38:50 -0700 Subject: [PATCH 47/47] Add missing tokio feature --- custom_tracing/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_tracing/Cargo.toml b/custom_tracing/Cargo.toml index 0549eb52c..83ba8bd3a 100644 --- a/custom_tracing/Cargo.toml +++ b/custom_tracing/Cargo.toml @@ -8,7 +8,7 @@ edition.workspace = true [dependencies] notify = { version = "6", default-features = false } anyhow = "1" -tokio = { version = "1", features = ["rt-multi-thread", "signal"] } +tokio = { version = "1", features = ["rt-multi-thread", "sync", "signal"] } tracing = "0" tracing-subscriber = { version = "0", default-features = true, features = [ "env-filter",