chore: merge release-v0.1.9 into main
This commit is contained in:
@@ -1,13 +1,8 @@
|
||||
### 2022-12-05
|
||||
|
||||
### Chores
|
||||
+ dependencies updated, [e3aa4420cb510df0381e311d37e768937070387a]
|
||||
+ docker-compose.yml alpine bump, [911c6596684db4ccbe7a55aadd6f595a95f89bb0]
|
||||
+ github workflow use dtolnay/rust-toolchain, [57c18878690477a05d7330112a65d1d58a07901e]
|
||||
|
||||
### Features
|
||||
+ Clicking a header now toggles between Ascending -> Descending -> Default. Use the containers created_time as the default order - maybe add created column in future version, closes #18, [cf14ba498987db587c0f5bef8a67cf4113ffcb1e], [d1de291473d8a1028f1936429832d3820d75df54]
|
||||
+ `-s` flag for showing the oxker container when executing the docker image, [c93870e5fbbc7df35c69d32e4460d2104e521e33]
|
||||
### Fixes
|
||||
+ disallow commands to be sent to a dockerised oxker container, closes #19, [160b8021b1de898064756b53c127d49b8096ce4d]
|
||||
+ if no container created time, use 0, instead of system_time(), [1adb61ce3b029d4fcf51961958d483b2fae8825a]
|
||||
|
||||
|
||||
see <a href='https://github.com/mrjackwills/oxker/blob/main/CHANGELOG.md'>CHANGELOG.md</a> for more details
|
||||
|
||||
+8
-1
@@ -1,3 +1,10 @@
|
||||
# <a href='https://github.com/mrjackwills/oxker/releases/tag/v0.1.9'>v0.1.9</a>
|
||||
### 2022-12-05
|
||||
|
||||
### Fixes
|
||||
+ disallow commands to be sent to a dockerised oxker container, closes [#19](https://github.com/mrjackwills/oxker/issues/19), [160b8021](https://github.com/mrjackwills/oxker/commit/160b8021b1de898064756b53c127d49b8096ce4d)
|
||||
+ if no container created time, use 0, instead of system_time(), [1adb61ce](https://github.com/mrjackwills/oxker/commit/1adb61ce3b029d4fcf51961958d483b2fae8825a)
|
||||
|
||||
# <a href='https://github.com/mrjackwills/oxker/releases/tag/v0.1.8'>v0.1.8</a>
|
||||
### 2022-12-05
|
||||
|
||||
@@ -7,7 +14,7 @@
|
||||
+ github workflow use dtolnay/rust-toolchain, [57c18878](https://github.com/mrjackwills/oxker/commit/57c18878690477a05d7330112a65d1d58a07901e)
|
||||
|
||||
### Features
|
||||
+ Clicking a header now toggles between Ascending -> Descending -> Default. Use the containers created_time as the default order - maybe add created column in future version, closes #18, [cf14ba49](https://github.com/mrjackwills/oxker/commit/cf14ba498987db587c0f5bef8a67cf4113ffcb1e), [d1de2914](https://github.com/mrjackwills/oxker/commit/d1de291473d8a1028f1936429832d3820d75df54)
|
||||
+ Clicking a header now toggles between Ascending -> Descending -> Default. Use the containers created_time as the default order - maybe add created column in future version, closes [#18](https://github.com/mrjackwills/oxker/issues/18), [cf14ba49](https://github.com/mrjackwills/oxker/commit/cf14ba498987db587c0f5bef8a67cf4113ffcb1e), [d1de2914](https://github.com/mrjackwills/oxker/commit/d1de291473d8a1028f1936429832d3820d75df54)
|
||||
+ `-s` flag for showing the oxker container when executing the docker image, [c93870e5](https://github.com/mrjackwills/oxker/commit/c93870e5fbbc7df35c69d32e4460d2104e521e33)
|
||||
|
||||
# <a href='https://github.com/mrjackwills/oxker/releases/tag/v0.1.7'>v0.1.7</a>
|
||||
|
||||
Generated
+1
-1
@@ -567,7 +567,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
|
||||
|
||||
[[package]]
|
||||
name = "oxker"
|
||||
version = "0.1.8"
|
||||
version = "0.1.9"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bollard",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "oxker"
|
||||
version = "0.1.8"
|
||||
version = "0.1.9"
|
||||
edition = "2021"
|
||||
authors = ["Jack Wills <email@mrjackwills.com>"]
|
||||
description = "A simple tui to view & control docker containers"
|
||||
|
||||
+1
-1
@@ -109,7 +109,7 @@ update_release_body_and_changelog () {
|
||||
|
||||
# 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
|
||||
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
|
||||
|
||||
@@ -370,17 +370,19 @@ pub struct ContainerItem {
|
||||
pub state: State,
|
||||
pub status: String,
|
||||
pub tx: ByteStats,
|
||||
pub is_oxker: bool,
|
||||
}
|
||||
|
||||
impl ContainerItem {
|
||||
/// Create a new container item
|
||||
pub fn new(
|
||||
id: ContainerId,
|
||||
status: String,
|
||||
image: String,
|
||||
state: State,
|
||||
name: String,
|
||||
created: u64,
|
||||
id: ContainerId,
|
||||
image: String,
|
||||
is_oxker: bool,
|
||||
name: String,
|
||||
state: State,
|
||||
status: String,
|
||||
) -> Self {
|
||||
let mut docker_controls = StatefulList::new(DockerControls::gen_vec(state));
|
||||
docker_controls.start();
|
||||
@@ -392,6 +394,7 @@ impl ContainerItem {
|
||||
docker_controls,
|
||||
id,
|
||||
image,
|
||||
is_oxker,
|
||||
last_updated: 0,
|
||||
logs,
|
||||
mem_limit: ByteStats::default(),
|
||||
|
||||
+26
-7
@@ -5,7 +5,7 @@ use tui::widgets::ListItem;
|
||||
|
||||
mod container_state;
|
||||
|
||||
use crate::{app_error::AppError, parse_args::CliArgs, ui::log_sanitizer};
|
||||
use crate::{app_error::AppError, parse_args::CliArgs, ui::log_sanitizer, ENTRY_POINT};
|
||||
pub use container_state::*;
|
||||
|
||||
/// Global app_state, stored in an Arc<Mutex>
|
||||
@@ -171,6 +171,18 @@ impl AppData {
|
||||
output
|
||||
}
|
||||
|
||||
/// 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
|
||||
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) {
|
||||
return x.is_oxker;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// Sort the containers vec, based on a heading, either ascending or descending,
|
||||
/// If not sort set, then sort by created time
|
||||
fn sort_containers(&mut self) {
|
||||
@@ -242,7 +254,7 @@ impl AppData {
|
||||
} else {
|
||||
self.containers
|
||||
.items
|
||||
.sort_by(|a, b| a.created.cmp(&b.created))
|
||||
.sort_by(|a, b| a.created.cmp(&b.created));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -433,13 +445,14 @@ impl AppData {
|
||||
pub fn update_containers(&mut self, all_containers: &mut [ContainerSummary]) {
|
||||
let all_ids = self.get_all_ids();
|
||||
|
||||
// Sort the containes by created, that have a constant order
|
||||
all_containers.sort_by(|a, b| a.created.cmp(&b.created));
|
||||
// Only sort it no containers currently set, as afterwards the order is fixed
|
||||
if self.containers.items.is_empty() {
|
||||
all_containers.sort_by(|a, b| a.created.cmp(&b.created));
|
||||
}
|
||||
|
||||
if !all_containers.is_empty() && self.containers.state.selected().is_none() {
|
||||
self.containers.start();
|
||||
}
|
||||
let now = Self::get_systemtime();
|
||||
|
||||
for (index, id) in all_ids.iter().enumerate() {
|
||||
if !all_containers
|
||||
@@ -472,6 +485,11 @@ impl AppData {
|
||||
})
|
||||
});
|
||||
|
||||
let is_oxker = i
|
||||
.command
|
||||
.as_ref()
|
||||
.map_or(false, |i| i.starts_with(ENTRY_POINT));
|
||||
|
||||
let state = State::from(i.state.as_ref().map_or("dead".to_owned(), trim_owned));
|
||||
let status = i.status.as_ref().map_or(String::new(), trim_owned);
|
||||
|
||||
@@ -482,7 +500,7 @@ impl AppData {
|
||||
|
||||
let id = ContainerId::from(id);
|
||||
|
||||
let created = i.created.map_or(now, |i| u64::try_from(i).unwrap_or(now));
|
||||
let created = i.created.map_or(0, |i| u64::try_from(i).unwrap_or(0));
|
||||
// If container info already in containers Vec, then just update details
|
||||
if let Some(item) = self.get_container_by_id(&id) {
|
||||
if item.name != name {
|
||||
@@ -507,7 +525,8 @@ impl AppData {
|
||||
};
|
||||
// else container not known, so make new ContainerItem and push into containers Vec
|
||||
} else {
|
||||
let container = ContainerItem::new(id, status, image, state, name, created);
|
||||
let container =
|
||||
ContainerItem::new(created, id, image, is_oxker, name, state, status);
|
||||
self.containers.items.push(container);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ use crate::{
|
||||
app_error::AppError,
|
||||
parse_args::CliArgs,
|
||||
ui::{GuiState, Status},
|
||||
ENTRY_POINT,
|
||||
};
|
||||
mod message;
|
||||
pub use message::DockerMessage;
|
||||
@@ -190,7 +191,7 @@ impl DockerData {
|
||||
Some(_) => {
|
||||
if f.command
|
||||
.as_ref()
|
||||
.map_or(false, |c| c.starts_with("./start_oxker.sh"))
|
||||
.map_or(false, |c| c.starts_with(ENTRY_POINT))
|
||||
&& self.args.show_self
|
||||
{
|
||||
None
|
||||
|
||||
@@ -250,6 +250,10 @@ impl InputHandler {
|
||||
|
||||
if let Some(command) = option_command {
|
||||
let option_id = self.app_data.lock().get_selected_container_id();
|
||||
// Poor way of disallowing commands to be sent to a containerised okxer
|
||||
if self.app_data.lock().selected_container_is_oxker() {
|
||||
return;
|
||||
};
|
||||
if let Some(id) = option_id {
|
||||
match command {
|
||||
DockerControls::Pause => self
|
||||
|
||||
@@ -26,6 +26,8 @@ mod ui;
|
||||
|
||||
use ui::{create_ui, GuiState, Status};
|
||||
|
||||
const ENTRY_POINT: &str = "./start_oxker.sh";
|
||||
|
||||
fn setup_tracing() {
|
||||
tracing_subscriber::fmt().with_max_level(Level::INFO).init();
|
||||
// TODO write to file?
|
||||
|
||||
Reference in New Issue
Block a user