improved output format + add support for displaying in tables
This commit is contained in:
@@ -2,8 +2,8 @@ use crate::async_handler::Response;
|
||||
use crate::async_handler::Request;
|
||||
use crate::hetzner_api::{HetznerClient, WrappedServer};
|
||||
use rhai::{Engine, EvalAltResult};
|
||||
use rhai::EvalContext;
|
||||
use std::sync::{Arc, Mutex, mpsc::{Sender, Receiver}};
|
||||
use prettytable::{Table, Row, Cell};
|
||||
|
||||
pub fn register_hetzner_api(
|
||||
engine: &mut Engine,
|
||||
@@ -136,6 +136,28 @@ pub fn register_hetzner_api(
|
||||
.register_iterator::<Vec<WrappedServer>>()
|
||||
.register_fn("len", |list: &mut Vec<WrappedServer>| list.len() as i64)
|
||||
.register_indexer_get(|list: &mut Vec<WrappedServer>, index: i64| list[index as usize].clone())
|
||||
.register_fn(
|
||||
"show_table",
|
||||
|servers: &mut Vec<WrappedServer>| -> Result<String, Box<EvalAltResult>> {
|
||||
let mut table = Table::new();
|
||||
table.set_titles(Row::new(vec![Cell::new("Server List").style_spec("c")]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("ID"),
|
||||
Cell::new("Name"),
|
||||
Cell::new("Status"),
|
||||
Cell::new("Public IPv4"),
|
||||
]));
|
||||
for server in servers {
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new(&server.0.id.to_string()),
|
||||
Cell::new(&server.0.name),
|
||||
Cell::new(&format!("{:?}", server.0.status)),
|
||||
Cell::new(&server.0.public_net.ipv4.clone().unwrap().ip.to_string()),
|
||||
]));
|
||||
}
|
||||
Ok(table.to_string())
|
||||
},
|
||||
)
|
||||
.register_fn(
|
||||
"ping",
|
||||
move |server: &mut WrappedServer| -> Result<bool, Box<EvalAltResult>> {
|
||||
@@ -168,18 +190,52 @@ pub fn register_hetzner_api(
|
||||
.register_fn(
|
||||
"show_details",
|
||||
|server: &mut WrappedServer| -> Result<String, Box<EvalAltResult>> {
|
||||
let mut details = String::new();
|
||||
details.push_str(&format!(" ID: {}\n", server.0.id));
|
||||
details.push_str(&format!(" Status: {:?}\n", server.0.status));
|
||||
details.push_str(&format!(" Created: {}\n", server.0.created));
|
||||
details.push_str(&format!(" IPv4: {}\n", server.0.public_net.ipv4.clone().unwrap().ip));
|
||||
details.push_str(&format!(" Type: {}\n", server.0.server_type.clone().name));
|
||||
details.push_str(&format!(" Included Traffic: {} GB\n", server.0.included_traffic.unwrap_or(0) / 1024 / 1024 / 1024));
|
||||
details.push_str(&format!(" Ingoing Traffic: {} MB\n", server.0.ingoing_traffic.unwrap_or(0) / 1024 / 1024));
|
||||
details.push_str(&format!(" Outgoing Traffic: {} MB\n", server.0.outgoing_traffic.unwrap_or(0) / 1024 / 1024));
|
||||
details.push_str(&format!(" Primary Disk Size: {} GB\n", server.0.primary_disk_size));
|
||||
details.push_str(&format!(" Rescue Enabled: {}\n", server.0.rescue_enabled));
|
||||
Ok(details)
|
||||
let mut table = Table::new();
|
||||
table.set_titles(Row::new(vec![
|
||||
Cell::new(&server.0.name).style_spec("c")
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("ID"),
|
||||
Cell::new(&server.0.id.to_string()),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Status"),
|
||||
Cell::new(&format!("{:?}", server.0.status)),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Created"),
|
||||
Cell::new(&server.0.created),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("IPv4"),
|
||||
Cell::new(&server.0.public_net.ipv4.clone().unwrap().ip.to_string()),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Type"),
|
||||
Cell::new(&server.0.server_type.name),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Included Traffic"),
|
||||
Cell::new(&format!("{} GB", server.0.included_traffic.unwrap_or(0) / 1024 / 1024 / 1024)),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Ingoing Traffic"),
|
||||
Cell::new(&format!("{} MB", server.0.ingoing_traffic.unwrap_or(0) / 1024 / 1024)),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Outgoing Traffic"),
|
||||
Cell::new(&format!("{} MB", server.0.outgoing_traffic.unwrap_or(0) / 1024 / 1024)),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Primary Disk Size"),
|
||||
Cell::new(&server.0.primary_disk_size.to_string()),
|
||||
]));
|
||||
table.add_row(Row::new(vec![
|
||||
Cell::new("Rescue Enabled"),
|
||||
Cell::new(&server.0.rescue_enabled.to_string()),
|
||||
]));
|
||||
|
||||
Ok(table.to_string())
|
||||
},
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user