refresh components

This commit is contained in:
jb-alvarado 2023-11-08 08:03:36 +01:00
parent ec2760acce
commit effb60f310
5 changed files with 316 additions and 197 deletions

View File

@ -1,12 +1,173 @@
use std::thread::sleep;
use std::time::Duration;
use std::{
path::Path,
sync::{Arc, Mutex},
thread::sleep,
time::Duration,
};
use ffplayout_api::utils::system;
use ffplayout_lib::utils::PlayoutConfig;
use lazy_static::lazy_static;
use local_ip_address::list_afinet_netifas;
use serde::Serialize;
use sysinfo::{CpuExt, DiskExt, NetworkExt, System, SystemExt};
lazy_static! {
pub static ref SYS: Arc<Mutex<System>> = Arc::new(Mutex::new(System::new_all()));
}
#[derive(Debug, Serialize)]
pub struct Cpu {
pub cores: f32,
pub usage: f32,
}
#[derive(Debug, Default, Serialize)]
pub struct Storage {
pub path: String,
pub total: u64,
pub used: u64,
}
#[derive(Debug, Serialize)]
pub struct Load {
pub one: f64,
pub five: f64,
pub fifteen: f64,
}
#[derive(Debug, Serialize)]
pub struct Memory {
pub total: u64,
pub used: u64,
pub free: u64,
}
#[derive(Debug, Default, Serialize)]
pub struct Network {
pub name: String,
pub current_in: u64,
pub total_in: u64,
pub current_out: u64,
pub total_out: u64,
}
#[derive(Debug, Serialize)]
pub struct MySystem {
pub name: Option<String>,
pub kernel: Option<String>,
pub version: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct Swap {
pub total: u64,
pub used: u64,
pub free: u64,
}
#[derive(Debug, Serialize)]
pub struct SystemStat {
pub cpu: Cpu,
pub load: Load,
pub memory: Memory,
pub network: Network,
pub storage: Storage,
pub swap: Swap,
pub system: MySystem,
}
pub fn stat() -> SystemStat {
let mut sys = SYS.lock().unwrap();
let network_interfaces = list_afinet_netifas().unwrap();
let mut usage = 0.0;
let mut interfaces = vec![];
for (name, ip) in network_interfaces.iter() {
if !ip.is_loopback() {
interfaces.push((name, ip))
}
}
interfaces.dedup_by(|a, b| a.0 == b.0);
sys.refresh_cpu();
sys.refresh_disks();
sys.refresh_memory();
sys.refresh_networks();
let cores = sys.cpus().len() as f32;
for cpu in sys.cpus() {
usage += cpu.cpu_usage();
}
let cpu = Cpu {
cores,
usage: usage * cores / 100.0,
};
let mut storage = Storage::default();
for disk in sys.disks() {
if disk.mount_point().to_string_lossy().len() > 1
&& Path::new("/home").starts_with(disk.mount_point())
{
storage.path = disk.name().to_string_lossy().to_string();
storage.total = disk.total_space();
storage.used = disk.available_space();
}
}
let load_avg = sys.load_average();
let load = Load {
one: load_avg.one,
five: load_avg.five,
fifteen: load_avg.fifteen,
};
let memory = Memory {
total: sys.total_memory(),
used: sys.used_memory(),
free: sys.free_memory(),
};
let mut network = Network::default();
for (interface_name, data) in sys.networks() {
if !interfaces.is_empty() && interface_name == interfaces[0].0 {
network.name = interface_name.clone();
network.current_in = data.received();
network.total_in = data.total_received();
network.current_out = data.transmitted();
network.total_out = data.total_transmitted();
}
}
let swap = Swap {
total: sys.total_swap(),
used: sys.used_swap(),
free: sys.free_swap(),
};
let system = MySystem {
name: sys.name(),
kernel: sys.kernel_version(),
version: sys.os_version(),
};
SystemStat {
cpu,
storage,
load,
memory,
network,
system,
swap,
}
}
fn main() {
loop {
let system_stat = system::stat(PlayoutConfig::default());
let system_stat = stat();
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
println!("{system_stat:#?}");

View File

@ -1,96 +1,73 @@
use std::cmp;
use std::path::Path;
use std::thread::sleep;
use std::time::Duration;
use std::{path::Path, thread::sleep, time::Duration};
use local_ip_address::list_afinet_netifas;
use serde::Serialize;
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}")
#[derive(Debug, Serialize)]
pub struct Cpu {
pub cores: f32,
pub usage: f32,
}
#[derive(Debug)]
struct Cpu {
cores: f32,
usage: f32,
#[derive(Debug, Default, Serialize)]
pub struct Storage {
pub path: String,
pub total: u64,
pub used: u64,
}
#[derive(Debug, Default)]
struct Disk {
name: String,
total: String,
used: String,
#[derive(Debug, Serialize)]
pub struct Load {
pub one: f64,
pub five: f64,
pub fifteen: f64,
}
#[derive(Debug)]
struct Load {
one: f64,
five: f64,
fifteen: f64,
#[derive(Debug, Serialize)]
pub struct Memory {
pub total: u64,
pub used: u64,
pub free: u64,
}
#[derive(Debug)]
struct Memory {
total: String,
used: String,
free: String,
#[derive(Debug, Default, Serialize)]
pub struct Network {
pub name: String,
pub current_in: u64,
pub total_in: u64,
pub current_out: u64,
pub total_out: u64,
}
#[derive(Debug, Default)]
struct Network {
name: String,
current_in: String,
total_in: String,
current_out: String,
total_out: String,
#[derive(Debug, Serialize)]
pub struct MySystem {
pub name: Option<String>,
pub kernel: Option<String>,
pub version: Option<String>,
}
#[derive(Debug)]
struct MySystem {
name: Option<String>,
kernel: Option<String>,
version: Option<String>,
#[derive(Debug, Serialize)]
pub struct Swap {
pub total: u64,
pub used: u64,
pub free: u64,
}
#[derive(Debug)]
struct Swap {
total: String,
used: String,
free: String,
#[derive(Debug, Serialize)]
pub struct SystemStat {
pub cpu: Cpu,
pub load: Load,
pub memory: Memory,
pub network: Network,
pub storage: Storage,
pub swap: Swap,
pub system: MySystem,
}
#[derive(Debug)]
struct SystemStat {
cpu: Cpu,
disk: Disk,
load: Load,
memory: Memory,
network: Network,
swap: Swap,
system: MySystem,
}
fn main() {
pub fn stat(sys: &mut System) -> SystemStat {
let network_interfaces = list_afinet_netifas().unwrap();
let mut sys = System::new_all();
let mut usage = 0.0;
let mut interfaces = vec![];
for (name, ip) in network_interfaces.iter() {
@ -99,87 +76,89 @@ fn main() {
}
}
if interfaces.len() > 1 {
interfaces = interfaces
.into_iter()
.filter(|i| i.1.is_ipv4())
.collect::<_>();
interfaces.dedup_by(|a, b| a.0 == b.0);
sys.refresh_cpu();
sys.refresh_disks();
sys.refresh_memory();
sys.refresh_networks();
let cores = sys.cpus().len() as f32;
for cpu in sys.cpus() {
usage += cpu.cpu_usage();
}
let cpu = Cpu {
cores,
usage: usage * cores / 100.0,
};
let mut storage = Storage::default();
for disk in sys.disks() {
if disk.mount_point().to_string_lossy().len() > 1
&& Path::new("/home").starts_with(disk.mount_point())
{
storage.path = disk.name().to_string_lossy().to_string();
storage.total = disk.total_space();
storage.used = disk.available_space();
}
}
let load_avg = sys.load_average();
let load = Load {
one: load_avg.one,
five: load_avg.five,
fifteen: load_avg.fifteen,
};
let memory = Memory {
total: sys.total_memory(),
used: sys.used_memory(),
free: sys.free_memory(),
};
let mut network = Network::default();
for (interface_name, data) in sys.networks() {
if !interfaces.is_empty() && interface_name == interfaces[0].0 {
network.name = interface_name.clone();
network.current_in = data.received();
network.total_in = data.total_received();
network.current_out = data.transmitted();
network.total_out = data.total_transmitted();
}
}
let swap = Swap {
total: sys.total_swap(),
used: sys.used_swap(),
free: sys.free_swap(),
};
let system = MySystem {
name: sys.name(),
kernel: sys.kernel_version(),
version: sys.os_version(),
};
SystemStat {
cpu,
storage,
load,
memory,
network,
system,
swap,
}
}
fn main() {
let mut sys = System::new_all();
loop {
sys.refresh_all();
let mut usage = 0.0;
let cores = sys.cpus().len() as f32;
for cpu in sys.cpus() {
usage += cpu.cpu_usage();
}
let my_cpu = Cpu {
cores,
usage: usage * cores / 100.0,
};
let mut my_disk = Disk::default();
for disk in sys.disks() {
if disk.mount_point().to_string_lossy().len() > 1
&& Path::new("/home/jb/Videos").starts_with(disk.mount_point())
{
my_disk.name = disk.name().to_string_lossy().to_string();
my_disk.total = byte_convert(disk.total_space() as f64);
my_disk.used = byte_convert(disk.available_space() as f64);
}
}
let load_avg = sys.load_average();
let my_load = Load {
one: load_avg.one,
five: load_avg.five,
fifteen: load_avg.fifteen,
};
let my_memory = Memory {
total: byte_convert(sys.total_memory() as f64),
used: byte_convert(sys.used_memory() as f64),
free: byte_convert((sys.total_memory() - sys.used_memory()) as f64),
};
let mut my_network = Network::default();
for (interface_name, data) in sys.networks() {
if !interfaces.is_empty() && interface_name == interfaces[0].0 {
my_network.name = interface_name.clone();
my_network.current_in = byte_convert(data.received() as f64);
my_network.total_in = byte_convert(data.total_received() as f64);
my_network.current_out = byte_convert(data.transmitted() as f64);
my_network.total_out = byte_convert(data.total_transmitted() as f64);
}
}
let my_swap = Swap {
total: byte_convert(sys.total_swap() as f64),
used: byte_convert(sys.used_swap() as f64),
free: byte_convert((sys.total_swap() - sys.used_swap()) as f64),
};
let my_system = MySystem {
name: sys.name(),
kernel: sys.kernel_version(),
version: sys.os_version(),
};
let system_stat = SystemStat {
system: my_system,
memory: my_memory,
swap: my_swap,
disk: my_disk,
cpu: my_cpu,
load: my_load,
network: my_network,
};
let system_stat = stat(&mut sys);
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
println!("{system_stat:#?}");

View File

@ -1,15 +0,0 @@
use clap::Parser;
use lazy_static::lazy_static;
use std::sync::Mutex;
use sysinfo::{System, SystemExt};
pub mod api;
pub mod db;
pub mod utils;
use utils::args_parse::Args;
lazy_static! {
pub static ref ARGS: Args = Args::parse();
pub static ref SYS: Mutex<System> = Mutex::new(System::new_all());
}

View File

@ -1,4 +1,8 @@
use std::{env, process::exit};
use std::{
env,
process::exit,
sync::{Arc, Mutex},
};
use actix_web::{
dev::ServiceRequest, middleware::Logger, web, App, Error, HttpMessage, HttpServer,
@ -12,8 +16,11 @@ use actix_files::Files;
#[cfg(not(debug_assertions))]
use actix_web_static_files::ResourceFiles;
use clap::Parser;
use lazy_static::lazy_static;
use path_clean::PathClean;
use simplelog::*;
use sysinfo::{System, SystemExt};
pub mod api;
pub mod db;
@ -21,14 +28,18 @@ pub mod utils;
use api::{auth, routes::*};
use db::{db_pool, models::LoginUser};
use utils::{control::ProcessControl, db_path, init_config, run_args};
use utils::{args_parse::Args, control::ProcessControl, db_path, init_config, run_args};
use ffplayout_api::{ARGS, SYS};
use ffplayout_lib::utils::{init_logging, PlayoutConfig};
#[cfg(not(debug_assertions))]
include!(concat!(env!("OUT_DIR"), "/generated.rs"));
lazy_static! {
pub static ref ARGS: Args = Args::parse();
pub static ref SYS: Arc<Mutex<System>> = Arc::new(Mutex::new(System::new_all()));
}
async fn validator(
req: ServiceRequest,
credentials: BearerAuth,

View File

@ -7,26 +7,6 @@ use sysinfo::{CpuExt, DiskExt, NetworkExt, SystemExt};
use crate::SYS;
use ffplayout_lib::utils::PlayoutConfig;
// 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}")
// }
#[derive(Debug, Serialize)]
pub struct Cpu {
pub cores: f32,
@ -90,7 +70,7 @@ pub struct SystemStat {
pub fn stat(config: PlayoutConfig) -> SystemStat {
let mut sys = SYS.lock().unwrap();
let network_interfaces = list_afinet_netifas().unwrap();
let network_interfaces = list_afinet_netifas().unwrap_or_default();
let mut usage = 0.0;
let mut interfaces = vec![];
@ -102,7 +82,10 @@ pub fn stat(config: PlayoutConfig) -> SystemStat {
interfaces.dedup_by(|a, b| a.0 == b.0);
sys.refresh_all();
sys.refresh_cpu();
sys.refresh_disks();
sys.refresh_memory();
sys.refresh_networks();
let cores = sys.cpus().len() as f32;
@ -137,7 +120,7 @@ pub fn stat(config: PlayoutConfig) -> SystemStat {
let memory = Memory {
total: sys.total_memory(),
used: sys.used_memory(),
free: sys.total_memory() - sys.used_memory(),
free: sys.free_memory(),
};
let mut network = Network::default();
@ -155,7 +138,7 @@ pub fn stat(config: PlayoutConfig) -> SystemStat {
let swap = Swap {
total: sys.total_swap(),
used: sys.used_swap(),
free: sys.total_swap() - sys.used_swap(),
free: sys.free_swap(),
};
let system = MySystem {