From 51ec5815b1fe2814402649db52d3520eff004937 Mon Sep 17 00:00:00 2001 From: mmynk Date: Fri, 3 Nov 2023 18:58:51 +0000 Subject: [PATCH 1/2] Make `ethtool` optional in sample This makes sure newer versions of below play nicely with older. --- Cargo.lock | 244 ++++++++++------------------------- below/model/src/collector.rs | 2 +- below/model/src/lib.rs | 2 +- below/model/src/network.rs | 14 +- below/model/src/sample.rs | 2 +- 5 files changed, 77 insertions(+), 187 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 14f9c39e..d01b333a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -89,9 +89,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] name = "async-trait" @@ -152,7 +152,7 @@ dependencies = [ "slog", "slog-term", "tar", - "tempdir", + "tempfile", "users", ] @@ -164,7 +164,7 @@ dependencies = [ "libc", "nix 0.25.0", "openat", - "rand 0.8.5", + "rand", "rand_distr", "serde", "slog", @@ -183,7 +183,7 @@ dependencies = [ "regex", "slog", "slog-term", - "tempdir", + "tempfile", "walkdir", ] @@ -195,8 +195,8 @@ dependencies = [ "below-btrfs", "cgroupfs", "serde", - "tempdir", - "toml 0.7.6", + "tempfile", + "toml 0.8.6", ] [[package]] @@ -216,8 +216,17 @@ dependencies = [ "serde_json", "slog", "tar", - "tempdir", - "toml 0.7.6", + "tempfile", + "toml 0.8.6", +] + +[[package]] +name = "below-ethtool" +version = "0.7.1" +dependencies = [ + "nix 0.25.0", + "serde", + "thiserror", ] [[package]] @@ -236,6 +245,7 @@ dependencies = [ "async-trait", "below-btrfs", "below-common", + "below-ethtool", "below-gpu-stats", "below_derive", "cgroupfs", @@ -279,7 +289,7 @@ dependencies = [ "slog", "slog-term", "static_assertions", - "tempdir", + "tempfile", "zstd", "zstd-safe", ] @@ -304,8 +314,8 @@ dependencies = [ "once_cell", "serde", "slog", - "tempdir", - "toml 0.7.6", + "tempfile", + "toml 0.8.6", ] [[package]] @@ -413,7 +423,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets 0.48.0", + "windows-targets", ] [[package]] @@ -864,12 +874,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.8.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fb_procfs" @@ -903,12 +910,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "futures" version = "0.1.31" @@ -1137,17 +1138,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e481ccbe3dea62107216d0d1138bb8ad8e5e5c43009a098bd1990272c497b0" -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "is-terminal" version = "0.4.9" @@ -1155,15 +1145,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi 0.3.1", - "rustix 0.38.11", + "rustix 0.38.21", "windows-sys 0.48.0", ] [[package]] name = "itertools" -version = "0.10.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ "either", ] @@ -1250,9 +1240,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.147" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "libm" @@ -1277,15 +1267,9 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "linux-raw-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - -[[package]] -name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" [[package]] name = "lock_api" @@ -1560,9 +1544,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pin-project-lite" @@ -1600,7 +1584,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" dependencies = [ - "rand 0.8.5", + "rand", ] [[package]] @@ -1638,19 +1622,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi", -] - [[package]] name = "rand" version = "0.8.5" @@ -1659,7 +1630,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1669,24 +1640,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", + "rand_core", ] -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.6.4" @@ -1703,7 +1659,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand 0.8.5", + "rand", ] [[package]] @@ -1730,15 +1686,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -1750,9 +1697,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] @@ -1797,15 +1744,6 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "rustix" version = "0.35.12" @@ -1814,7 +1752,7 @@ checksum = "985947f9b6423159c4726323f373be0a21bdb514c5af06a849cb3d2dce2d01e8" dependencies = [ "bitflags 1.3.2", "errno 0.2.8", - "io-lifetimes 0.7.4", + "io-lifetimes", "libc", "linux-raw-sys 0.0.46", "windows-sys 0.36.1", @@ -1822,28 +1760,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" -dependencies = [ - "bitflags 1.3.2", - "errno 0.3.1", - "io-lifetimes 1.0.10", - "libc", - "linux-raw-sys 0.3.1", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.11" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ "bitflags 2.4.0", "errno 0.3.1", "libc", - "linux-raw-sys 0.4.5", + "linux-raw-sys 0.4.10", "windows-sys 0.48.0", ] @@ -1949,9 +1873,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -2087,27 +2011,17 @@ dependencies = [ "xattr", ] -[[package]] -name = "tempdir" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -dependencies = [ - "rand 0.4.6", - "remove_dir_all", -] - [[package]] name = "tempfile" -version = "3.5.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.3.5", - "rustix 0.37.11", - "windows-sys 0.45.0", + "redox_syscall 0.4.1", + "rustix 0.38.21", + "windows-sys 0.48.0", ] [[package]] @@ -2240,9 +2154,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.6" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "8ff9e3abce27ee2c9a37f9ad37238c1bdd4e789c84ba37df76aa4d528f5072cc" dependencies = [ "serde", "serde_spanned", @@ -2252,18 +2166,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.12" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ "indexmap", "serde", @@ -2461,37 +2375,13 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] @@ -2625,9 +2515,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.9" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529" +checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32" dependencies = [ "memchr", ] @@ -2649,30 +2539,28 @@ checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" [[package]] name = "zstd" -version = "0.11.2+zstd.1.5.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" dependencies = [ - "libc", "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.1+zstd.1.5.2" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/below/model/src/collector.rs b/below/model/src/collector.rs index 7755a81e..419bfa8b 100644 --- a/below/model/src/collector.rs +++ b/below/model/src/collector.rs @@ -280,7 +280,7 @@ fn collect_sample(logger: &slog::Logger, options: &CollectorOptions) -> Result() { - Ok(ethtool_stats) => ethtool_stats, + Ok(ethtool_stats) => Some(ethtool_stats), Err(e) => { error!(logger, "{:#}", e); Default::default() diff --git a/below/model/src/lib.rs b/below/model/src/lib.rs index 57c0cfd4..80cce294 100644 --- a/below/model/src/lib.rs +++ b/below/model/src/lib.rs @@ -496,7 +496,7 @@ impl Queriable for BTreeMap { pub struct NetworkStats<'a> { net: &'a procfs::NetStat, - ethtool: &'a ethtool::EthtoolStats, + ethtool: &'a Option, } #[derive(Serialize, Deserialize, below_derive::Queriable)] diff --git a/below/model/src/network.rs b/below/model/src/network.rs index 53d2ad32..1efeddef 100644 --- a/below/model/src/network.rs +++ b/below/model/src/network.rs @@ -47,8 +47,10 @@ impl NetworkModel { iface_names.insert(interface.to_string()); } } - for key in ethtool_stats.nic.keys() { - iface_names.insert(key.to_string()); + if let Some(ethtool_stats) = ethtool_stats { + for key in ethtool_stats.nic.keys() { + iface_names.insert(key.to_string()); + } } for interface in iface_names { @@ -56,7 +58,7 @@ impl NetworkModel { .interfaces .as_ref() .and_then(|ifaces| ifaces.get(&interface)); - let ethtool_stat = ethtool_stats.nic.get(&interface); + let ethtool_stat = ethtool_stats.as_ref().and_then(|stat| stat.nic.get(&interface)); let s_iface = SingleNetworkStat { iface: iface_stat, @@ -73,7 +75,7 @@ impl NetworkModel { .interfaces .as_ref() .and_then(|ifaces| ifaces.get(&interface)); - let l_ethtool_stat = l.ethtool.nic.get(&interface); + let l_ethtool_stat = l.ethtool.as_ref().and_then(|stat| stat.nic.get(&interface)); l_network_stat = SingleNetworkStat { iface: l_iface_stat, nic: l_ethtool_stat, @@ -774,11 +776,11 @@ mod test { let prev_sample = NetworkStats { net: &l_net_stats, - ethtool: &l_ethtool_stats, + ethtool: &Some(l_ethtool_stats), }; let sample = NetworkStats { net: &s_net_stats, - ethtool: &s_ethtool_stats, + ethtool: &Some(s_ethtool_stats), }; let last = Some((&prev_sample, Duration::from_secs(1))); diff --git a/below/model/src/sample.rs b/below/model/src/sample.rs index afc5877b..2a59b659 100644 --- a/below/model/src/sample.rs +++ b/below/model/src/sample.rs @@ -21,7 +21,7 @@ pub struct Sample { pub system: SystemSample, pub netstats: procfs::NetStat, pub gpus: Option, - pub ethtool: ethtool::EthtoolStats, + pub ethtool: Option, } #[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize)] From de9bdc9e1b5f2cb96e9f3ca36a1a327e3590ba5e Mon Sep 17 00:00:00 2001 From: mmynk Date: Fri, 3 Nov 2023 20:00:47 +0000 Subject: [PATCH 2/2] `rustfmt` --- below/model/src/network.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/below/model/src/network.rs b/below/model/src/network.rs index 1efeddef..782bcb00 100644 --- a/below/model/src/network.rs +++ b/below/model/src/network.rs @@ -58,7 +58,9 @@ impl NetworkModel { .interfaces .as_ref() .and_then(|ifaces| ifaces.get(&interface)); - let ethtool_stat = ethtool_stats.as_ref().and_then(|stat| stat.nic.get(&interface)); + let ethtool_stat = ethtool_stats + .as_ref() + .and_then(|stat| stat.nic.get(&interface)); let s_iface = SingleNetworkStat { iface: iface_stat,