From 66d57c99558ca14d9593d6dbfd5b0e8e5d59055d Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 5 Jan 2023 20:10:54 +0000 Subject: [PATCH 01/19] chore: dependencies updated --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2776d80..7bca405 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -558,7 +558,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "oxker" -version = "0.1.10" +version = "0.1.11" dependencies = [ "anyhow", "bollard", @@ -949,9 +949,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.23.0" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +checksum = "7125661431c26622a80ca5051a2f936c9a678318e0351007b0cc313143024e5c" dependencies = [ "autocfg", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 5eb5908..558c080 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ clap={version="4.0", features = ["derive", "unicode", "color"] } crossterm = "0.25" futures-util = "0.3" parking_lot = {version= "0.12"} -tokio = {version = "1.23", features=["full"]} +tokio = {version = "1.24", features=["full"]} tracing = "0.1" tracing-subscriber = "0.3" tui = "0.19" From d880b829c123dbe57deccadef97810e45c083737 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sun, 8 Jan 2023 18:24:49 +0000 Subject: [PATCH 02/19] chore: dependencies updated --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7bca405..ade95d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -949,9 +949,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.24.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7125661431c26622a80ca5051a2f936c9a678318e0351007b0cc313143024e5c" +checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" dependencies = [ "autocfg", "bytes", @@ -1058,9 +1058,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tui" From 8cd199db49186fad6ce432bb277e3a10f0a08d34 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 14 Jan 2023 17:58:44 +0000 Subject: [PATCH 03/19] chore: dependencies updated --- Cargo.lock | 48 ++++++++++++++++++++++++------------------------ Cargo.toml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ade95d6..fe0cded 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,9 +96,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.0.32" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" +checksum = "4ec7a4128863c188deefe750ac1d1dfe66c236909f845af04beed823638dc1b2" dependencies = [ "bitflags", "clap_derive", @@ -113,9 +113,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.0.21" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" +checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" dependencies = [ "heck", "proc-macro-error", @@ -126,9 +126,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" dependencies = [ "os_str_bytes", ] @@ -437,9 +437,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" dependencies = [ "libc", "windows-sys", @@ -586,9 +586,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" dependencies = [ "cfg-if", "libc", @@ -1214,42 +1214,42 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" diff --git a/Cargo.toml b/Cargo.toml index 558c080..7278d36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ categories = ["command-line-utilities"] anyhow = "1.0" bollard = "0.13" cansi = "2.2" -clap={version="4.0", features = ["derive", "unicode", "color"] } +clap={version="4.1", features = ["derive", "unicode", "color"] } crossterm = "0.25" futures-util = "0.3" parking_lot = {version= "0.12"} From 0350293de3c00c6e5e5d787b7596bb3413d1cda1 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 14 Jan 2023 17:59:33 +0000 Subject: [PATCH 04/19] refactor: param reduction, AtomicBool to Relaxed --- src/docker_data/mod.rs | 6 +++--- src/input_handler/mod.rs | 4 ++-- src/ui/mod.rs | 15 ++++++--------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/docker_data/mod.rs b/src/docker_data/mod.rs index 7e89b90..5daa6c7 100644 --- a/src/docker_data/mod.rs +++ b/src/docker_data/mod.rs @@ -408,7 +408,7 @@ impl DockerData { .values() .into_iter() .for_each(tokio::task::JoinHandle::abort); - self.is_running.store(false, Ordering::SeqCst); + self.is_running.store(false, Ordering::Relaxed); } } } @@ -417,7 +417,7 @@ impl DockerData { /// Initialise self, and start the message receiving loop pub async fn init( app_data: Arc>, - docker: Arc, + docker: Docker, gui_state: Arc>, receiver: Receiver, is_running: Arc, @@ -427,7 +427,7 @@ impl DockerData { let mut inner = Self { app_data, args, - docker, + docker: Arc::new(docker), gui_state, initialised: false, receiver, diff --git a/src/input_handler/mod.rs b/src/input_handler/mod.rs index 93a3110..9d88df9 100644 --- a/src/input_handler/mod.rs +++ b/src/input_handler/mod.rs @@ -73,7 +73,7 @@ impl InputHandler { } } } - if !self.is_running.load(Ordering::SeqCst) { + if !self.is_running.load(Ordering::Relaxed) { break; } } @@ -134,7 +134,7 @@ impl InputHandler { .lock() .status_contains(&[Status::Error, Status::Init]); if error_init || self.docker_sender.send(DockerMessage::Quit).await.is_err() { - self.is_running.store(false, Ordering::SeqCst); + self.is_running.store(false, Ordering::Relaxed); } } diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 6632eac..40d917d 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -9,10 +9,7 @@ use std::{ io, sync::{atomic::Ordering, Arc}, }; -use std::{ - sync::atomic::AtomicBool, - time::{Duration, Instant}, -}; +use std::{sync::atomic::AtomicBool, time::Instant}; use tokio::sync::mpsc::Sender; use tui::{ backend::{Backend, CrosstermBackend}, @@ -38,7 +35,7 @@ pub async fn create_ui( is_running: Arc, gui_state: Arc>, docker_sx: Sender, - update_duration: Duration, + // update_duration: Duration, ) -> Result<()> { enable_raw_mode()?; let mut stdout = io::stdout(); @@ -53,7 +50,6 @@ pub async fn create_ui( is_running, gui_state, docker_sx, - update_duration, ) .await; terminal.clear()?; @@ -80,15 +76,16 @@ async fn run_app( is_running: Arc, gui_state: Arc>, docker_sx: Sender, - update_duration: Duration, ) -> Result<(), AppError> { + let update_duration = + std::time::Duration::from_millis(u64::from(app_data.lock().args.docker_interval)); let input_poll_rate = std::time::Duration::from_millis(75); let status_dockerconnect = gui_state.lock().status_contains(&[Status::DockerConnect]); if status_dockerconnect { let mut seconds = 5; loop { if seconds < 1 { - is_running.store(false, Ordering::SeqCst); + is_running.store(false, Ordering::Relaxed); break; } if terminal @@ -132,7 +129,7 @@ async fn run_app( now = Instant::now(); } - if !is_running.load(Ordering::SeqCst) { + if !is_running.load(Ordering::Relaxed) { break; } } From bd7dfcd2c512a527d66a1388f90006988a487186 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 14 Jan 2023 18:01:38 +0000 Subject: [PATCH 05/19] feat: align memory columns correctly, closes #20 use kB as minimum bytestats unit, screenshot updated --- .github/screenshot_01.png | Bin 109975 -> 108732 bytes src/app_data/container_state.rs | 23 +++++++++-------- src/app_data/mod.rs | 16 ++++++------ src/main.rs | 42 +++++++++----------------------- src/ui/draw_blocks.rs | 32 ++++++++++++------------ 5 files changed, 47 insertions(+), 66 deletions(-) diff --git a/.github/screenshot_01.png b/.github/screenshot_01.png index edcb52a23575267621f8e0a9f6470ef868a183ae..f45fffc232234baa4303c8d3acd1b0378b59756b 100644 GIT binary patch literal 108732 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

Qk{V=`JYQ5Ktp2X6E+>vAPreC2y@w4R^g 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 jS6yff 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 diff --git a/src/app_data/container_state.rs b/src/app_data/container_state.rs index de271c8..f759867 100644 --- a/src/app_data/container_state.rs +++ b/src/app_data/container_state.rs @@ -343,8 +343,7 @@ impl fmt::Display for ByteStats { let p = match as_f64 { x if x >= ONE_GB => format!("{y:.2} GB", y = as_f64 / ONE_GB), x if x >= ONE_MB => format!("{y:.2} MB", y = as_f64 / ONE_MB), - x if x >= ONE_KB => format!("{y:.2} kB", y = as_f64 / ONE_KB), - _ => format!("{} B", self.0), + _ => format!("{y:.2} kB", y = as_f64 / ONE_KB), }; write!(f, "{p:>x$}", x = f.width().unwrap_or(1)) } @@ -463,15 +462,15 @@ impl ContainerItem { /// Container information panel headings + widths, for nice pretty formatting #[derive(Debug, Clone, Copy)] pub struct Columns { - pub state: (Header, usize), - pub status: (Header, usize), - pub cpu: (Header, usize), - pub mem: (Header, usize), - pub id: (Header, usize), - pub name: (Header, usize), - pub image: (Header, usize), - pub net_rx: (Header, usize), - pub net_tx: (Header, usize), + pub state: (Header, u8), + pub status: (Header, u8), + pub cpu: (Header, u8), + pub mem: (Header, u8, u8), + pub id: (Header, u8), + pub name: (Header, u8), + pub image: (Header, u8), + pub net_rx: (Header, u8), + pub net_tx: (Header, u8), } impl Columns { @@ -482,7 +481,7 @@ impl Columns { status: (Header::Status, 16), // 7 to allow for "100.00%" cpu: (Header::Cpu, 7), - mem: (Header::Memory, 12), + mem: (Header::Memory, 6, 6), id: (Header::Id, 8), name: (Header::Name, 4), image: (Header::Image, 5), diff --git a/src/app_data/mod.rs b/src/app_data/mod.rs index 8b92466..94e5850 100644 --- a/src/app_data/mod.rs +++ b/src/app_data/mod.rs @@ -364,7 +364,7 @@ impl AppData { /// So can display nicely and evenly pub fn get_width(&self) -> Columns { let mut output = Columns::new(); - let count = |x: &String| x.chars().count(); + let count = |x: &String| u8::try_from(x.chars().count()).unwrap_or(12); // Should probably find a refactor here somewhere for container in &self.containers.items { @@ -375,11 +375,6 @@ impl AppData { .unwrap_or(&CpuStats::default()) .to_string(), ); - let mem_count = count(&format!( - "{} / {}", - container.mem_stats.back().unwrap_or(&ByteStats::default()), - container.mem_limit - )); let rx_count = count(&container.rx.to_string()); let tx_count = count(&container.tx.to_string()); @@ -387,6 +382,8 @@ impl AppData { let name_count = count(&container.name); let state_count = count(&container.state.to_string()); let status_count = count(&container.status); + let mem_current_count = count(&container.mem_stats.back().unwrap_or(&ByteStats::default()).to_string()); + let mem_limit_count= count(&container.mem_limit.to_string()); if cpu_count > output.cpu.1 { output.cpu.1 = cpu_count; @@ -394,8 +391,11 @@ impl AppData { if image_count > output.image.1 { output.image.1 = image_count; }; - if mem_count > output.mem.1 { - output.mem.1 = mem_count; + if mem_current_count > output.mem.1 { + output.mem.1 = mem_current_count; + }; + if mem_limit_count > output.mem.2 { + output.mem.2 = mem_limit_count; }; if name_count > output.name.1 { output.name.1 = name_count; diff --git a/src/main.rs b/src/main.rs index d040339..996b0f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,61 +40,43 @@ async fn main() { let app_data = Arc::new(Mutex::new(AppData::default(args))); let gui_state = Arc::new(Mutex::new(GuiState::default())); let is_running = Arc::new(AtomicBool::new(true)); - - let docker_app_data = Arc::clone(&app_data); - let docker_gui_state = Arc::clone(&gui_state); - let (docker_sx, docker_rx) = tokio::sync::mpsc::channel(16); + let (input_sx, input_rx) = tokio::sync::mpsc::channel(16); // Create docker daemon handler, and only spawn up the docker data handler if ping returns non-error if let Ok(docker) = Docker::connect_with_socket_defaults() { if docker.ping().await.is_ok() { - let docker = Arc::new(docker); + let app_data = Arc::clone(&app_data); + let gui_state = Arc::clone(&gui_state); let is_running = Arc::clone(&is_running); tokio::spawn(DockerData::init( - docker_app_data, - docker, - docker_gui_state, - docker_rx, - is_running, + app_data, docker, gui_state, docker_rx, is_running, )); } else { app_data.lock().set_error(AppError::DockerConnect); - docker_gui_state.lock().status_push(Status::DockerConnect); + gui_state.lock().status_push(Status::DockerConnect); } } else { app_data.lock().set_error(AppError::DockerConnect); - docker_gui_state.lock().status_push(Status::DockerConnect); + gui_state.lock().status_push(Status::DockerConnect); } + let input_app_data = Arc::clone(&app_data); - - let (input_sx, input_rx) = tokio::sync::mpsc::channel(16); - - let input_is_running = Arc::clone(&is_running); let input_gui_state = Arc::clone(&gui_state); - let input_docker_sender = docker_sx.clone(); - + let input_is_running = Arc::clone(&is_running); // Spawn input handling into own tokio thread tokio::spawn(input_handler::InputHandler::init( input_app_data, input_rx, - input_docker_sender, + docker_sx.clone(), input_gui_state, input_is_running, )); if args.gui { - let update_duration = std::time::Duration::from_millis(u64::from(args.docker_interval)); - create_ui( - app_data, - input_sx, - is_running, - gui_state, - docker_sx, - update_duration, - ) - .await - .unwrap_or(()); + create_ui(app_data, input_sx, is_running, gui_state, docker_sx) + .await + .unwrap_or(()); } else { // Debug mode for testing, mostly pointless, doesn't take terminal nor draw gui // TODO this needs to be improved to display something actually useful diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index fc7c317..14c060b 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -136,19 +136,19 @@ pub fn containers( let state_style = Style::default().fg(i.state.get_color()); let blue = Style::default().fg(Color::Blue); - let mems = format!( - "{:>1} / {:>1}", - i.mem_stats.back().unwrap_or(&ByteStats::default()), - i.mem_limit - ); + // let mems = format!( + // "{:>1} / {:>1}", + // i.mem_stats.back().unwrap_or(&ByteStats::default()), + // i.mem_limit + // ); let lines = Spans::from(vec![ Span::styled( - format!("{:width$}", i.status, width = &widths.status.1), + format!("{MARGIN}{:>width$}", i.status, width = &widths.status.1.into()), state_style, ), Span::styled( @@ -156,12 +156,12 @@ pub fn containers( "{}{:>width$}", MARGIN, i.cpu_stats.back().unwrap_or(&CpuStats::default()), - width = &widths.cpu.1 + width = &widths.cpu.1.into() ), state_style, ), Span::styled( - format!("{MARGIN}{mems:>width$}", width = &widths.mem.1), + format!("{MARGIN}{:>width_current$} / {:>width_limit$}", i.mem_stats.back().unwrap_or(&ByteStats::default()), i.mem_limit, width_current = &widths.mem.1.into(), width_limit = &widths.mem.2.into()), state_style, ), Span::styled( @@ -169,24 +169,24 @@ pub fn containers( "{}{:>width$}", MARGIN, i.id.get().chars().take(8).collect::(), - width = &widths.id.1 + width = &widths.id.1.into() ), blue, ), Span::styled( - format!("{MARGIN}{:>width$}", i.name, width = widths.name.1), + format!("{MARGIN}{:>width$}", i.name, width = widths.name.1.into()), blue, ), Span::styled( - format!("{MARGIN}{:>width$}", i.image, width = widths.image.1), + format!("{MARGIN}{:>width$}", i.image, width = widths.image.1.into()), blue, ), Span::styled( - format!("{MARGIN}{:>width$}", i.rx, width = widths.net_rx.1), + format!("{MARGIN}{:>width$}", i.rx, width = widths.net_rx.1.into()), Style::default().fg(Color::Rgb(255, 233, 193)), ), Span::styled( - format!("{MARGIN}{:>width$}", i.tx, width = widths.net_tx.1), + format!("{MARGIN}{:>width$}", i.tx, width = widths.net_tx.1.into()), Style::default().fg(Color::Rgb(205, 140, 140)), ), ]); @@ -415,7 +415,7 @@ pub fn heading_bar( (Header::State, columns.state.1), (Header::Status, columns.status.1), (Header::Cpu, columns.cpu.1), - (Header::Memory, columns.mem.1), + (Header::Memory, columns.mem.1 + columns.mem.2 + 3), (Header::Id, columns.id.1), (Header::Name, columns.name.1), (Header::Image, columns.image.1), @@ -426,7 +426,7 @@ pub fn heading_bar( let header_data = header_meta .iter() .map(|i| { - let header_block = gen_header(&i.0, i.1); + let header_block = gen_header(&i.0, i.1.into()); (header_block.0, i.0, Constraint::Max(header_block.1)) }) .collect::>(); From 33f9374908942f4a3b90be227fad94ca353cf351 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 01:58:12 +0000 Subject: [PATCH 06/19] chore: dependencies updated --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe0cded..8ec59a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -667,9 +667,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" dependencies = [ "unicode-ident", ] @@ -896,9 +896,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -949,9 +949,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.24.1" +version = "1.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" +checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb" dependencies = [ "autocfg", "bytes", From 9a27d46a044452080144ee1367dc95886b10abf8 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 01:58:34 +0000 Subject: [PATCH 07/19] chore: create_release.sh typos --- create_release.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/create_release.sh b/create_release.sh index 64e5193..f04c721 100755 --- a/create_release.sh +++ b/create_release.sh @@ -105,11 +105,11 @@ update_release_body_and_changelog () { # Update changelog to add links to commits [hex:8](url_with_full_commit) # "[aaaaaaaaaabbbbbbbbbbccccccccccddddddddd]" -> "[aaaaaaaa](https:/www.../commit/aaaaaaaaaabbbbbbbbbbccccccccccddddddddd)" - sed -i -E "s=(\s)\[([0-9a-f]{8})([0-9a-f]{32})\]= [\2](${GIT_REPO_URL}/commit/\2\3)=g" ./CHANGELOG.md + sed -i -E "s=(\s)\[([0-9a-f]{8})([0-9a-f]{32})\]= [\2](${GIT_REPO_URL}/commit/\2\3)=g" CHANGELOG.md - # Update changelog to add links to closed issues - comma included! - # "closes #1" -> "closes [#1](https:/www.../issues/1),"" - sed -i -r -E "s=closes \#([0-9]+)=closes [#\1](${GIT_REPO_URL}/issues/\1)=g" ./CHANGELOG.md + # Update changelog to add links to closed issues + # "closes #1" -> "closes [#1](https:/www.../issues/1)"" + sed -i -r -E "s=closes \#([0-9]+)=closes [#\1](${GIT_REPO_URL}/issues/\1)=g" CHANGELOG.md } # update version in cargo.toml, to match selected current version From 2d253f034182741d434e4bac12317f24221d0d4a Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 01:58:53 +0000 Subject: [PATCH 08/19] chore: dev container post create install cross --- .devcontainer/devcontainer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d4f7835..0efedc9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -16,6 +16,8 @@ "seccomp=unconfined" ], + "postCreateCommand": "cargo install cross", + "mounts": [ "source=/etc/timezone,target=/etc/timezone,type=bind,readonly" ], From 9dcd0509efeb464f58fb53d813bd78de2447949d Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:01:01 +0000 Subject: [PATCH 09/19] refactor: derive Default for GuiState --- src/ui/gui_state.rs | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/ui/gui_state.rs b/src/ui/gui_state.rs index bc83f81..1c197ef 100644 --- a/src/ui/gui_state.rs +++ b/src/ui/gui_state.rs @@ -7,8 +7,9 @@ use uuid::Uuid; use crate::app_data::Header; -#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)] +#[derive(Debug, Default, Clone, Copy, Eq, Hash, PartialEq)] pub enum SelectablePanel { + #[default] Containers, Commands, Logs, @@ -124,8 +125,9 @@ impl BoxLocation { } /// State for the loading animation -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Default, Clone, Copy)] pub enum Loading { + #[default] One, Two, Three, @@ -184,7 +186,7 @@ pub enum Status { } /// Global gui_state, stored in an Arc -#[derive(Debug, Clone)] +#[derive(Debug, Default, Clone)] pub struct GuiState { panel_map: HashMap, heading_map: HashMap, @@ -195,19 +197,6 @@ pub struct GuiState { pub info_box_text: Option, } impl GuiState { - /// Generate a default gui_state - pub fn default() -> Self { - Self { - panel_map: HashMap::new(), - heading_map: HashMap::new(), - loading_icon: Loading::One, - selected_panel: SelectablePanel::Containers, - is_loading: HashSet::new(), - info_box_text: None, - status: HashSet::new(), - } - } - /// Clear panels hash map, so on resize can fix the sizes for mouse clicks pub fn clear_area_map(&mut self) { self.panel_map.clear(); @@ -257,12 +246,12 @@ impl GuiState { status.iter().any(|i| self.status.contains(i)) } - /// Remove a gui_status into the current gui_status hashset + /// Remove a gui_status into the current gui_status HashSet pub fn status_del(&mut self, status: Status) { self.status.remove(&status); } - /// Insert a gui_status into the current gui_status hashset + /// Insert a gui_status into the current gui_status HashSet pub fn status_push(&mut self, status: Status) { self.status.insert(status); } @@ -277,7 +266,7 @@ impl GuiState { self.selected_panel = self.selected_panel.prev(); } - /// Insert a new loading_uuid into hashset, and advance the animation by one frame + /// Insert a new loading_uuid into HashSet, and advance the animation by one frame pub fn next_loading(&mut self, uuid: Uuid) { self.loading_icon = self.loading_icon.next(); self.is_loading.insert(uuid); @@ -292,7 +281,7 @@ impl GuiState { } } - /// Remove a loading_uuid from the is_loading hashset + /// Remove a loading_uuid from the is_loading HashSet pub fn remove_loading(&mut self, uuid: Uuid) { self.is_loading.remove(&uuid); } From 9ec43e124a62a80f4e78acba85fc3af5980ce260 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:01:56 +0000 Subject: [PATCH 10/19] feat: spawn docker exec commands into own thread --- src/docker_data/mod.rs | 169 +++++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 83 deletions(-) diff --git a/src/docker_data/mod.rs b/src/docker_data/mod.rs index 5daa6c7..c700654 100644 --- a/src/docker_data/mod.rs +++ b/src/docker_data/mod.rs @@ -3,7 +3,7 @@ use bollard::{ service::ContainerSummary, Docker, }; -use futures_util::{Future, StreamExt}; +use futures_util::StreamExt; use parking_lot::Mutex; use std::{ collections::HashMap, @@ -33,7 +33,7 @@ enum SpawnId { /// Cpu & Mem stats take twice as long as the update interval to get a value, so will have two being executed at the same time /// SpawnId::Stats takes container_id and binate value to enable both cycles of the same container_id to be inserted into the hashmap -/// Binate value is toggled when all join handles have been spawned off +/// Binate value is toggled when all handles have been spawned off /// Also effectively means that if the docker_update interval minimum will be 1000ms #[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)] enum Binate { @@ -56,7 +56,6 @@ pub struct DockerData { binate: Binate, docker: Arc, gui_state: Arc>, - initialised: bool, is_running: Arc, receiver: Receiver, spawns: Arc>>>, @@ -94,12 +93,12 @@ impl DockerData { /// don't take &self, so that can tokio::spawn into it's own thread /// remove if from spawns hashmap when complete async fn update_container_stat( + app_data: Arc>, docker: Arc, id: ContainerId, - app_data: Arc>, is_running: bool, - spawns: Arc>>>, spawn_id: SpawnId, + spawns: Arc>>>, ) { let mut stream = docker .stats( @@ -156,18 +155,18 @@ impl DockerData { let docker = Arc::clone(&self.docker); let app_data = Arc::clone(&self.app_data); let spawns = Arc::clone(&self.spawns); - let spawn_key = SpawnId::Stats((id.clone(), self.binate)); + let spawn_id = SpawnId::Stats((id.clone(), self.binate)); self.spawns .lock() - .entry(spawn_key.clone()) + .entry(spawn_id.clone()) .or_insert_with(|| { tokio::spawn(Self::update_container_stat( + app_data, docker, id.clone(), - app_data, *is_running, + spawn_id, spawns, - spawn_key, )) }); } @@ -223,19 +222,17 @@ impl DockerData { } /// Update single container logs - /// don't take &self, so that can tokio::spawn into it's own thread - /// remove if from spawns hashmap when complete + /// remove it from spawns hashmap when complete async fn update_log( + app_data: Arc>, docker: Arc, id: ContainerId, - timestamps: bool, since: u64, - app_data: Arc>, spawns: Arc>>>, ) { let options = Some(LogsOptions:: { stdout: true, - timestamps, + timestamps: true, since: i64::try_from(since).unwrap_or_default(), ..Default::default() }); @@ -243,16 +240,14 @@ impl DockerData { let mut logs = docker.logs(id.get(), options); let mut output = vec![]; - while let Some(value) = logs.next().await { - if let Ok(data) = value { - let log_string = data.to_string(); - if !log_string.trim().is_empty() { - output.push(log_string); - } + while let Some(Ok(value)) = logs.next().await { + let data = value.to_string(); + if !data.trim().is_empty() { + output.push(data); } } spawns.lock().remove(&SpawnId::Log(id.clone())); - app_data.lock().update_log_by_id(&output, &id); + app_data.lock().update_log_by_id(output, &id); } /// Update all logs, spawn each container into own tokio::spawn thread @@ -264,14 +259,7 @@ impl DockerData { let key = SpawnId::Log(id.clone()); self.spawns.lock().insert( key, - tokio::spawn(Self::update_log( - docker, - id.clone(), - self.args.timestamp, - 0, - app_data, - spawns, - )), + tokio::spawn(Self::update_log(app_data, docker, id.clone(), 0, spawns)), ); } } @@ -290,11 +278,10 @@ impl DockerData { let app_data = Arc::clone(&self.app_data); let spawns = Arc::clone(&self.spawns); tokio::spawn(Self::update_log( + app_data, docker, container.id.clone(), - self.args.timestamp, container.last_updated, - app_data, spawns, )) }); @@ -305,8 +292,8 @@ impl DockerData { } /// Animate the loading icon - async fn loading_spin(&mut self, loading_uuid: Uuid) -> JoinHandle<()> { - let gui_state = Arc::clone(&self.gui_state); + async fn loading_spin(loading_uuid: Uuid, gui_state: &Arc>) -> JoinHandle<()> { + let gui_state = Arc::clone(&gui_state); tokio::spawn(async move { loop { tokio::time::sleep(std::time::Duration::from_millis(100)).await; @@ -316,89 +303,106 @@ impl DockerData { } /// Stop the loading_spin function, and reset gui loading status - fn stop_loading_spin(&mut self, handle: &JoinHandle<()>, loading_uuid: Uuid) { + fn stop_loading_spin( + gui_state: &Arc>, + handle: &JoinHandle<()>, + loading_uuid: Uuid, + ) { handle.abort(); - self.gui_state.lock().remove_loading(loading_uuid); + gui_state.lock().remove_loading(loading_uuid); } /// Initialize docker container data, before any messages are received async fn initialise_container_data(&mut self) { self.gui_state.lock().status_push(Status::Init); let loading_uuid = Uuid::new_v4(); - let loading_spin = self.loading_spin(loading_uuid).await; + let loading_spin = Self::loading_spin(loading_uuid, &Arc::clone(&self.gui_state)).await; let all_ids = self.update_all_containers().await; self.update_all_container_stats(&all_ids); - // Maybe only do a single one at first? self.init_all_logs(&all_ids); - if all_ids.is_empty() { - self.initialised = true; - } - // wait until all logs have initialised - while !self.initialised { + while !self.app_data.lock().initialised(&all_ids) { tokio::time::sleep(std::time::Duration::from_millis(100)).await; - self.initialised = self.app_data.lock().initialised(&all_ids); } self.gui_state.lock().status_del(Status::Init); - self.stop_loading_spin(&loading_spin, loading_uuid); + Self::stop_loading_spin(&self.gui_state, &loading_spin, loading_uuid); } /// Set the global error as the docker error, and set gui_state to error - fn set_error(&mut self, error: DockerControls) { - self.app_data - .lock() - .set_error(AppError::DockerCommand(error)); - self.gui_state.lock().status_push(Status::Error); - } - - /// Execute a docker command, will start and stop the loading spinner, and set correct error - async fn exec_docker( - &mut self, - docker_fn: impl Future> + Send, - control: DockerControls, + fn set_error( + app_data: &Arc>, + error: DockerControls, + gui_state: &Arc>, ) { - let uuid = Uuid::new_v4(); - let loading_spin = self.loading_spin(uuid).await; - if docker_fn.await.is_err() { - self.set_error(control); - }; - self.stop_loading_spin(&loading_spin, uuid); + app_data.lock().set_error(AppError::DockerCommand(error)); + gui_state.lock().status_push(Status::Error); } /// Handle incoming messages, container controls & all container information update + /// Spawn dowcker commands off into own thread async fn message_handler(&mut self) { while let Some(message) = self.receiver.recv().await { let docker = Arc::clone(&self.docker); + let gui_state = Arc::clone(&self.gui_state); + let app_data = Arc::clone(&self.app_data); + let uuid = Uuid::new_v4(); match message { DockerMessage::Pause(id) => { - self.exec_docker(docker.pause_container(id.get()), DockerControls::Pause) - .await; + tokio::spawn(async move { + let loading_spin = Self::loading_spin(uuid, &gui_state).await; + if docker.pause_container(id.get()).await.is_err() { + Self::set_error(&app_data, DockerControls::Pause, &gui_state); + } + Self::stop_loading_spin(&gui_state, &loading_spin, uuid); + }); + self.update_everything().await; } DockerMessage::Restart(id) => { - self.exec_docker( - docker.restart_container(id.get(), None), - DockerControls::Restart, - ) - .await; + tokio::spawn(async move { + let loading_spin = Self::loading_spin(uuid, &gui_state).await; + if docker.restart_container(id.get(), None).await.is_err() { + Self::set_error(&app_data, DockerControls::Restart, &gui_state); + } + Self::stop_loading_spin(&gui_state, &loading_spin, uuid); + }); + self.update_everything().await; } DockerMessage::Start(id) => { - self.exec_docker( - docker.start_container(id.get(), None::>), - DockerControls::Start, - ) - .await; + tokio::spawn(async move { + let loading_spin = Self::loading_spin(uuid, &gui_state).await; + if docker + .start_container(id.get(), None::>) + .await + .is_err() + { + Self::set_error(&app_data, DockerControls::Start, &gui_state); + } + Self::stop_loading_spin(&gui_state, &loading_spin, uuid); + }); + self.update_everything().await; } DockerMessage::Stop(id) => { - self.exec_docker(docker.stop_container(id.get(), None), DockerControls::Stop) - .await; + tokio::spawn(async move { + let loading_spin = Self::loading_spin(uuid, &gui_state).await; + if docker.stop_container(id.get(), None).await.is_err() { + Self::set_error(&app_data, DockerControls::Stop, &gui_state); + } + Self::stop_loading_spin(&gui_state, &loading_spin, uuid); + }); + self.update_everything().await; } DockerMessage::Unpause(id) => { - self.exec_docker(docker.unpause_container(id.get()), DockerControls::Unpause) - .await; + tokio::spawn(async move { + let loading_spin = Self::loading_spin(uuid, &gui_state).await; + if docker.unpause_container(id.get()).await.is_err() { + Self::set_error(&app_data, DockerControls::Unpause, &gui_state); + } + Self::stop_loading_spin(&gui_state, &loading_spin, uuid); + }); self.update_everything().await; } DockerMessage::Update => self.update_everything().await, @@ -418,8 +422,8 @@ impl DockerData { pub async fn init( app_data: Arc>, docker: Docker, + docker_rx: Receiver, gui_state: Arc>, - receiver: Receiver, is_running: Arc, ) { let args = app_data.lock().args; @@ -427,13 +431,12 @@ impl DockerData { let mut inner = Self { app_data, args, + binate: Binate::One, docker: Arc::new(docker), gui_state, - initialised: false, - receiver, - spawns: Arc::new(Mutex::new(HashMap::new())), is_running, - binate: Binate::One, + receiver: docker_rx, + spawns: Arc::new(Mutex::new(HashMap::new())), }; inner.initialise_container_data().await; From 657ea2d751a71f05b17547b47c492d5676817336 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:04:44 +0000 Subject: [PATCH 11/19] feat: Logs in own struct Store the logs, and timestamp into a hashset, so that won't push data into the vec if it's already in the hashset, close #11 --- src/app_data/container_state.rs | 100 +++++++++++++++++++++++++++++--- src/app_data/mod.rs | 51 +++++++++------- 2 files changed, 121 insertions(+), 30 deletions(-) diff --git a/src/app_data/container_state.rs b/src/app_data/container_state.rs index f759867..efa2d81 100644 --- a/src/app_data/container_state.rs +++ b/src/app_data/container_state.rs @@ -1,4 +1,8 @@ -use std::{cmp::Ordering, collections::VecDeque, fmt}; +use std::{ + cmp::Ordering, + collections::{HashSet, VecDeque}, + fmt, +}; use tui::{ style::Color, @@ -352,6 +356,87 @@ impl fmt::Display for ByteStats { pub type MemTuple = (Vec<(f64, f64)>, ByteStats, State); pub type CpuTuple = (Vec<(f64, f64)>, CpuStats, State); +/// Used to make sure that each log entry, for each container, is unique, +/// will only push a log entry into the logs vec if timetstamp of said log entry isn't in the hashset +#[derive(Debug, Clone, Hash, PartialEq, Eq)] +pub struct LogsTz(String); + +/// The docker log, which should always contain a timestamp, is in the format `2023-01-14T19:13:30.783138328Z Lorem ipsum dolor sit amet` +/// So just split at the inclusive index of the first space, needs to be inclusive, hence the use of format to at the space, so that we can remove the whole thing when the `-t` flag is set +/// Need to make sure that this isn't an empty string?! +impl From<&String> for LogsTz { + fn from(value: &String) -> Self { + Self(value.split_inclusive(' ').take(1).collect::()) + } +} + +impl fmt::Display for LogsTz { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.0) + } +} + +/// Store the logs alongside a HashSet, each log *should* generate a unique timestamp, +/// so if we store the timestamp seperately in a HashSet, we can then check if we should insert a log line into the +/// stateful list dependant on whethere the timestamp is in the HashSet or not +#[derive(Debug, Clone)] +pub struct Logs { + logs: StatefulList>, + tz: HashSet, +} + +impl Default for Logs { + fn default() -> Self { + let mut logs = StatefulList::new(vec![]); + logs.end(); + Self { + logs, + tz: HashSet::new(), + } + } +} + +impl Logs { + /// Only allow a new log line to be inserted if the log timestamp isn't in the tz HashSet + pub fn insert(&mut self, line: ListItem<'static>, tz: LogsTz) { + if self.tz.insert(tz) { + self.logs.items.push(line); + }; + } + + pub fn to_vec(&self) -> Vec> { + self.logs.items.clone() + } + + /// The rest of the methods are basically forwarding from the underlying StatefulList + pub fn get_state_title(&self) -> String { + self.logs.get_state_title() + } + + pub fn next(&mut self) { + self.logs.next(); + } + + pub fn previous(&mut self) { + self.logs.previous(); + } + + pub fn end(&mut self) { + self.logs.end(); + } + pub fn start(&mut self) { + self.logs.start(); + } + + pub fn len(&self) -> usize { + self.logs.items.len() + } + + pub fn state(&mut self) -> &mut ListState { + &mut self.logs.state + } +} + /// Info for each container #[derive(Debug, Clone)] pub struct ContainerItem { @@ -361,7 +446,7 @@ pub struct ContainerItem { pub id: ContainerId, pub image: String, pub last_updated: u64, - pub logs: StatefulList>, + pub logs: Logs, pub mem_limit: ByteStats, pub mem_stats: VecDeque, pub name: String, @@ -385,8 +470,6 @@ impl ContainerItem { ) -> Self { let mut docker_controls = StatefulList::new(DockerControls::gen_vec(state)); docker_controls.start(); - let mut logs = StatefulList::new(vec![]); - logs.end(); Self { created, cpu_stats: VecDeque::with_capacity(60), @@ -395,7 +478,7 @@ impl ContainerItem { image, is_oxker, last_updated: 0, - logs, + logs: Logs::default(), mem_limit: ByteStats::default(), mem_stats: VecDeque::with_capacity(60), name, @@ -479,14 +562,13 @@ impl Columns { Self { state: (Header::State, 11), status: (Header::Status, 16), - // 7 to allow for "100.00%" cpu: (Header::Cpu, 7), - mem: (Header::Memory, 6, 6), + mem: (Header::Memory, 7, 7), id: (Header::Id, 8), name: (Header::Name, 4), image: (Header::Image, 5), - net_rx: (Header::Rx, 5), - net_tx: (Header::Tx, 5), + net_rx: (Header::Rx, 7), + net_tx: (Header::Tx, 7), } } } diff --git a/src/app_data/mod.rs b/src/app_data/mod.rs index 94e5850..fc106f4 100644 --- a/src/app_data/mod.rs +++ b/src/app_data/mod.rs @@ -12,7 +12,6 @@ pub use container_state::*; #[derive(Debug, Clone)] pub struct AppData { error: Option, - logs_parsed: bool, sorted_by: Option<(Header, SortedOrder)>, pub args: CliArgs, pub containers: StatefulList, @@ -62,7 +61,6 @@ impl AppData { args, containers: StatefulList::new(vec![]), error: None, - logs_parsed: false, sorted_by: None, } } @@ -193,7 +191,7 @@ impl AppData { /// Check if the selected container is a dockerised version of oxker /// So that can disallow commands to be send - /// Is a poor way of implementing this + /// Is a shabby way of implementing this pub fn selected_container_is_oxker(&self) -> bool { if let Some(index) = self.containers.state.selected() { if let Some(x) = self.containers.items.get(index) { @@ -352,7 +350,7 @@ impl AppData { .iter() .filter(|i| !i.cpu_stats.is_empty()) .count(); - self.logs_parsed && count_is_running == number_with_cpu_status + count_is_running == number_with_cpu_status } /// Just get the total number of containers @@ -382,8 +380,14 @@ impl AppData { let name_count = count(&container.name); let state_count = count(&container.state.to_string()); let status_count = count(&container.status); - let mem_current_count = count(&container.mem_stats.back().unwrap_or(&ByteStats::default()).to_string()); - let mem_limit_count= count(&container.mem_limit.to_string()); + let mem_current_count = count( + &container + .mem_stats + .back() + .unwrap_or(&ByteStats::default()) + .to_string(), + ); + let mem_limit_count = count(&container.mem_limit.to_string()); if cpu_count > output.cpu.1 { output.cpu.1 = cpu_count; @@ -394,7 +398,7 @@ impl AppData { if mem_current_count > output.mem.1 { output.mem.1 = mem_current_count; }; - if mem_limit_count > output.mem.2 { + if mem_limit_count > output.mem.2 { output.mem.2 = mem_limit_count; }; if name_count > output.name.1 { @@ -548,8 +552,8 @@ impl AppData { if item.image != image { item.image = image; }; - // else container not known, so make new ContainerItem and push into containers Vec } else { + // container not known, so make new ContainerItem and push into containers Vec let container = ContainerItem::new(created, id, image, is_oxker, name, state, status); self.containers.items.push(container); @@ -559,34 +563,39 @@ impl AppData { } /// update logs of a given container, based on id - pub fn update_log_by_id(&mut self, output: &[String], id: &ContainerId) { - let tz = Self::get_systemtime(); + pub fn update_log_by_id(&mut self, output: Vec, id: &ContainerId) { let color = self.args.color; let raw = self.args.raw; - if let Some(container) = self.get_container_by_id(id) { - container.last_updated = tz; - let current_len = container.logs.items.len(); + let timestamp = self.args.timestamp; - for i in output { + if let Some(container) = self.get_container_by_id(id) { + container.last_updated = Self::get_systemtime(); + let current_len = container.logs.len(); + + for mut i in output { + let tz = LogsTz::from(&i); + // Strip the timestamp if `-t` flag set + if !timestamp { + i = i.replace(&tz.to_string(), ""); + } let lines = if color { - log_sanitizer::colorize_logs(i) + log_sanitizer::colorize_logs(&i) } else if raw { - log_sanitizer::raw(i) + log_sanitizer::raw(&i) } else { - log_sanitizer::remove_ansi(i) + log_sanitizer::remove_ansi(&i) }; - container.logs.items.push(ListItem::new(lines)); + container.logs.insert(ListItem::new(lines), tz); } // Set the logs selected row for each container // Either when no long currently selected, or currently selected (before updated) is already at end - if container.logs.state.selected().is_none() - || container.logs.state.selected().map_or(1, |f| f + 1) == current_len + if container.logs.state().selected().is_none() + || container.logs.state().selected().map_or(1, |f| f + 1) == current_len { container.logs.end(); } } - self.logs_parsed = true; } } From 97b89349dc2de275ca514a1e6420255a63d775e8 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:05:00 +0000 Subject: [PATCH 12/19] refactor: main.rs tidy up --- src/main.rs | 105 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 38 deletions(-) diff --git a/src/main.rs b/src/main.rs index 996b0f8..4e107cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,13 @@ #![forbid(unsafe_code)] #![warn(clippy::unused_async, clippy::unwrap_used, clippy::expect_used)] // Wanring - These are indeed pedantic -// #![warn(clippy::pedantic)] -// #![warn(clippy::nursery)] -// #![allow(clippy::module_name_repetitions, clippy::doc_markdown, clippy::similar_names)] - +#![warn(clippy::pedantic)] +#![warn(clippy::nursery)] +#![allow( + clippy::module_name_repetitions, + clippy::doc_markdown, + clippy::similar_names +)] // Only allow when debugging // #![allow(unused)] @@ -12,9 +15,11 @@ use app_data::AppData; use app_error::AppError; use bollard::Docker; use docker_data::DockerData; +use input_handler::InputMessages; use parking_lot::Mutex; use parse_args::CliArgs; use std::sync::{atomic::AtomicBool, Arc}; +use tokio::sync::mpsc::{Receiver, Sender}; use tracing::{info, Level}; mod app_data; @@ -26,11 +31,58 @@ mod ui; use ui::{create_ui, GuiState, Status}; +use crate::docker_data::DockerMessage; + const ENTRY_POINT: &str = "./start_oxker.sh"; +// write to file if `-g` is set? fn setup_tracing() { tracing_subscriber::fmt().with_max_level(Level::INFO).init(); - // TODO write to file? +} + +// Create docker daemon handler, and only spawn up the docker data handler if a ping returns non-error +async fn docker_init( + app_data: &Arc>, + docker_rx: Receiver, + gui_state: &Arc>, + is_running: &Arc, +) { + if let Ok(docker) = Docker::connect_with_socket_defaults() { + if docker.ping().await.is_ok() { + let app_data = Arc::clone(&app_data); + let gui_state = Arc::clone(&gui_state); + let is_running = Arc::clone(&is_running); + tokio::spawn(DockerData::init( + app_data, docker, docker_rx, gui_state, is_running, + )); + } else { + app_data.lock().set_error(AppError::DockerConnect); + gui_state.lock().status_push(Status::DockerConnect); + } + } else { + app_data.lock().set_error(AppError::DockerConnect); + gui_state.lock().status_push(Status::DockerConnect); + } +} + +/// Create data for, and then spawn a tokio thread, for the input handler +async fn handler_init( + app_data: &Arc>, + docker_sx: &Sender, + gui_state: &Arc>, + input_rx: Receiver, + is_running: &Arc, +) { + let input_app_data = Arc::clone(&app_data); + let input_gui_state = Arc::clone(&gui_state); + let input_is_running = Arc::clone(&is_running); + tokio::spawn(input_handler::InputHandler::init( + input_app_data, + input_rx, + docker_sx.clone(), + input_gui_state, + input_is_running, + )); } #[tokio::main] @@ -43,46 +95,23 @@ async fn main() { let (docker_sx, docker_rx) = tokio::sync::mpsc::channel(16); let (input_sx, input_rx) = tokio::sync::mpsc::channel(16); - // Create docker daemon handler, and only spawn up the docker data handler if ping returns non-error - if let Ok(docker) = Docker::connect_with_socket_defaults() { - if docker.ping().await.is_ok() { - let app_data = Arc::clone(&app_data); - let gui_state = Arc::clone(&gui_state); - let is_running = Arc::clone(&is_running); - tokio::spawn(DockerData::init( - app_data, docker, gui_state, docker_rx, is_running, - )); - } else { - app_data.lock().set_error(AppError::DockerConnect); - gui_state.lock().status_push(Status::DockerConnect); - } - } else { - app_data.lock().set_error(AppError::DockerConnect); - gui_state.lock().status_push(Status::DockerConnect); - } + docker_init(&app_data, docker_rx, &gui_state, &is_running).await; - let input_app_data = Arc::clone(&app_data); - let input_gui_state = Arc::clone(&gui_state); - let input_is_running = Arc::clone(&is_running); - // Spawn input handling into own tokio thread - tokio::spawn(input_handler::InputHandler::init( - input_app_data, - input_rx, - docker_sx.clone(), - input_gui_state, - input_is_running, - )); + handler_init(&app_data, &docker_sx, &gui_state, input_rx, &is_running).await; if args.gui { - create_ui(app_data, input_sx, is_running, gui_state, docker_sx) + create_ui(app_data, docker_sx, gui_state, is_running, input_sx) .await .unwrap_or(()); } else { - // Debug mode for testing, mostly pointless, doesn't take terminal nor draw gui - // TODO this needs to be improved to display something actually useful + // Debug mode for testing, mostly pointless, doesn't take terminal + info!("in debug mode"); loop { - info!("in debug mode"); - tokio::time::sleep(std::time::Duration::from_millis(5000)).await; + docker_sx.send(DockerMessage::Update).await.unwrap_or(()); + tokio::time::sleep(std::time::Duration::from_millis(u64::from( + args.docker_interval, + ))) + .await; } } } From 51c580010a24de2427373795803936d498dc8cee Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:06:05 +0000 Subject: [PATCH 13/19] fix: memory column aligned, closes #20 --- src/ui/draw_blocks.rs | 47 +++++++++++++++++++++------------------- src/ui/mod.rs | 50 +++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 50 deletions(-) diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index 14c060b..6f48b2e 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -55,19 +55,22 @@ fn generate_block<'a>( .lock() .update_heading_map(Region::Panel(panel), area); let current_selected_panel = gui_state.lock().selected_panel; - let title = match panel { + let mut title = match panel { SelectablePanel::Containers => { format!( - " {} {} ", + "{} {}", panel.title(), app_data.lock().containers.get_state_title() ) } SelectablePanel::Logs => { - format!(" {} {} ", panel.title(), app_data.lock().get_log_title()) + format!("{} {}", panel.title(), app_data.lock().get_log_title()) } SelectablePanel::Commands => String::new(), }; + if !title.is_empty() { + title = format!(" {title} "); + } let mut block = Block::default() .borders(Borders::ALL) .border_type(BorderType::Rounded) @@ -136,19 +139,21 @@ pub fn containers( let state_style = Style::default().fg(i.state.get_color()); let blue = Style::default().fg(Color::Blue); - // let mems = format!( - // "{:>1} / {:>1}", - // i.mem_stats.back().unwrap_or(&ByteStats::default()), - // i.mem_limit - // ); - let lines = Spans::from(vec![ Span::styled( - format!("{:width$}", i.status, width = &widths.status.1.into()), + format!( + "{MARGIN}{:>width$}", + i.status, + width = &widths.status.1.into() + ), state_style, ), Span::styled( @@ -161,7 +166,13 @@ pub fn containers( state_style, ), Span::styled( - format!("{MARGIN}{:>width_current$} / {:>width_limit$}", i.mem_stats.back().unwrap_or(&ByteStats::default()), i.mem_limit, width_current = &widths.mem.1.into(), width_limit = &widths.mem.2.into()), + format!( + "{MARGIN}{:>width_current$} / {:>width_limit$}", + i.mem_stats.back().unwrap_or(&ByteStats::default()), + i.mem_limit, + width_current = &widths.mem.1.into(), + width_limit = &widths.mem.2.into() + ), state_style, ), Span::styled( @@ -226,22 +237,14 @@ pub fn logs( .alignment(Alignment::Center); f.render_widget(paragraph, area); } else if let Some(index) = index { - let items = app_data.lock().containers.items[index] - .logs - .items - .iter() - .enumerate() - .map(|i| i.1.clone()) - .collect::>(); - - let items = List::new(items) + let items = List::new(app_data.lock().containers.items[index].logs.to_vec()) .block(block) .highlight_symbol(ARROW) .highlight_style(Style::default().add_modifier(Modifier::BOLD)); f.render_stateful_widget( items, area, - &mut app_data.lock().containers.items[index].logs.state, + app_data.lock().containers.items[index].logs.state(), ); } else { let paragraph = Paragraph::new("no logs found") diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 40d917d..d46ce7d 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -6,7 +6,7 @@ use crossterm::{ }; use parking_lot::Mutex; use std::{ - io, + io::{self, Write}, sync::{atomic::Ordering, Arc}, }; use std::{sync::atomic::AtomicBool, time::Instant}; @@ -31,11 +31,10 @@ use crate::{ /// Take control of the terminal in order to draw gui pub async fn create_ui( app_data: Arc>, - sender: Sender, - is_running: Arc, - gui_state: Arc>, docker_sx: Sender, - // update_duration: Duration, + gui_state: Arc>, + is_running: Arc, + sender: Sender, ) -> Result<()> { enable_raw_mode()?; let mut stdout = io::stdout(); @@ -44,16 +43,14 @@ pub async fn create_ui( let mut terminal = Terminal::new(backend)?; let res = run_app( - &mut terminal, app_data, - sender, - is_running, - gui_state, docker_sx, + gui_state, + is_running, + sender, + &mut terminal, ) .await; - terminal.clear()?; - disable_raw_mode()?; execute!( terminal.backend_mut(), @@ -65,46 +62,43 @@ pub async fn create_ui( if let Err(err) = res { println!("{err}"); } + std::io::stdout().flush().unwrap_or(()); Ok(()) } /// Run a loop to draw the gui async fn run_app( - terminal: &mut Terminal, app_data: Arc>, - sender: Sender, - is_running: Arc, - gui_state: Arc>, docker_sx: Sender, + gui_state: Arc>, + is_running: Arc, + sender: Sender, + terminal: &mut Terminal, ) -> Result<(), AppError> { let update_duration = std::time::Duration::from_millis(u64::from(app_data.lock().args.docker_interval)); let input_poll_rate = std::time::Duration::from_millis(75); let status_dockerconnect = gui_state.lock().status_contains(&[Status::DockerConnect]); + let mut now = Instant::now(); if status_dockerconnect { let mut seconds = 5; loop { if seconds < 1 { - is_running.store(false, Ordering::Relaxed); break; } + if now.elapsed() >= std::time::Duration::from_secs(1) { + seconds -= 1; + now = Instant::now(); + } if terminal .draw(|f| draw_blocks::error(f, AppError::DockerConnect, Some(seconds))) .is_err() { return Err(AppError::Terminal); } - tokio::time::sleep(std::time::Duration::from_secs(1)).await; - seconds -= 1; } } else { - let mut now = Instant::now(); - loop { - if terminal.draw(|f| ui(f, &app_data, &gui_state)).is_err() { - return Err(AppError::Terminal); - } - // TODO could only draw if in gui mode, that way all inputs & docker commands will run, and can just trace!("{event"}) all over the place - // refactor this into own function, so can be called without drawing to the terminal + while is_running.load(Ordering::Relaxed) { if crossterm::event::poll(input_poll_rate).unwrap_or(false) { if let Ok(event) = event::read() { if let Event::Key(key) = event { @@ -128,12 +122,12 @@ async fn run_app( docker_sx.send(DockerMessage::Update).await.unwrap_or(()); now = Instant::now(); } - - if !is_running.load(Ordering::Relaxed) { - break; + if terminal.draw(|f| ui(f, &app_data, &gui_state)).is_err() { + return Err(AppError::Terminal); } } } + terminal.clear().unwrap_or(()); Ok(()) } From fb400517a7c6281bcddda88b5c8c6570f02107c1 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:14:02 +0000 Subject: [PATCH 14/19] docs: changelog --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5219847..8152a5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +### Chores ++ dependencies updated, [8cd199db49186fad6ce432bb277e3a10f0a08d34], [d880b829c123dbe57deccadef97810e45c083737], [66d57c99558ca14d9593d6dbfd5b0e8e5d59055d], [33f9374908942f4a3b90be227fad94ca353cf351] ++ create_release.sh typos, [9a27d46a044452080144ee1367dc95886b10abf8] ++ dev container post create install cross, [2d253f034182741d434e4bac12317f24221d0d4a] + +### Features ++ Logs in own struct, [657ea2d751a71f05b17547b47c492d5676817336] ++ spawn docker exec commands into own thread, [9ec43e124a62a80f4e78acba85fc3af5980ce260] ++ align memory columns correctly, closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] + +### Refactors ++ main.rs tidy up, [97b89349dc2de275ca514a1e6420255a63d775e8] ++ derive Default for GuiState, [9dcd0509efeb464f58fb53d813bd78de2447949d] ++ param reduction, AtomicBool to Relaxed, [0350293de3c00c6e5e5d787b7596bb3413d1cda1] + # v0.1.11 ### 2023-01-03 From bb26734039226d1987aaabd222251a6eb04db871 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 18 Jan 2023 02:14:40 +0000 Subject: [PATCH 15/19] docs: changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8152a5a..bf03bcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ### Features + Logs in own struct, [657ea2d751a71f05b17547b47c492d5676817336] + spawn docker exec commands into own thread, [9ec43e124a62a80f4e78acba85fc3af5980ce260] -+ align memory columns correctly, closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] ++ align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] ### Refactors + main.rs tidy up, [97b89349dc2de275ca514a1e6420255a63d775e8] From 007d5d83d7f1b93e1e78777a4417b2740db706bd Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 21 Jan 2023 21:19:40 +0000 Subject: [PATCH 16/19] chore: dependencies updated --- Cargo.lock | 291 +++++++++++++++++++++++++++++++++++++++++++++-------- Cargo.toml | 2 +- 2 files changed, 250 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ec59a3..0dcf962 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.68" @@ -20,6 +29,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + [[package]] name = "bitflags" version = "1.3.2" @@ -28,11 +43,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bollard" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82e7850583ead5f8bbef247e2a3c37a19bd576e8420cd262a6711921827e1e5" +checksum = "af254ed2da4936ef73309e9597180558821cb16ae9bba4cb24ce6b612d8d80ed" dependencies = [ - "base64", + "base64 0.21.0", "bollard-stubs", "bytes", "futures-core", @@ -46,6 +61,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "serde_repr", "serde_urlencoded", "thiserror", "tokio", @@ -56,14 +72,20 @@ dependencies = [ [[package]] name = "bollard-stubs" -version = "1.42.0-rc.3" +version = "1.42.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed59b5c00048f48d7af971b71f800fdf23e858844a6f9e4d32ca72e9399e7864" +checksum = "602bda35f33aeb571cef387dcd4042c643a8bf689d8aaac2cc47ea24cb7bc7e0" dependencies = [ "serde", "serde_with", ] +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + [[package]] name = "bytes" version = "1.3.0" @@ -94,6 +116,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "num-integer", + "num-traits", + "serde", + "winapi", +] + [[package]] name = "clap" version = "4.1.1" @@ -133,6 +168,22 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + [[package]] name = "crossterm" version = "0.25.0" @@ -159,36 +210,45 @@ dependencies = [ ] [[package]] -name = "darling" -version = "0.13.4" +name = "cxx" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e" dependencies = [ - "darling_core", - "darling_macro", + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", ] [[package]] -name = "darling_core" -version = "0.13.4" +name = "cxx-build" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200" dependencies = [ - "fnv", - "ident_case", + "cc", + "codespan-reporting", + "once_cell", "proc-macro2", "quote", - "strsim", + "scratch", "syn", ] [[package]] -name = "darling_macro" -version = "0.13.4" +name = "cxxbridge-flags" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e" dependencies = [ - "darling_core", + "proc-macro2", "quote", "syn", ] @@ -410,10 +470,28 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "iana-time-zone" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] [[package]] name = "idna" @@ -433,6 +511,7 @@ checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", + "serde", ] [[package]] @@ -463,6 +542,15 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +[[package]] +name = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -475,6 +563,15 @@ version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -528,6 +625,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.15.0" @@ -724,9 +840,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.6" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" dependencies = [ "bitflags", "errno", @@ -748,6 +864,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scratch" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + [[package]] name = "serde" version = "1.0.152" @@ -779,6 +901,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -793,24 +926,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "1.14.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "30d904179146de381af4c93d3af6ca4984b3152db687dacb9c3c35e86f39809c" dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap", "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", + "serde_json", + "time", ] [[package]] @@ -932,6 +1058,33 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +dependencies = [ + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -1086,9 +1239,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" @@ -1166,6 +1319,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 7278d36..fc25d00 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ categories = ["command-line-utilities"] [dependencies] anyhow = "1.0" -bollard = "0.13" +bollard = "0.14" cansi = "2.2" clap={version="4.1", features = ["derive", "unicode", "color"] } crossterm = "0.25" From 3858e2ac23341f6f75b2e1ab5349afb68ac5eac3 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 21 Jan 2023 21:21:45 +0000 Subject: [PATCH 17/19] docs: changelog --- CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf03bcd..6d92e72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,12 @@ ### Chores -+ dependencies updated, [8cd199db49186fad6ce432bb277e3a10f0a08d34], [d880b829c123dbe57deccadef97810e45c083737], [66d57c99558ca14d9593d6dbfd5b0e8e5d59055d], [33f9374908942f4a3b90be227fad94ca353cf351] ++ dependencies updated, [8cd199db49186fad6ce432bb277e3a10f0a08d34], [d880b829c123dbe57deccadef97810e45c083737], [66d57c99558ca14d9593d6dbfd5b0e8e5d59055d], [33f9374908942f4a3b90be227fad94ca353cf351], [007d5d83d7f1b93e1e78777a4417b2740db706bd] + create_release.sh typos, [9a27d46a044452080144ee1367dc95886b10abf8] + dev container post create install cross, [2d253f034182741d434e4bac12317f24221d0d4a] ### Features -+ Logs in own struct, [657ea2d751a71f05b17547b47c492d5676817336] -+ spawn docker exec commands into own thread, [9ec43e124a62a80f4e78acba85fc3af5980ce260] -+ align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] ++ store Logs in own struct, use a hashset to track timestamps, hopefully closes #11, [657ea2d751a71f05b17547b47c492d5676817336] ++ Spawn docker commands into own thread, can now execute multiple docker commands at the same time, [9ec43e124a62a80f4e78acba85fc3af5980ce260] ++ align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`, closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] ### Refactors + main.rs tidy up, [97b89349dc2de275ca514a1e6420255a63d775e8] From a53de908c6524b1789286087dbc2bbfe92923373 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 21 Jan 2023 22:06:53 +0000 Subject: [PATCH 18/19] docs: changelog --- CHANGELOG.md | 1 + README.md | 2 +- src/main.rs | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d92e72..9183050 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ + dev container post create install cross, [2d253f034182741d434e4bac12317f24221d0d4a] ### Features +**all potentially considered breaking changes** + store Logs in own struct, use a hashset to track timestamps, hopefully closes #11, [657ea2d751a71f05b17547b47c492d5676817336] + Spawn docker commands into own thread, can now execute multiple docker commands at the same time, [9ec43e124a62a80f4e78acba85fc3af5980ce260] + align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`, closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] diff --git a/README.md b/README.md index c73c654..52660c0 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ rm oxker_linux_x86_64.tar.gz oxker or, for automatic platform selection, download, and installation (to `$HOME/.local/bin`) -*One should verify all scripts before running in your shell* +*One should always verify script content before running in a shell* ```bash curl https://raw.githubusercontent.com/mrjackwills/oxker/main/install.sh | bash diff --git a/src/main.rs b/src/main.rs index 4e107cf..863ad56 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,12 +35,12 @@ use crate::docker_data::DockerMessage; const ENTRY_POINT: &str = "./start_oxker.sh"; -// write to file if `-g` is set? +/// write to file if `-g` is set? fn setup_tracing() { tracing_subscriber::fmt().with_max_level(Level::INFO).init(); } -// Create docker daemon handler, and only spawn up the docker data handler if a ping returns non-error +/// Create docker daemon handler, and only spawn up the docker data handler if a ping returns non-error async fn docker_init( app_data: &Arc>, docker_rx: Receiver, From 93dbc614d1cc249e14a60f5a977b28658b9ad6dd Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sat, 21 Jan 2023 22:20:40 +0000 Subject: [PATCH 19/19] chore: release v0.2.0 --- .github/release-body.md | 18 +++++++++++------- CHANGELOG.md | 21 ++++++++++++--------- Cargo.toml | 2 +- src/ui/mod.rs | 2 +- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/.github/release-body.md b/.github/release-body.md index be03e66..e92a330 100644 --- a/.github/release-body.md +++ b/.github/release-body.md @@ -1,16 +1,20 @@ -### 2023-01-03 +### 2023-01-21 ### Chores -+ dependencies updated, [9b09146aadae5727a5fee4de5fe0c1d70c581c22] ++ dependencies updated, [8cd199db49186fad6ce432bb277e3a10f0a08d34], [d880b829c123dbe57deccadef97810e45c083737], [66d57c99558ca14d9593d6dbfd5b0e8e5d59055d], [33f9374908942f4a3b90be227fad94ca353cf351], [007d5d83d7f1b93e1e78777a4417b2740db706bd] ++ create_release.sh typos, [9a27d46a044452080144ee1367dc95886b10abf8] ++ dev container post create install cross, [2d253f034182741d434e4bac12317f24221d0d4a] ### Features -+ `install.sh` script added, for automated platform selection, download, and installation, [7a42eba6b0968314af40ff87bcc42d288f6860bc], [e0703b76a1a28cfe266f130a7f7dec92f1b5ad58] - -### Fixes -+ If a sort order is set, sort containers on every `update_stats()` execution, [cfdea77594e48c8c20a4d6e6c7ea31c9181361a1] +**all potentially considered breaking changes** ++ store Logs in own struct, use a hashset to track timestamps, hopefully closes #11, [657ea2d751a71f05b17547b47c492d5676817336] ++ Spawn docker commands into own thread, can now execute multiple docker commands at the same time, [9ec43e124a62a80f4e78acba85fc3af5980ce260] ++ align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`, closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] ### Refactors -+ input sort executed in app_data struct `sort_by_header()`, [3cdc5fae02097628799209f371ae9292e513e76c] ++ main.rs tidy up, [97b89349dc2de275ca514a1e6420255a63d775e8] ++ derive Default for GuiState, [9dcd0509efeb464f58fb53d813bd78de2447949d] ++ param reduction, AtomicBool to Relaxed, [0350293de3c00c6e5e5d787b7596bb3413d1cda1] see CHANGELOG.md for more details diff --git a/CHANGELOG.md b/CHANGELOG.md index 9183050..f7db59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,21 @@ +# v0.2.0 +### 2023-01-21 + ### Chores -+ dependencies updated, [8cd199db49186fad6ce432bb277e3a10f0a08d34], [d880b829c123dbe57deccadef97810e45c083737], [66d57c99558ca14d9593d6dbfd5b0e8e5d59055d], [33f9374908942f4a3b90be227fad94ca353cf351], [007d5d83d7f1b93e1e78777a4417b2740db706bd] -+ create_release.sh typos, [9a27d46a044452080144ee1367dc95886b10abf8] -+ dev container post create install cross, [2d253f034182741d434e4bac12317f24221d0d4a] ++ dependencies updated, [8cd199db](https://github.com/mrjackwills/oxker/commit/8cd199db49186fad6ce432bb277e3a10f0a08d34), [d880b829](https://github.com/mrjackwills/oxker/commit/d880b829c123dbe57deccadef97810e45c083737), [66d57c99](https://github.com/mrjackwills/oxker/commit/66d57c99558ca14d9593d6dbfd5b0e8e5d59055d), [33f93749](https://github.com/mrjackwills/oxker/commit/33f9374908942f4a3b90be227fad94ca353cf351), [007d5d83](https://github.com/mrjackwills/oxker/commit/007d5d83d7f1b93e1e78777a4417b2740db706bd) ++ create_release.sh typos, [9a27d46a](https://github.com/mrjackwills/oxker/commit/9a27d46a044452080144ee1367dc95886b10abf8) ++ dev container post create install cross, [2d253f03](https://github.com/mrjackwills/oxker/commit/2d253f034182741d434e4bac12317f24221d0d4a) ### Features **all potentially considered breaking changes** -+ store Logs in own struct, use a hashset to track timestamps, hopefully closes #11, [657ea2d751a71f05b17547b47c492d5676817336] -+ Spawn docker commands into own thread, can now execute multiple docker commands at the same time, [9ec43e124a62a80f4e78acba85fc3af5980ce260] -+ align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`, closes #20, [bd7dfcd2c512a527d66a1388f90006988a487186], [51c580010a24de2427373795803936d498dc8cee] ++ store Logs in own struct, use a hashset to track timestamps, hopefully closes [#11](https://github.com/mrjackwills/oxker/issues/11), [657ea2d7](https://github.com/mrjackwills/oxker/commit/657ea2d751a71f05b17547b47c492d5676817336) ++ Spawn docker commands into own thread, can now execute multiple docker commands at the same time, [9ec43e12](https://github.com/mrjackwills/oxker/commit/9ec43e124a62a80f4e78acba85fc3af5980ce260) ++ align memory columns correctly, minimum byte display value now `0.00 kB`, rather than `0 B`, closes [#20](https://github.com/mrjackwills/oxker/issues/20), [bd7dfcd2](https://github.com/mrjackwills/oxker/commit/bd7dfcd2c512a527d66a1388f90006988a487186), [51c58001](https://github.com/mrjackwills/oxker/commit/51c580010a24de2427373795803936d498dc8cee) ### Refactors -+ main.rs tidy up, [97b89349dc2de275ca514a1e6420255a63d775e8] -+ derive Default for GuiState, [9dcd0509efeb464f58fb53d813bd78de2447949d] -+ param reduction, AtomicBool to Relaxed, [0350293de3c00c6e5e5d787b7596bb3413d1cda1] ++ main.rs tidy up, [97b89349](https://github.com/mrjackwills/oxker/commit/97b89349dc2de275ca514a1e6420255a63d775e8) ++ derive Default for GuiState, [9dcd0509](https://github.com/mrjackwills/oxker/commit/9dcd0509efeb464f58fb53d813bd78de2447949d) ++ param reduction, AtomicBool to Relaxed, [0350293d](https://github.com/mrjackwills/oxker/commit/0350293de3c00c6e5e5d787b7596bb3413d1cda1) # v0.1.11 ### 2023-01-03 diff --git a/Cargo.toml b/Cargo.toml index fc25d00..f01d9ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxker" -version = "0.1.11" +version = "0.2.0" edition = "2021" authors = ["Jack Wills "] description = "A simple tui to view & control docker containers" diff --git a/src/ui/mod.rs b/src/ui/mod.rs index d46ce7d..43ff005 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -62,7 +62,7 @@ pub async fn create_ui( if let Err(err) = res { println!("{err}"); } - std::io::stdout().flush().unwrap_or(()); + std::io::stdout().flush().unwrap_or(()); Ok(()) }