Bump to latest heim (#1920)

* Bump to latest heim

* Fix pinning issue
This commit is contained in:
Jonathan Turner 2020-05-31 08:54:33 +12:00 committed by GitHub
parent 4bdf27b173
commit 2dc43775e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 206 additions and 87 deletions

211
Cargo.lock generated
View File

@ -109,7 +109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "538ecb01eb64eecd772087e5b6f7540cbc917f047727339a472dafed2185b267"
dependencies = [
"async-attributes",
"async-task",
"async-task 1.3.1",
"crossbeam-channel 0.4.2",
"crossbeam-deque",
"crossbeam-utils 0.7.2",
@ -159,6 +159,12 @@ dependencies = [
"winapi 0.3.8",
]
[[package]]
name = "async-task"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17772156ef2829aadc587461c7753af20b7e8db1529bc66855add962a3b35d3"
[[package]]
name = "async-trait"
version = "0.1.31"
@ -576,6 +582,20 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "crossbeam"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e"
dependencies = [
"cfg-if",
"crossbeam-channel 0.4.2",
"crossbeam-deque",
"crossbeam-epoch",
"crossbeam-queue",
"crossbeam-utils 0.7.2",
]
[[package]]
name = "crossbeam-channel"
version = "0.3.9"
@ -1325,9 +1345,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
name = "heim"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b8e403c0598237327b4143bdc1c7e01db0b358b5420579637e27cc117d573c"
checksum = "c39a60e3aee8ada013ddfc5d8447d6f81011dac7ddef61a3f3d34b4be982aa79"
dependencies = [
"heim-common",
"heim-cpu",
@ -1338,14 +1358,13 @@ dependencies = [
"heim-process",
"heim-runtime",
"heim-sensors",
"heim-virt",
]
[[package]]
name = "heim-common"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "144af2a423102dd4dd3e9fdd2c77c4756fb3c6c009d691628997fd5a2247719a"
checksum = "58d46c2c79530368c7a76e4808ff7263970029f38bcd544a9d43722ed0828527"
dependencies = [
"cfg-if",
"core-foundation 0.7.0",
@ -1356,30 +1375,34 @@ dependencies = [
"mach 0.3.2",
"nix 0.17.0",
"pin-utils",
"uom 0.27.0",
"uom 0.28.0",
"winapi 0.3.8",
]
[[package]]
name = "heim-cpu"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8abb50616d331bd75cd7f52d56b66114a0e8813fda2201c3618a105baa2b470d"
checksum = "020d170328cadc4d6adcf549c22983a19c35068414609c276c4db607ee295693"
dependencies = [
"cfg-if",
"futures 0.3.5",
"glob",
"heim-common",
"heim-runtime",
"lazy_static 1.4.0",
"libc",
"mach 0.3.2",
"ntapi",
"smol",
"winapi 0.3.8",
]
[[package]]
name = "heim-disk"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49e5740e687a7e1f1db597e14aff112b076f48997fe617b9b165e7c2f139d248"
checksum = "8c650cc53da13cb4027eba907bfeff7c764d801e83fd833e48b513c38ed78368"
dependencies = [
"bitflags",
"cfg-if",
@ -1394,25 +1417,27 @@ dependencies = [
[[package]]
name = "heim-host"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d46019db89b0021344fd5bb8626a12cb5d9556aa8b79685ecc907b0c43e3c5f0"
checksum = "79cce3ce658bd45e510ff0a2fb5c668cbe1a7368929fd1db123741c99fd6902e"
dependencies = [
"cfg-if",
"heim-common",
"heim-runtime",
"lazy_static 1.4.0",
"libc",
"log",
"mach 0.3.2",
"ntapi",
"platforms",
"winapi 0.3.8",
]
[[package]]
name = "heim-memory"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "216b66fececba2f68a08d15b893f0c5826346b5fb4c8d5201494f8ac2347d3bf"
checksum = "edf21693fc5ebcae37997230b90876687bcf6e53d243af988a5a89215a3c2578"
dependencies = [
"cfg-if",
"heim-common",
@ -1425,15 +1450,14 @@ dependencies = [
[[package]]
name = "heim-net"
version = "0.0.10"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52b790922244bd5b139254a0411ea2b4e4175b3e4c261d52011a9c42535c7aa7"
checksum = "f3108a5d01cfe88042c349c93d760d2cb8d82c2131183ba6af5fc5b8a6c0a5b5"
dependencies = [
"bitflags",
"cfg-if",
"heim-common",
"heim-runtime",
"hex 0.4.0",
"libc",
"macaddr",
"nix 0.17.0",
@ -1441,12 +1465,14 @@ dependencies = [
[[package]]
name = "heim-process"
version = "0.0.10"
version = "0.1.1-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c8e29fca8becea6bc261c38230f3f45a358b7922451353dd068247a3ef059de"
checksum = "ac9b230a6f7c9d746c12a300186d6e8cb31495cdbe3cefd7a15f969327b0d323"
dependencies = [
"async-trait",
"cfg-if",
"darwin-libproc",
"futures 0.3.5",
"heim-common",
"heim-cpu",
"heim-host",
@ -1458,45 +1484,33 @@ dependencies = [
"memchr",
"ntapi",
"ordered-float",
"smol",
"winapi 0.3.8",
]
[[package]]
name = "heim-runtime"
version = "0.0.6"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00bd0a5a5e4af50d5d7d9537d3ecf02dca42c26bbbd8dd76621c5116dab14f69"
checksum = "906dd26ed2eb6b9f5f0dc3dfc04caeb82785ccc05a3b3326e4c841613451acc7"
dependencies = [
"cfg-if",
"futures-channel",
"heim-common",
"lazy_static 1.4.0",
"threadpool",
"futures 0.3.5",
"futures-timer 3.0.2",
"smol",
"version-sync",
]
[[package]]
name = "heim-sensors"
version = "0.0.5"
version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f1250df4d79d4238261588e5aaf1de0e7853dbe632f5bd6868e394d1e730024"
checksum = "5cdae0cfeffcc728b469424c937abaa286a0d89e2a0c347c51eaddc60c029144"
dependencies = [
"cfg-if",
"heim-common",
"heim-runtime",
]
[[package]]
name = "heim-virt"
version = "0.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4b6ac6721ba5856659a197934ce522250a3ddd2e8646daa5660b41f1ba96457"
dependencies = [
"cfg-if",
"heim-common",
"heim-runtime",
"raw-cpuid",
]
[[package]]
name = "hermit-abi"
version = "0.1.12"
@ -2890,6 +2904,18 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "piper"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b0deb65f46e873ba8aa7c6a8dbe3f23cb1bf59c339a81a1d56361dde4d66ac8"
dependencies = [
"crossbeam-utils 0.7.2",
"futures-io",
"futures-sink",
"futures-util",
]
[[package]]
name = "pkg-config"
version = "0.3.17"
@ -3043,6 +3069,17 @@ dependencies = [
"tint",
]
[[package]]
name = "pulldown-cmark"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e142c3b8f49d2200605ee6ba0b1d757310e9e7a72afe78c36ee2ef67300ee00"
dependencies = [
"bitflags",
"memchr",
"unicase",
]
[[package]]
name = "query_interface"
version = "0.3.5"
@ -3138,17 +3175,6 @@ dependencies = [
"rand_core",
]
[[package]]
name = "raw-cpuid"
version = "7.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4a349ca83373cfa5d6dbb66fd76e58b2cca08da71a5f6400de0a0a6a9bceeaf"
dependencies = [
"bitflags",
"cc",
"rustc_version",
]
[[package]]
name = "rawkey"
version = "0.1.2"
@ -3368,6 +3394,12 @@ dependencies = [
"winapi 0.3.8",
]
[[package]]
name = "scoped-tls-hkt"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2e9d7eaddb227e8fbaaa71136ae0e1e913ca159b86c7da82f3e8f0044ad3a63"
[[package]]
name = "scopeguard"
version = "1.1.0"
@ -3403,7 +3435,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
"semver-parser",
"semver-parser 0.7.0",
]
[[package]]
@ -3412,6 +3444,12 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "semver-parser"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b46e1121e8180c12ff69a742aabc4f310542b6ccb69f1691689ac17fdf8618aa"
[[package]]
name = "serde"
version = "0.8.23"
@ -3614,6 +3652,25 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4"
[[package]]
name = "smol"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "686c634ad1873fffef6aed20f180eede424fbf3bb31802394c90fd7335a661b7"
dependencies = [
"async-task 3.0.0",
"crossbeam",
"futures-io",
"futures-util",
"nix 0.17.0",
"once_cell",
"piper",
"scoped-tls-hkt",
"slab",
"socket2",
"wepoll-binding",
]
[[package]]
name = "socket2"
version = "0.3.12"
@ -3872,15 +3929,6 @@ dependencies = [
"lazy_static 1.4.0",
]
[[package]]
name = "threadpool"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
dependencies = [
"num_cpus",
]
[[package]]
name = "time"
version = "0.1.43"
@ -4044,9 +4092,9 @@ dependencies = [
[[package]]
name = "uom"
version = "0.27.0"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51fc04fb44bcb7806da71885872cb15d123b681e459a476ef8a0bab287bee0cd"
checksum = "627142a1043c2d460613232ce4f7e322e756636e000c0f1d1f2e779cb431358a"
dependencies = [
"num-rational",
"num-traits 0.2.11",
@ -4114,6 +4162,22 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "version-sync"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "382f6877399646e1b88f4b89813b4577147fa924464317378eb39c280d1e9e4c"
dependencies = [
"itertools",
"proc-macro2",
"pulldown-cmark",
"regex",
"semver-parser 0.9.0",
"syn",
"toml 0.5.6",
"url",
]
[[package]]
name = "version_check"
version = "0.1.5"
@ -4238,6 +4302,25 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "wepoll-binding"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "374fff4ff9701ff8b6ad0d14bacd3156c44063632d8c136186ff5967d48999a7"
dependencies = [
"bitflags",
"wepoll-sys",
]
[[package]]
name = "wepoll-sys"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9082a777aed991f6769e2b654aa0cb29f1c3d615daf009829b07b66c7aff6a24"
dependencies = [
"cc",
]
[[package]]
name = "which"
version = "3.1.1"

View File

@ -19,9 +19,9 @@ futures = { version = "0.3", features = ["compat", "io-compat"] }
futures-timer = "3.0.2"
[dependencies.heim]
version = "0.0.10"
version = "0.1.0-beta.1"
default-features = false
features = ["process", "runtime-polyfill"]
features = ["process"]
[build-dependencies]
nu-build = { version = "0.14.1", path = "../nu-build" }

View File

@ -18,7 +18,7 @@ impl Plugin for Ps {
}
fn begin_filter(&mut self, callinfo: CallInfo) -> Result<Vec<ReturnValue>, ShellError> {
Ok(block_on(ps(callinfo.name_tag, callinfo.args.has("full")))
Ok(block_on(ps(callinfo.name_tag, callinfo.args.has("full")))?
.into_iter()
.map(ReturnSuccess::value)
.collect())

View File

@ -3,6 +3,7 @@ use heim::process::{self as process, Process, ProcessResult};
use heim::units::{information, ratio, Ratio};
use std::usize;
use nu_errors::ShellError;
use nu_protocol::{TaggedDictBuilder, UntaggedValue, Value};
use nu_source::Tag;
@ -27,8 +28,16 @@ async fn usage(process: Process) -> ProcessResult<(process::Process, Ratio, proc
Ok((process, usage_2 - usage_1, memory))
}
pub async fn ps(tag: Tag, full: bool) -> Vec<Value> {
let mut processes = process::processes()
pub async fn ps(tag: Tag, full: bool) -> Result<Vec<Value>, ShellError> {
let processes = process::processes()
.await
.map_err(|_| {
ShellError::labeled_error(
"Unabled to get process list",
"could not load process list",
tag.span,
)
})?
.map_ok(|process| {
// Note that there is no `.await` here,
// as we want to pass the returned future
@ -36,6 +45,7 @@ pub async fn ps(tag: Tag, full: bool) -> Vec<Value> {
usage(process)
})
.try_buffer_unordered(usize::MAX);
futures::pin_mut!(processes);
let mut output = vec![];
while let Some(res) = processes.next().await {
@ -80,5 +90,5 @@ pub async fn ps(tag: Tag, full: bool) -> Vec<Value> {
}
}
output
Ok(output)
}

View File

@ -20,10 +20,10 @@ battery = "0.7.5"
futures-util = "0.3.5"
[dependencies.heim]
version = "0.0.10"
version = "0.1.0-beta.1"
default-features = false
features = ["host", "cpu", "memory", "disk", "net", "sensors", "runtime-polyfill"]
features = ["host", "cpu", "memory", "disk", "net", "sensors"]
[build-dependencies]
nu-build = { version = "0.14.1", path = "../nu-build" }

View File

@ -1,6 +1,7 @@
use futures_util::StreamExt;
use heim::units::{frequency, information, thermodynamic_temperature, time};
use heim::{disk, host, memory, net, sensors};
use nu_errors::ShellError;
use nu_protocol::{TaggedDictBuilder, UntaggedValue, Value};
use nu_source::Tag;
use std::ffi::OsStr;
@ -77,7 +78,7 @@ async fn mem(tag: Tag) -> Value {
dict.into_value()
}
async fn host(tag: Tag) -> Value {
async fn host(tag: Tag) -> Result<Value, ShellError> {
let mut dict = TaggedDictBuilder::with_capacity(&tag, 6);
let (platform_result, uptime_result) =
@ -104,7 +105,12 @@ async fn host(tag: Tag) -> Value {
// Sessions
// note: the heim host module has nomenclature "users"
let mut users = host::users();
let users = host::users().await.map_err(|_| {
ShellError::labeled_error("Unabled to get users", "could not load users", tag.span)
})?;
futures::pin_mut!(users);
let mut user_vec = vec![];
while let Some(user) = users.next().await {
if let Ok(user) = user {
@ -117,12 +123,20 @@ async fn host(tag: Tag) -> Value {
let user_list = UntaggedValue::Table(user_vec);
dict.insert_untagged("sessions", user_list);
dict.into_value()
Ok(dict.into_value())
}
async fn disks(tag: Tag) -> Option<UntaggedValue> {
async fn disks(tag: Tag) -> Result<Option<UntaggedValue>, ShellError> {
let mut output = vec![];
let mut partitions = disk::partitions_physical();
let partitions = disk::partitions_physical().await.map_err(|_| {
ShellError::labeled_error(
"Unabled to get disk list",
"could not load disk list",
tag.span,
)
})?;
futures::pin_mut!(partitions);
while let Some(part) = partitions.next().await {
if let Ok(part) = part {
@ -162,9 +176,9 @@ async fn disks(tag: Tag) -> Option<UntaggedValue> {
}
if !output.is_empty() {
Some(UntaggedValue::Table(output))
Ok(Some(UntaggedValue::Table(output)))
} else {
None
Ok(None)
}
}
@ -217,7 +231,9 @@ async fn battery(tag: Tag) -> Option<UntaggedValue> {
async fn temp(tag: Tag) -> Option<UntaggedValue> {
let mut output = vec![];
let mut sensors = sensors::temperatures();
let sensors = sensors::temperatures();
futures::pin_mut!(sensors);
while let Some(sensor) = sensors.next().await {
if let Ok(sensor) = sensor {
@ -260,9 +276,17 @@ async fn temp(tag: Tag) -> Option<UntaggedValue> {
}
}
async fn net(tag: Tag) -> Option<UntaggedValue> {
async fn net(tag: Tag) -> Result<Option<UntaggedValue>, ShellError> {
let mut output = vec![];
let mut io_counters = net::io_counters();
let io_counters = net::io_counters().await.map_err(|_| {
ShellError::labeled_error(
"Unabled to get network device list",
"could not load network device list",
tag.span,
)
})?;
futures::pin_mut!(io_counters);
while let Some(nic) = io_counters.next().await {
if let Ok(nic) = nic {
@ -280,9 +304,9 @@ async fn net(tag: Tag) -> Option<UntaggedValue> {
}
}
if !output.is_empty() {
Some(UntaggedValue::Table(output))
Ok(Some(UntaggedValue::Table(output)))
} else {
None
Ok(None)
}
}
@ -299,18 +323,20 @@ pub async fn sysinfo(tag: Tag) -> Vec<Value> {
.await;
let (net, battery) = futures::future::join(net(tag.clone()), battery(tag.clone())).await;
sysinfo.insert_value("host", host);
if let Ok(host) = host {
sysinfo.insert_value("host", host);
}
if let Some(cpu) = cpu {
sysinfo.insert_value("cpu", cpu);
}
if let Some(disks) = disks {
if let Ok(Some(disks)) = disks {
sysinfo.insert_untagged("disks", disks);
}
sysinfo.insert_value("mem", memory);
if let Some(temp) = temp {
sysinfo.insert_untagged("temp", temp);
}
if let Some(net) = net {
if let Ok(Some(net)) = net {
sysinfo.insert_untagged("net", net);
}
if let Some(battery) = battery {