systeminfo example
This commit is contained in:
parent
63b9c0664a
commit
22fb1d78d2
78
Cargo.lock
generated
78
Cargo.lock
generated
@ -911,6 +911,30 @@ dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
"memoffset",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-queue"
|
||||
version = "0.3.8"
|
||||
@ -1187,6 +1211,7 @@ dependencies = [
|
||||
"simplelog",
|
||||
"sqlx",
|
||||
"static-files",
|
||||
"sysinfo",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
@ -1962,6 +1987,15 @@ version = "2.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mime"
|
||||
version = "0.3.17"
|
||||
@ -2047,6 +2081,15 @@ dependencies = [
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ntapi"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-bigint"
|
||||
version = "0.4.4"
|
||||
@ -2375,6 +2418,26 @@ dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.3.5"
|
||||
@ -3144,6 +3207,21 @@ dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sysinfo"
|
||||
version = "0.29.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
"ntapi",
|
||||
"once_cell",
|
||||
"rayon",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "system-configuration"
|
||||
version = "0.5.1"
|
||||
|
@ -37,6 +37,7 @@ serde_json = "1.0"
|
||||
serde_yaml = "0.9"
|
||||
simplelog = { version = "0.12", features = ["paris"] }
|
||||
static-files = "0.2"
|
||||
sysinfo = "0.29"
|
||||
sqlx = { version = "0.7", features = ["runtime-tokio", "sqlite"] }
|
||||
tokio = { version = "1.29", features = ["full"] }
|
||||
|
||||
|
97
ffplayout-api/examples/system_i.rs
Normal file
97
ffplayout-api/examples/system_i.rs
Normal file
@ -0,0 +1,97 @@
|
||||
use std::cmp;
|
||||
use std::path::Path;
|
||||
use std::thread::sleep;
|
||||
use std::time::Duration;
|
||||
|
||||
use sysinfo::{CpuExt, DiskExt, NetworkExt, System, SystemExt};
|
||||
|
||||
pub fn byte_convert(num: f64) -> String {
|
||||
let negative = if num.is_sign_positive() { "" } else { "-" };
|
||||
let num = num.abs();
|
||||
let units = ["B", "kiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
|
||||
if num < 1_f64 {
|
||||
return format!("{}{} {}", negative, num, "B");
|
||||
}
|
||||
let delimiter = 1024_f64;
|
||||
let exponent = cmp::min(
|
||||
(num.ln() / delimiter.ln()).floor() as i32,
|
||||
(units.len() - 1) as i32,
|
||||
);
|
||||
let pretty_bytes = format!("{:.3}", num / delimiter.powi(exponent))
|
||||
.parse::<f64>()
|
||||
.unwrap()
|
||||
* 1_f64;
|
||||
let unit = units[exponent as usize];
|
||||
format!("{}{} {}", negative, pretty_bytes, unit)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut sys = System::new_all();
|
||||
|
||||
loop {
|
||||
sys.refresh_all();
|
||||
|
||||
let mut usage = 0.0;
|
||||
let count = sys.cpus().len() as f32;
|
||||
|
||||
for cpu in sys.cpus() {
|
||||
usage += cpu.cpu_usage();
|
||||
}
|
||||
|
||||
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
|
||||
|
||||
println!("System name: {:?}", sys.name());
|
||||
println!("System kernel version: {:?}", sys.kernel_version());
|
||||
println!("System OS version: {:?}\n", sys.os_version());
|
||||
|
||||
println!("total memory: {}", byte_convert(sys.total_memory() as f64));
|
||||
println!("used memory : {}", byte_convert(sys.used_memory() as f64));
|
||||
println!(
|
||||
"free memory : {}\n",
|
||||
byte_convert((sys.total_memory() - sys.used_memory()) as f64)
|
||||
);
|
||||
|
||||
println!("total swap : {}", byte_convert(sys.total_swap() as f64));
|
||||
println!("used swap : {}", byte_convert(sys.used_swap() as f64));
|
||||
println!(
|
||||
"free swap : {}\n",
|
||||
byte_convert((sys.total_swap() - sys.used_swap()) as f64)
|
||||
);
|
||||
|
||||
for disk in sys.disks() {
|
||||
if disk.mount_point() == Path::new("/") {
|
||||
println!(
|
||||
"disk: {:?} | available space {}",
|
||||
disk.name(),
|
||||
byte_convert(disk.available_space() as f64),
|
||||
);
|
||||
}
|
||||
}
|
||||
println!();
|
||||
|
||||
let load_avg = sys.load_average();
|
||||
|
||||
for (interface_name, data) in sys.networks() {
|
||||
if interface_name == "wlp5s0" {
|
||||
println!(
|
||||
"{}: (in / total) {} / {} | (out / total) {} / {}",
|
||||
interface_name,
|
||||
byte_convert(data.received() as f64),
|
||||
byte_convert(data.total_received() as f64),
|
||||
byte_convert(data.transmitted() as f64),
|
||||
byte_convert(data.total_transmitted() as f64),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
println!();
|
||||
|
||||
println!("CPU Usage: {:.2}%", usage * count / 100.0);
|
||||
println!(
|
||||
"Load: {}% {}% {}%\n",
|
||||
load_avg.one, load_avg.five, load_avg.fifteen
|
||||
);
|
||||
|
||||
sleep(Duration::from_secs(1))
|
||||
}
|
||||
}
|
0
ffplayout-api/src/utils/system.rs
Normal file
0
ffplayout-api/src/utils/system.rs
Normal file
Loading…
Reference in New Issue
Block a user