87 lines
2.9 KiB
Rust
87 lines
2.9 KiB
Rust
use std::{collections::HashMap, fmt};
|
|
|
|
use crate::util::state::NodeSpecs;
|
|
use ethtool::{self, EthtoolAttr, EthtoolMessage};
|
|
|
|
pub fn collect_specs() -> NodeSpecs {
|
|
let mut sys = sysinfo::System::new_all();
|
|
NodeSpecs {
|
|
threads: sys.cpus().len().try_into().unwrap(),
|
|
mem: sys.total_memory(),
|
|
net_speed: 13.0,
|
|
}
|
|
}
|
|
|
|
use futures::stream::TryStreamExt;
|
|
use log::{debug, error, info};
|
|
|
|
pub async fn network() {
|
|
let mut interfaces = vec![];
|
|
match nix::ifaddrs::getifaddrs() {
|
|
Ok(ifaddrs) => {
|
|
debug!("{:?}", ifaddrs);
|
|
for ifaddr in ifaddrs {
|
|
if let Some(interface_name) = Some(ifaddr.interface_name) {
|
|
if let Some(flags) = Some(ifaddr.flags) {
|
|
let is_up = flags.contains(nix::net::if_::InterfaceFlags::IFF_UP);
|
|
let is_running = flags.contains(nix::net::if_::InterfaceFlags::IFF_RUNNING);
|
|
|
|
if is_up && is_running {
|
|
interfaces.push(interface_name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Err(err) => {
|
|
error!("Failed to get network interfaces: {}", err);
|
|
}
|
|
}
|
|
debug!("{:?}", interfaces);
|
|
let mut interface_speeds: Vec<(String, i64)> = vec![];
|
|
let mut visited_interfaces = vec![];
|
|
for interface in interfaces {
|
|
let path = format!("{}{}{}", "/sys/class/net/", interface, "/speed");
|
|
debug!("{}", &path);
|
|
if !path.contains("lo") {
|
|
let speed = std::fs::read_to_string(path).unwrap();
|
|
debug!("SPEED: {}", &speed);
|
|
interface_speeds.push((interface, speed.trim_end().parse::<i64>().unwrap()));
|
|
}
|
|
}
|
|
// let res = get_link_mode(Some("enp42s0")).await;
|
|
debug!("{:#?}", interface_speeds);
|
|
}
|
|
|
|
// async fn get_link_mode(
|
|
// iface_name: Option<&str>,
|
|
// ) -> Vec<netlink_packet_generic::message::GenlMessage<EthtoolMessage>> {
|
|
// let (connection, mut handle, _) = ethtool::new_connection().unwrap();
|
|
// tokio::spawn(connection);
|
|
//
|
|
// let mut link_mode_handle = handle.link_mode().get(iface_name).execute().await;
|
|
//
|
|
// let mut msgs = Vec::new();
|
|
// while let Some(msg) = link_mode_handle.try_next().await.unwrap() {
|
|
// msgs.push(msg);
|
|
// }
|
|
// assert!(!msgs.is_empty());
|
|
// let mut lm = None;
|
|
// for msg in &msgs {
|
|
// let payl = msg.payload.clone();
|
|
// for linkmode in payl.nlas {
|
|
// match &linkmode {
|
|
// ethtool::EthtoolAttr::LinkMode(ethtool::EthtoolLinkModeAttr::Speed(_)) => {
|
|
// lm = Some(linkmode)
|
|
// }
|
|
// _ => continue,
|
|
// };
|
|
// }
|
|
// }
|
|
// // if lm.is_some() {
|
|
// debug!("{:#?}", lm.clone().unwrap());
|
|
// let speed = lm.unwrap();
|
|
// speed.
|
|
// // }
|
|
// msgs
|
|
// }
|