From 027356fb5ed73ac2ffc261254af4ec25624cbb5c Mon Sep 17 00:00:00 2001 From: svartalf Date: Tue, 25 Feb 2020 20:22:36 +0300 Subject: [PATCH] Starting examples rewriting --- Cargo.toml | 1 + examples/Cargo.toml | 27 +++++++++++ .../examples => examples}/disk_usage.rs | 18 ++++---- {heim-memory/examples => examples}/free.rs | 8 ++-- {heim-process/examples => examples}/top.rs | 10 ++-- examples/uname.rs | 19 ++++++++ heim-cpu/examples/cpu_count.rs | 10 ---- heim-cpu/examples/cpu_frequencies.rs | 24 ---------- heim-cpu/examples/cpu_stats.rs | 9 ---- heim-cpu/examples/cpu_times.rs | 15 ------ heim-disk/examples/io_counters.rs | 21 --------- heim-disk/examples/partitions.rs | 22 --------- heim-disk/examples/usage.rs | 22 --------- heim-host/examples/boot_time.rs | 11 ----- heim-host/examples/platform.rs | 11 ----- heim-host/examples/uptime.rs | 11 ----- heim-host/examples/users.rs | 14 ------ heim-net/examples/counters.rs | 13 ------ heim-net/examples/nic.rs | 13 ------ heim-process/examples/pids.rs | 15 ------ heim-process/examples/process_current.rs | 46 ------------------- heim-process/examples/processes.rs | 29 ------------ heim-process/examples/signal.rs | 36 --------------- heim-sensors/examples/temperatures.rs | 13 ------ heim-virt/examples/detect.rs | 6 --- 25 files changed, 66 insertions(+), 358 deletions(-) create mode 100644 examples/Cargo.toml rename {heim-disk/examples => examples}/disk_usage.rs (68%) rename {heim-memory/examples => examples}/free.rs (85%) rename {heim-process/examples => examples}/top.rs (88%) create mode 100644 examples/uname.rs delete mode 100644 heim-cpu/examples/cpu_count.rs delete mode 100644 heim-cpu/examples/cpu_frequencies.rs delete mode 100644 heim-cpu/examples/cpu_stats.rs delete mode 100644 heim-cpu/examples/cpu_times.rs delete mode 100644 heim-disk/examples/io_counters.rs delete mode 100644 heim-disk/examples/partitions.rs delete mode 100644 heim-disk/examples/usage.rs delete mode 100644 heim-host/examples/boot_time.rs delete mode 100644 heim-host/examples/platform.rs delete mode 100644 heim-host/examples/uptime.rs delete mode 100644 heim-host/examples/users.rs delete mode 100644 heim-net/examples/counters.rs delete mode 100644 heim-net/examples/nic.rs delete mode 100644 heim-process/examples/pids.rs delete mode 100644 heim-process/examples/process_current.rs delete mode 100644 heim-process/examples/processes.rs delete mode 100644 heim-process/examples/signal.rs delete mode 100644 heim-sensors/examples/temperatures.rs delete mode 100644 heim-virt/examples/detect.rs diff --git a/Cargo.toml b/Cargo.toml index 3eff1668..e8ba123f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,4 +33,5 @@ members = [ # Internal "benchmarks", + "examples", ] diff --git a/examples/Cargo.toml b/examples/Cargo.toml new file mode 100644 index 00000000..22c531f1 --- /dev/null +++ b/examples/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "examples" +version = "0.0.0" +authors = ["svartalf "] +edition = "2018" +publish = false + +[dev-dependencies] +heim = { path = "../heim", features = ["full", "runtime-tokio"] } +tokio = { version = "~0.2", features = ["full", "macros"] } +futures-timer = "~3.0" + +[[example]] +name = "disk_usage" +path = "disk_usage.rs" + +[[example]] +name = "free" +path = "free.rs" + +[[example]] +name = "uname" +path = "uname.rs" + +[[example]] +name = "top" +path = "top.rs" diff --git a/heim-disk/examples/disk_usage.rs b/examples/disk_usage.rs similarity index 68% rename from heim-disk/examples/disk_usage.rs rename to examples/disk_usage.rs index e7ec6694..750614b5 100644 --- a/heim-disk/examples/disk_usage.rs +++ b/examples/disk_usage.rs @@ -1,23 +1,23 @@ -//! Command similar to `df -BM` +//! Unix `du -h` command implementation. use std::ffi::OsStr; -use heim_common::prelude::*; -use heim_common::units::information; -use heim_disk as disk; +use heim::units::information; +use tokio::stream::StreamExt; -#[heim_derive::main] -async fn main() -> Result<()> { +#[tokio::main] +async fn main() -> heim::Result<()> { println!( "{:<17} {:<10} {:<10} {:<10} {:<10} Mount", "Device", "Total, Mb", "Used, Mb", "Free, Mb", "Type" ); - let partitions = disk::partitions_physical(); - pin_utils::pin_mut!(partitions); + let partitions = heim::disk::partitions_physical(); + tokio::pin!(partitions); + while let Some(part) = partitions.next().await { let part = part?; - let usage = disk::usage(part.mount_point().to_path_buf()).await?; + let usage = heim::disk::usage(part.mount_point().to_path_buf()).await?; println!( "{:<17} {:<10} {:<10} {:<10} {:<10} {}", diff --git a/heim-memory/examples/free.rs b/examples/free.rs similarity index 85% rename from heim-memory/examples/free.rs rename to examples/free.rs index 6d211a13..b9c5933b 100644 --- a/heim-memory/examples/free.rs +++ b/examples/free.rs @@ -1,8 +1,8 @@ -use heim_common::prelude::*; -use heim_common::units::information; -use heim_memory as memory; +//! Naive clone of the `free` utility -#[heim_derive::main] +use heim::{memory, units::information, Result}; + +#[tokio::main] async fn main() -> Result<()> { let memory = memory::memory().await?; let swap = memory::swap().await?; diff --git a/heim-process/examples/top.rs b/examples/top.rs similarity index 88% rename from heim-process/examples/top.rs rename to examples/top.rs index a645c9a6..b54ff67c 100644 --- a/heim-process/examples/top.rs +++ b/examples/top.rs @@ -1,9 +1,11 @@ use std::time::{Duration, Instant}; use std::usize; -use heim_common::prelude::{StreamExt, TryStreamExt}; -use heim_common::units::{ratio, Ratio}; -use heim_process::{self as process, Process, ProcessResult}; +use futures::stream::{StreamExt, TryStreamExt}; +use heim::{ + process::{self, Process, ProcessResult}, + units::{ratio, Ratio}, +}; async fn usage(process: Process) -> ProcessResult<(process::Process, Ratio)> { let usage_1 = process.cpu_usage().await?; @@ -13,7 +15,7 @@ async fn usage(process: Process) -> ProcessResult<(process::Process, Ratio)> { Ok((process, usage_2 - usage_1)) } -#[heim_derive::main] +#[tokio::main] async fn main() -> ProcessResult<()> { let start = Instant::now(); diff --git a/examples/uname.rs b/examples/uname.rs new file mode 100644 index 00000000..ec278612 --- /dev/null +++ b/examples/uname.rs @@ -0,0 +1,19 @@ +//! `uname -a` implementation + +use heim::{host, Result}; + +#[tokio::main] +async fn main() -> Result<()> { + let platform = host::platform().await?; + + println!( + "{} {} {} {} {}", + platform.system(), + platform.release(), + platform.hostname(), + platform.version(), + platform.architecture().as_str(), + ); + + Ok(()) +} diff --git a/heim-cpu/examples/cpu_count.rs b/heim-cpu/examples/cpu_count.rs deleted file mode 100644 index 020d744b..00000000 --- a/heim-cpu/examples/cpu_count.rs +++ /dev/null @@ -1,10 +0,0 @@ -use heim_common::prelude::*; -use heim_cpu as cpu; - -#[heim_derive::main] -async fn main() -> Result<()> { - dbg!(cpu::logical_count().await?); - dbg!(cpu::physical_count().await?); - - Ok(()) -} diff --git a/heim-cpu/examples/cpu_frequencies.rs b/heim-cpu/examples/cpu_frequencies.rs deleted file mode 100644 index 9852aee3..00000000 --- a/heim-cpu/examples/cpu_frequencies.rs +++ /dev/null @@ -1,24 +0,0 @@ -use heim_common::prelude::*; -use heim_cpu as cpu; - -#[cfg(target_os = "linux")] -async fn linux_frequencies() -> Result<()> { - let frequencies = cpu::os::linux::frequencies(); - pin_utils::pin_mut!(frequencies); - while let Some(freq) = frequencies.next().await { - dbg!(freq?); - } - - Ok(()) -} - -#[heim_derive::main] -async fn main() -> Result<()> { - let freq = cpu::frequency().await; - dbg!(freq?); - - #[cfg(target_os = "linux")] - linux_frequencies().await?; - - Ok(()) -} diff --git a/heim-cpu/examples/cpu_stats.rs b/heim-cpu/examples/cpu_stats.rs deleted file mode 100644 index a576b1a6..00000000 --- a/heim-cpu/examples/cpu_stats.rs +++ /dev/null @@ -1,9 +0,0 @@ -use heim_common::prelude::*; -use heim_cpu as cpu; - -#[heim_derive::main] -async fn main() -> Result<()> { - dbg!(cpu::stats().await?); - - Ok(()) -} diff --git a/heim-cpu/examples/cpu_times.rs b/heim-cpu/examples/cpu_times.rs deleted file mode 100644 index aa521f97..00000000 --- a/heim-cpu/examples/cpu_times.rs +++ /dev/null @@ -1,15 +0,0 @@ -use heim_common::prelude::*; -use heim_cpu as cpu; - -#[heim_derive::main] -async fn main() -> Result<()> { - dbg!(cpu::time().await?); - - let times = cpu::times(); - pin_utils::pin_mut!(times); - while let Some(time) = times.next().await { - dbg!(time?); - } - - Ok(()) -} diff --git a/heim-disk/examples/io_counters.rs b/heim-disk/examples/io_counters.rs deleted file mode 100644 index 08afc647..00000000 --- a/heim-disk/examples/io_counters.rs +++ /dev/null @@ -1,21 +0,0 @@ -use heim_common::prelude::*; -use heim_disk as disk; - -#[heim_derive::main] -async fn main() -> Result<()> { - let counters = disk::io_counters(); - pin_utils::pin_mut!(counters); - while let Some(counter) = counters.next().await { - dbg!(counter?); - } - - println!("\n\n--- Per physical disk ---\n"); - - let counters = disk::io_counters_physical(); - pin_utils::pin_mut!(counters); - while let Some(counter) = counters.next().await { - dbg!(counter?); - } - - Ok(()) -} diff --git a/heim-disk/examples/partitions.rs b/heim-disk/examples/partitions.rs deleted file mode 100644 index 27b6ff5d..00000000 --- a/heim-disk/examples/partitions.rs +++ /dev/null @@ -1,22 +0,0 @@ -use heim_common::prelude::*; -use heim_disk as disk; - -#[heim_derive::main] -async fn main() -> Result<()> { - println!("---- Partitions ----"); - let partitions = disk::partitions(); - pin_utils::pin_mut!(partitions); - while let Some(part) = partitions.next().await { - dbg!(part?); - } - - println!("---- Physical partitions ----"); - - let partitions = disk::partitions_physical(); - pin_utils::pin_mut!(partitions); - while let Some(part) = partitions.next().await { - dbg!(part?); - } - - Ok(()) -} diff --git a/heim-disk/examples/usage.rs b/heim-disk/examples/usage.rs deleted file mode 100644 index 6ad4663a..00000000 --- a/heim-disk/examples/usage.rs +++ /dev/null @@ -1,22 +0,0 @@ -use heim_common::prelude::*; -use heim_disk as disk; - -cfg_if::cfg_if! { - if #[cfg(unix)] { - static USAGE_PATH: &str = "/"; - - } else if #[cfg(windows)] { - static USAGE_PATH: &str = "C:\\"; - } else { - compile_error!("Unsupported OS for this example"); - } - -} - -#[heim_derive::main] -async fn main() -> Result<()> { - let usage = disk::usage(USAGE_PATH).await?; - dbg!(usage); - - Ok(()) -} diff --git a/heim-host/examples/boot_time.rs b/heim-host/examples/boot_time.rs deleted file mode 100644 index 5f69cb44..00000000 --- a/heim-host/examples/boot_time.rs +++ /dev/null @@ -1,11 +0,0 @@ -use heim_common::prelude::*; -use heim_host as host; - -#[heim_derive::main] -async fn main() -> Result<()> { - let boot_time = host::boot_time().await?; - - dbg!(boot_time); - - Ok(()) -} diff --git a/heim-host/examples/platform.rs b/heim-host/examples/platform.rs deleted file mode 100644 index cb549798..00000000 --- a/heim-host/examples/platform.rs +++ /dev/null @@ -1,11 +0,0 @@ -use heim_common::prelude::*; -use heim_host as host; - -#[heim_derive::main] -async fn main() -> Result<()> { - let platform = host::platform().await?; - - dbg!(platform); - - Ok(()) -} diff --git a/heim-host/examples/uptime.rs b/heim-host/examples/uptime.rs deleted file mode 100644 index 77e9ab78..00000000 --- a/heim-host/examples/uptime.rs +++ /dev/null @@ -1,11 +0,0 @@ -use heim_common::prelude::*; -use heim_host as host; - -#[heim_derive::main] -async fn main() -> Result<()> { - let uptime = host::uptime().await?; - - dbg!(uptime); - - Ok(()) -} diff --git a/heim-host/examples/users.rs b/heim-host/examples/users.rs deleted file mode 100644 index 03718d03..00000000 --- a/heim-host/examples/users.rs +++ /dev/null @@ -1,14 +0,0 @@ -use heim_common::prelude::*; -use heim_host as host; - -#[heim_derive::main] -async fn main() -> Result<()> { - let mut users = host::users(); - while let Some(user) = users.next().await { - let user = user?; - - println!("{:?}", user); - } - - Ok(()) -} diff --git a/heim-net/examples/counters.rs b/heim-net/examples/counters.rs deleted file mode 100644 index f3c528b5..00000000 --- a/heim-net/examples/counters.rs +++ /dev/null @@ -1,13 +0,0 @@ -use heim_common::prelude::*; -use heim_net as net; - -#[heim_derive::main] -async fn main() -> Result<()> { - let counters = net::io_counters(); - pin_utils::pin_mut!(counters); - while let Some(counter) = counters.next().await { - dbg!(counter?); - } - - Ok(()) -} diff --git a/heim-net/examples/nic.rs b/heim-net/examples/nic.rs deleted file mode 100644 index c02b262d..00000000 --- a/heim-net/examples/nic.rs +++ /dev/null @@ -1,13 +0,0 @@ -use heim_common::prelude::*; -use heim_net as net; - -#[heim_derive::main] -async fn main() -> Result<()> { - let nic = net::nic(); - pin_utils::pin_mut!(nic); - while let Some(iface) = nic.next().await { - dbg!(iface?); - } - - Ok(()) -} diff --git a/heim-process/examples/pids.rs b/heim-process/examples/pids.rs deleted file mode 100644 index f9c78732..00000000 --- a/heim-process/examples/pids.rs +++ /dev/null @@ -1,15 +0,0 @@ -use heim_common::prelude::StreamExt; -use heim_process as process; - -#[heim_derive::main] -async fn main() -> Result<(), process::ProcessError> { - let pids = process::pids(); - pin_utils::pin_mut!(pids); - while let Some(pid) = pids.next().await { - let pid = pid?; - dbg!(pid); - dbg!(process::pid_exists(pid).await?); - } - - Ok(()) -} diff --git a/heim-process/examples/process_current.rs b/heim-process/examples/process_current.rs deleted file mode 100644 index 4ecd0527..00000000 --- a/heim-process/examples/process_current.rs +++ /dev/null @@ -1,46 +0,0 @@ -use heim_common::units::ratio; -use heim_process as process; - -#[heim_derive::main] -async fn main() -> Result<(), process::ProcessError> { - let process = process::current().await?; - - // Let's start with a CPU usage in order to measure how much time it will take - // to load all the things. See the end of file for a second CPU usage call. - let cpu_usage = process.cpu_usage().await?; - - dbg!(process.pid()); - dbg!(process.parent().await?); - dbg!(process.status().await?); - dbg!(process.name().await?); - dbg!(process.exe().await?); - dbg!(process.command().await?); - #[cfg(not(target_os = "windows"))] // Not implemented yet - dbg!(process.cwd().await?); - dbg!(process.create_time().await?); - dbg!(process.cpu_time().await?); - dbg!(process.memory().await?); - - #[cfg(target_os = "linux")] - { - println!("# Linux specifics"); - use heim_common::prelude::StreamExt; - use heim_process::os::linux::ProcessExt; - - dbg!(process.io_counters().await?); - - let mut net_io_counters = process.net_io_counters(); - while let Some(counter) = net_io_counters.next().await { - let counter = counter?; - dbg!(counter); - } - } - - let cpu_usage_2 = process.cpu_usage().await?; - println!( - "CPU usage: {} %", - (cpu_usage_2 - cpu_usage).get::() - ); - - Ok(()) -} diff --git a/heim-process/examples/processes.rs b/heim-process/examples/processes.rs deleted file mode 100644 index da2857a1..00000000 --- a/heim-process/examples/processes.rs +++ /dev/null @@ -1,29 +0,0 @@ -use std::path::PathBuf; - -use heim_common::prelude::StreamExt; -use heim_process as process; - -#[heim_derive::main] -async fn main() -> Result<(), process::ProcessError> { - let processes = process::processes(); - pin_utils::pin_mut!(processes); - println!( - "| {:6} | {:6} | {:10} | {:40} | {:50} |", - "pid", "ppid", "status", "name", "exe" - ); - - while let Some(process) = processes.next().await { - let process = process?; - - println!( - "| {:6} | {:6} | {:10?} | {:40} | {:50?}", - process.pid(), - process.parent_pid().await.unwrap_or(0), - process.status().await.unwrap(), - process.name().await.unwrap_or_else(|_| "".to_string()), - process.exe().await.unwrap_or_else(|_| PathBuf::new()), - ); - } - - Ok(()) -} diff --git a/heim-process/examples/signal.rs b/heim-process/examples/signal.rs deleted file mode 100644 index 7a2eff37..00000000 --- a/heim-process/examples/signal.rs +++ /dev/null @@ -1,36 +0,0 @@ -//! Sending signals to processes -//! -//! ## Usage -//! -//! `$ signal {SIGNAL_TYPE} {PID}` -//! -//! where `{SIGNAL_TYPE}` is one of `suspend`, `resume`, `terminate` or `kill`. -//! -//! Ex. `$ signal terminate 12345` -//! or in a full form: -//! `$ cargo run -p heim-process --example signal -- resume 37520 ` - -use std::env; -use std::io; - -use heim_process as process; - -#[heim_derive::main] -async fn main() -> process::ProcessResult<()> { - let args = env::args().collect::>(); - if args.len() != 3 { - return Err(io::Error::from(io::ErrorKind::InvalidData).into()); - } - let pid: process::Pid = args[2] - .parse::() - .map_err(|_| process::ProcessError::from(io::Error::from(io::ErrorKind::InvalidData)))?; - let process = process::get(pid).await?; - - match args[1].as_str() { - "suspend" => process.suspend().await, - "resume" => process.resume().await, - "terminate" => process.terminate().await, - "kill" => process.kill().await, - _ => Err(io::Error::from(io::ErrorKind::InvalidData).into()), - } -} diff --git a/heim-sensors/examples/temperatures.rs b/heim-sensors/examples/temperatures.rs deleted file mode 100644 index bdb89c3c..00000000 --- a/heim-sensors/examples/temperatures.rs +++ /dev/null @@ -1,13 +0,0 @@ -use heim_common::prelude::*; -use heim_sensors as sensors; - -#[heim_derive::main] -async fn main() -> Result<()> { - let sensors = sensors::temperatures(); - pin_utils::pin_mut!(sensors); - while let Some(sensor) = sensors.next().await { - dbg!(sensor?); - } - - Ok(()) -} diff --git a/heim-virt/examples/detect.rs b/heim-virt/examples/detect.rs deleted file mode 100644 index 2da21f01..00000000 --- a/heim-virt/examples/detect.rs +++ /dev/null @@ -1,6 +0,0 @@ -use heim_virt::detect; - -#[heim_derive::main] -async fn main() { - dbg!(detect().await); -}