yotei/yotei-nodes/src/worker_util/specs.rs
2024-10-01 17:11:11 +02:00

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
// }