diff --git a/Cargo.lock b/Cargo.lock index d3bcc9e7a1..cad63d184f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,6 +125,22 @@ dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "battery" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "uom 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "bincode" version = "1.1.4" @@ -1689,6 +1705,14 @@ name = "macaddr" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "mach" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "mach" version = "0.3.2" @@ -1906,6 +1930,7 @@ dependencies = [ "ansi_term 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "async-trait 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "battery 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "byte-unit 3.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3385,6 +3410,11 @@ dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicase" version = "2.4.0" @@ -3437,6 +3467,15 @@ dependencies = [ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "uom" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "url" version = "1.7.2" @@ -3723,6 +3762,7 @@ dependencies = [ "checksum backtrace 0.3.34 (registry+https://github.com/rust-lang/crates.io-index)" = "b5164d292487f037ece34ec0de2fcede2faa162f085dd96d2385ab81b12765ba" "checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" +"checksum battery 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6d6fe5630049e900227cd89afce4c1204b88ec8e61a2581bb96fcce26f047b" "checksum bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9f04a5e50dc80b3d5d35320889053637d15011aed5e66b66b37ae798c65da6f7" "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" "checksum blake2b_simd 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "461f4b879a8eb70c1debf7d0788a9a5ff15f1ea9d25925fea264ef4258bed6b2" @@ -3889,6 +3929,7 @@ dependencies = [ "checksum logos-derive 0.10.0-rc2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f03ecd1d993aacc6c4f3a9540e60a4f3811ddac2276dbb66dad4d42671bd5bf" "checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" "checksum macaddr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ff4752cb15cffb3e68f7dcb22e0818ac871f8c98fb07a634a81f41fb202a09f" +"checksum mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" "checksum mach 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" @@ -4063,6 +4104,7 @@ dependencies = [ "checksum toml-query_derive 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c99ca245ec273c7e75c8ee58f47b882d0146f3c2c8495158082c6671e8b5335" "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" "checksum try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a84e5511b2a947f3ae965dcb29b13b7b1691b6e7332cf5dbc1744138d5acb7f6" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" @@ -4071,6 +4113,7 @@ dependencies = [ "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +"checksum uom 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ef5bbe8385736e498dbb0033361f764ab43a435192513861447b9f7714b3fec" "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" "checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" "checksum user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47" diff --git a/Cargo.toml b/Cargo.toml index bba70806c5..6b11ee7db6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -83,6 +83,7 @@ strip-ansi-escapes = "0.1.0" onig_sys = "=69.1.0" heim = {git = "https://github.com/heim-rs/heim.git"} which = "2.0.1" +battery = "0.7.4" [dev-dependencies] pretty_assertions = "0.6.1" diff --git a/src/plugins/sys.rs b/src/plugins/sys.rs index 8b5dcc688a..004c3c4764 100644 --- a/src/plugins/sys.rs +++ b/src/plugins/sys.rs @@ -97,7 +97,7 @@ async fn host(tag: Tag) -> Tagged { dict.into_tagged_value() } -async fn disks(tag: Tag) -> Value { +async fn disks(tag: Tag) -> Option { let mut output = vec![]; let mut partitions = disk::partitions_physical(); while let Some(part) = partitions.next().await { @@ -123,7 +123,53 @@ async fn disks(tag: Tag) -> Value { } } - Value::List(output) + if output.len() > 0 { + Some(Value::List(output)) + } else { + None + } +} + +async fn battery(tag: Tag) -> Option { + let mut output = vec![]; + + if let Ok(manager) = battery::Manager::new() { + if let Ok(batteries) = manager.batteries() { + for battery in batteries { + if let Ok(battery) = battery { + let mut dict = TaggedDictBuilder::new(tag); + if let Some(vendor) = battery.vendor() { + dict.insert("vendor", Value::string(vendor)); + } + if let Some(model) = battery.model() { + dict.insert("model", Value::string(model)); + } + if let Some(cycles) = battery.cycle_count() { + dict.insert("cycles", Value::int(cycles)); + } + if let Some(time_to_full) = battery.time_to_full() { + dict.insert( + "mins to full", + Value::float(time_to_full.get::() as f64), + ); + } + if let Some(time_to_empty) = battery.time_to_empty() { + dict.insert( + "mins to empty", + Value::float(time_to_empty.get::() as f64), + ); + } + output.push(dict.into_tagged_value()); + } + } + } + } + + if output.len() > 0 { + Some(Value::List(output)) + } else { + None + } } async fn temp(tag: Tag) -> Option { @@ -156,7 +202,7 @@ async fn temp(tag: Tag) -> Option { } } -async fn net(tag: Tag) -> Value { +async fn net(tag: Tag) -> Option { let mut output = vec![]; let mut io_counters = net::io_counters(); while let Some(nic) = io_counters.next().await { @@ -168,7 +214,11 @@ async fn net(tag: Tag) -> Value { output.push(network_idx.into_tagged_value()); } } - Value::List(output) + if output.len() > 0 { + Some(Value::List(output)) + } else { + None + } } async fn sysinfo(tag: Tag) -> Vec> { @@ -178,12 +228,19 @@ async fn sysinfo(tag: Tag) -> Vec> { if let Some(cpu) = cpu(tag).await { sysinfo.insert_tagged("cpu", cpu); } - sysinfo.insert("disks", disks(tag).await); + if let Some(disks) = disks(tag).await { + sysinfo.insert("disks", disks); + } sysinfo.insert_tagged("mem", mem(tag).await); if let Some(temp) = temp(tag).await { sysinfo.insert("temp", temp); } - sysinfo.insert("net", net(tag).await); + if let Some(net) = net(tag).await { + sysinfo.insert("net", net); + } + if let Some(battery) = battery(tag).await { + sysinfo.insert("battery", battery); + } vec![sysinfo.into_tagged_value()] }