Improved Network info
This commit is contained in:
41
src/main.rs
41
src/main.rs
@@ -1,13 +1,14 @@
|
||||
extern crate rocket;
|
||||
use readable::byte::Byte;
|
||||
use readable::up::UptimeFull;
|
||||
use rocket::serde::Serialize;
|
||||
use rocket::{get, launch, routes};
|
||||
use rocket::serde::{Serialize, Deserialize};
|
||||
use rocket::{get, launch, routes, State, fairing::AdHoc};
|
||||
use rocket_dyn_templates::{context, Template};
|
||||
use std::path::Path;
|
||||
use reqwest;
|
||||
use std::collections::HashMap;
|
||||
use sysinfo::{Components, Disks, Networks, System};
|
||||
use vnstat_parse::{Error, Vnstat};
|
||||
use tokio::task;
|
||||
|
||||
mod monero_rpc;
|
||||
@@ -41,8 +42,9 @@ struct RamInfo {
|
||||
#[derive(Serialize, Debug)]
|
||||
struct NetworkInfo {
|
||||
name: String,
|
||||
total_sent: String,
|
||||
total_received: String,
|
||||
total_sent_today: String,
|
||||
total_received_today: String,
|
||||
average_rate_today: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Debug)]
|
||||
@@ -58,7 +60,7 @@ struct SysInfo {
|
||||
restart_needed: bool,
|
||||
}
|
||||
|
||||
fn get_system_info() -> SysInfo {
|
||||
fn get_system_info(network_if_names: &Vec<String>) -> SysInfo {
|
||||
let mut sys = System::new_all();
|
||||
sys.refresh_all();
|
||||
let cpu_load = System::load_average();
|
||||
@@ -93,14 +95,17 @@ fn get_system_info() -> SysInfo {
|
||||
})
|
||||
}
|
||||
|
||||
let networks = Networks::new_with_refreshed_list();
|
||||
let mut network_ifs = Vec::new();
|
||||
for (interface_name, network) in &networks {
|
||||
network_ifs.push(NetworkInfo {
|
||||
name: interface_name.to_string(),
|
||||
total_sent: Byte::from(network.total_transmitted()).to_string(),
|
||||
total_received: Byte::from(network.total_received()).to_string()
|
||||
});
|
||||
for network_if_name in network_if_names {
|
||||
// TODO: Fail more gracefully
|
||||
let vnstat_data = Vnstat::get(&network_if_name).unwrap();
|
||||
println!("{:?}", vnstat_data);
|
||||
network_ifs.push(NetworkInfo{
|
||||
name: network_if_name.to_string(),
|
||||
total_sent_today: format!("{} {}", vnstat_data.day_tx, vnstat_data.day_tx_unit),
|
||||
total_received_today: format!("{} {}", vnstat_data.day_rx, vnstat_data.day_rx_unit),
|
||||
average_rate_today: format!("{} {}", vnstat_data.day_avg_rate, vnstat_data.day_avg_rate_unit),
|
||||
})
|
||||
}
|
||||
|
||||
SysInfo {
|
||||
@@ -133,7 +138,6 @@ fn get_node_info() -> NodeInfoInner {
|
||||
// TODO: Properly handle this unwrap - half the point of this is to capture
|
||||
// when the node is down - don't want it crashing when
|
||||
let resp = client.post("http://127.0.0.1:18081/json_rpc").json(&map).send().unwrap();
|
||||
// TODO: Figure out _why_ this part needs to be inside this closure
|
||||
resp.json::<NodeInfo>()
|
||||
}).unwrap();
|
||||
let mut node_info = node_info.result;
|
||||
@@ -145,10 +149,16 @@ fn get_node_info() -> NodeInfoInner {
|
||||
node_info
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(crate = "rocket::serde")]
|
||||
struct Config {
|
||||
network_interfaces: Vec<String>,
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
fn index() -> Template {
|
||||
fn index(config: &State<Config>) -> Template {
|
||||
let node_info = get_node_info();
|
||||
let system_context = get_system_info();
|
||||
let system_context = get_system_info(&config.network_interfaces);
|
||||
let context = context! {
|
||||
system: system_context,
|
||||
node_info: node_info,
|
||||
@@ -161,4 +171,5 @@ fn rocket() -> _ {
|
||||
rocket::build()
|
||||
.mount("/", routes![index])
|
||||
.attach(Template::fairing())
|
||||
.attach(AdHoc::config::<Config>())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user